2016-11-01 53 views
0

我即将在我的应用程序中插入一些提醒。他们每个人都会有不同的时间。即使应用程序未运行,也可以阅读有关BroadcastReceiver的静态版本。仅当应用程序处于活动状态时才动态版本,正在onPause上删除并在onResume上重新创建。 因为我插入提醒,我是否需要为每个提醒创建静态接收器?在不同的时间处理提醒是否正确?Android动态和静态BroadcastReceivers

回答

0

Static or Dynamic?我们可能会认为提醒可能会设置更长的时间,然后才会被触发。因此,在您的情况下使用静态广播接收机更安全。

在您的清单文件:

<receiver android:name=".YourBroadcastReceiver"/> 

独立的接收器为每个提醒?其实没有。您可以将所有提醒指向一个静态接收器,并且可以毫无问题地处理所有这些提示。如果您想要在需要执行不同操作的提醒类型之间分开,可以将一些stringExtra放到您的意图中,并在广播接收器中的if-else声明中提取该提示。这是一种方式。

如果将来将提醒设置为明显较长的日期:您可能知道您正在使用alarmManager设置提醒。但是,如果系统重新启动,所有警报都将被删除。因此,您可以考虑在您的提醒中添加某种内容。您可以存储大约在SharedPreferences/SQLite的分贝或你喜欢,只要你可以轻松地阅读和写数据的任何其他方法的提示信息。然后,您需要在系统重新启动后重置警报。为此,您需要再添加一个broadcastReceiver,它将侦听系统重新启动操作完成并在收到它时运行。然后,您在那里重新创建警报,或者运行单独的intentService以重新创建警报。

在您的清单文件:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<receiver android:name=".BootCompletedReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
+0

你的意思是2个broadcastreceivers?有一个处理BOOT_COMPLETED是不够的?另一个问题是接收者如何获得警报管理员的身份。 – learner

+0

是的,两个broadcastReceivers。您也可以在1个接收器中实现所有功能。但为什么? BOOT_COMPLETED接收器旨在重置警报,而第二个接收器负责对警报作出反应。他们的逻辑是不同的,为什么不把他们分开?有几个广播接收机是完全可以的。 – Marat

+0

关于闹钟的ID。我不知道你如何在你的情况下实施它。因此,我们假设您在创建待定意图之前将id作为额外的传递给您的意图。当闹铃时间到时,系统触发广播接收方在意图内部显示意图。然后,在'onReceive'方法中,您可以获得额外的内容。从而可以提取警报的ID – Marat

0

虽然我们定义了一个动态的广播接收器,提醒只当应用程序被激活给用户,如果没有广播接收器将不会被调用,用户将无法获得通过提醒通知触发。为此,广播接收机必须声明为静态,以便即使应用程序已关闭,提醒也会被触发。请记住报警是如何工作的:)