broadcastreceiver - 具有广播接收器和隐式广播禁止的with安卓 8.0奥奥兰 AlarmManager

  显示原文与译文双语对照的内容
92 2

我有重要的提醒是通过警报管理器( 它应该与闹钟应用程序的功能相同) 设置的。

以前我在我的Android清单中有以下内容:

 <receiver android:name="com.example.app.AlarmReceiver"> 
 <intent-filter>
 <action android:name="${packageName}.alarm.action.trigger"/>
 </intent-filter>
 </receiver>

广播接收器:

public class AlarmReceiver extends BroadcastReceiver {
 @Override public void onReceive(
 final Context context,
 final Intent intent) {
//WAKE LOCK
//BUILD NOTIFICATION etc...
 }
}

如何设置警报:

final PendingIntent operation = PendingIntent.getBroadcast(
 mContext,
 requestCode,
 intent,
 PendingIntent.FLAG_CANCEL_CURRENT);
 if (PlatformUtils.hasMarshmallow()) {
 alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation);
 } else {
 alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation);
 }
}

在Android中,我不能再使用隐式广播作为清单中的定义。没错,给出的替代方法是手动的register,如下所示:

final BroadcastReceiver receiver = new AlarmReceiver();
final IntentFilter intentFilter = new IntentFilter(ALARM_RECEIVER_INTENT_TRIGGER);
context.registerReceiver(receiver, intentFilter);

这对我来说似乎不符合逻辑。

警报接收器将被绑定到上下文的生存期。当应用程序因内存压力或者设备重新启动而被杀死时,这导致了一个问题。我每次都需要我的警报,因为它们对用户的健康至关重要。

即使我听 "。android 。intent 。action 。boot_completed"和 register,我的闹钟也很快被杀死,而且没有触发警报。我也没有看到我的闹钟

adb shell dumpsys警报

如何创建一个自定义广播接收器,该接收器接收一个隐式广播来激发( 8.0 )的警报。有人能给我一个代码示例或者链接到文档。如何在定位时及时或者任何其他闹钟应用功能?

时间:原作者:0个回答

131 3

稍微修改代码,使广播显式而不是隐式,你将是( 假定 thisActivity 引用或者其他 Context ):

Intent intent = new Intent(ALARM_RECEIVER_INTENT_TRIGGER);
intent.setClass(this, AlarmReceiver.class);

Oreo中的限制是隐式广播 Intent 注册,即说,你发送它的广播将只发送动作。类别或者指定的数据。通过指定接收广播的类,你将它设为显式

原作者:
...