我使用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
答案 0 :(得分:4)
有没有办法让接收器在a之后自动继续 重新启动吗?
不幸的是没有。当手机关机时,系统会销毁所有待处理的意图。
要解决您的问题,您应该对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
我希望这一切对你有所帮助。 :)
答案 1 :(得分:0)
编辑清单文件,
<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"/>