安排闹钟的代码。
PendingIntent sender = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, sender);
它的工作正常,但当我在任务杀手中杀死我的应用程序时,我丢失了我的预定警报。如何解决这个问题?
答案 0 :(得分:21)
让你的应用程序在被杀死时广播一条消息,当这条消息被广播时,让一个监听器检查服务是否仍在运行..如果它没有运行它。即使应用程序被终止,这也将确保您的服务正在运行。
<强>更新强>
我将尝试为您创建流程图
onDestroy()方法是服务的一部分。
我希望这会有所帮助。
更新2
我忘记提到的一件事是,理想情况下,您只需要运行一个服务实例。所以只要查看onStart()中存在的ID应该是==到1来启动它。忽略它。
服务类的通知方法:
onStart():在启动服务时调用此方法
onDestroy():这是在杀死服务时调用的方法
BroadcastReciever类的通知方法:
onReceive():此方法接收发送给它的所有意图(除非已过滤)
在BroadcastRecievers(消息广播)和服务(启动服务)上查找示例
参考文献:
http://developer.android.com/reference/android/content/BroadcastReceiver.html
http://developer.android.com/reference/android/app/Service.html
答案 1 :(得分:6)
当应用程序关闭时,警报管理器设置的警报不会被终止,如果重新启动,所有警报都会被操作系统清除,因为没有持久性。所以你需要做持久性。
重启时再次设置闹钟。
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//re register the alarm
}
}
的Manifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
.......
<receiver
android:name="BootReceiver"
android:enabled="true"
android:exported="true"
>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
您可以使用 SharedPreference 来节省时间(触发闹钟的时间或下次触发闹钟的时间)
使用它在启动接收器设置新警报。