我使用broadcastReceiver在具有闹钟功能的应用程序中触发警报。这个类目前非常简单
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent scheduledIntent = new Intent(context, AlarmUp.class);
scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(scheduledIntent);
}}问题是,在设备重启的情况下,它会被取消,因此警报不会触发。有没有办法让接收器在重启后自动继续?Thx
发布于 2012-11-08 17:15:58
有没有办法让接收器在重启后自动继续?
不幸的是,没有。当电话关机时,系统会销毁所有挂起的意图。
要解决您的问题,您应该在android.intent.action.BOOT_COMPLETED上进行过滤,以便在设备启动时调用BroadcastReceiver。然后,您可以重新安排所有需要的警报。
在你的清单中有这样的东西:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:name=".broadcasts.InitReceiver"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.TIME_SET" />
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
</intent-filter>
</receiver>您可以注意到,还有TIME_SET和TIMEZONE_CHANGED,因为即使用户从一个时区旅行到另一个时区,您也可能希望您的警报工作。
还有一些类似于广播的东西。
public class YourBroadcastReceiverName extends BroadcastReceiver {
private AlarmManagerFacade alarmManager;
@Override
public void onReceive(Context context, Intent intent) {
// Retreive data related to alarms
Cursor cursor = context.getContentResolver().query(Alarm.CONTENT_URI, null,
Alarm.COLUMN_ACTIVE + " = ? ",
new String[] { String.valueOf(1) }, "");
if (cursor.moveToFirst()) {
// Schedule all the active alarms.
alarmManager = new AlarmManagerFacade(context);
do {
// TODO : Schedule alarm according to data in cursor.
} while (cursor.moveToNext());
}
cursor.close();
}
}(这段代码来自我的一个应用程序。某些对象可能在Android SDK中不可用。)
为了能够重新调度所有的警报,您需要将它们存储在某个地方,并将其存储在中。
例如,您可以编写自己的ContentProvider。
也许还有其他更简单的方法来存储警报,比如使用SharedPreferences。
最后一种选择是,您可以创建一个包含信息的对象,将其序列化,并将其作为文件存储在SD卡上。
如果你想仔细看看不同的存储选项,你可以在这里的文档中阅读到:http://developer.android.com/guide/topics/data/data-storage.html
我希望所有这些对你有帮助。:)
发布于 2012-11-08 17:16:29
编辑您的清单文件,
<receiver android:name=".RecieverName"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>它将在设备重新启动时自动启动。
还声明了它的权限,
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>https://stackoverflow.com/questions/13285852
复制相似问题