在主动活动中 我有广播接收器,待定意图和警报管理器。它按照选定的时间触发(System.currentTimeMillis()+ smstimeinmilliseconds)。
Intent intent = new Intent(this, DBBroadcastReceiver.class);
intent.putExtra("message", message);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + smstimeinmilliseconds, pendingIntent);
在选定的时间内,此未决意图会触发广播接收器。
public class DBBroadcastReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
{
message = intent.getStringExtra("message");
}
我可以在活动中设置消息并在闹钟管理器中设置时间。 每件事都完美无瑕。我可以激活和停用它。但如果我在未来的时间设置几个报警管理器并重新启动我的手机。所有的报警经理都毁了......
请告诉我步骤和顺序如何处理活动,广播接收器以及我是否需要服务,如果是,那么我该如何使用它。
答案 0 :(得分:1)
您需要在启动时调用BoradcastReceiver。
然后你需要在你的清单中:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:name=".broadcasts.YourBroadcastReceiverName">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
此广播接收器需要再次安排所有警报。 类似的东西:
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
我希望这一切对你有所帮助。 :)