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

  显示原文与译文双语对照的内容
94 4

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

以前我在我的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 )的警报。 有人能给我一个代码示例或者链接到文档。 如何在定位时及时或者任何其他闹钟应用功能?

时间: 原作者:

131 3

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


Intent intent = new Intent(ALARM_RECEIVER_INTENT_TRIGGER);


intent.setClass(this, AlarmReceiver.class);



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

...