【发布时间】:2013-11-19 20:44:28
【问题描述】:
我希望我的闹钟在设备重启后恢复/重启。在对 Google 进行大量研究后,我发现如果不将警报保存到数据库,它就无法工作。我有两个问题:
2.我应该如何在重新启动时从数据库中读取警报,因为广播接收器没有收到 BOOT_COMPLETED 意图。
1.如何将警报保存到数据库(如何知道数据库已创建并已插入值)?
EDIT:
我已经获得了必要的权限和接收者以及以下代码: 告诉我要在此代码中更改什么? MainActivity.java
onClick:
int intHrs = SetResetIntervalActivity.intHours;
int intMins = SetResetIntervalActivity.intMinutes;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, intHrs);
calendar.set(Calendar.MINUTE, intMins);
calendar.set(Calendar.SECOND, 0);
Intent myIntent = new Intent(
"com.sang.mobiledata.IntentAction.RECEIVE_RESETCONN_UPDATE");
myIntent.putExtra("FLAG_KEY", false);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, myIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) this
.getSystemService(Context.ALARM_SERVICE);
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
long interval = intHrs * 3600000 + intMins * 60000;
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), interval, pi);
long mins = interval / 60000;
Toast.makeText(
MainActivity.this,
"Data Connection will be reset every " + mins
+ " minute(s).", Toast.LENGTH_SHORT).show();
广播接收器:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase(
"android.intent.action.BOOT_COMPLETED")) {
//control never enters here
boolean blnVar=true;
blnVar=false;
....
清单:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:name="com.sang.mobiledata.ResetBroadcastReceiver"
android:exported="true" >
<intent-filter>
<action android:name="com.sang.mobiledata.IntentAction.RECEIVE_RESETCONN_UPDATE" />
</intent-filter>
<intent-filter>
<action android:name="com.sang.mobiledata.IntentAction.BOOT_COMPLETED" />
</intent-filter>
</receiver>
【问题讨论】:
-
而不是将警报保存在数据库中(我认为这是不可能的),您应该在设备启动时重新创建警报。
-
为什么你说
BOOT_COMPLETED没有被BroadcastReceiver接收? -
如何在重启时重新创建警报?
-
使用与您在活动中使用相同的语法。在设备启动时执行相同的语法。我为我的应用程序做同样的事情,自过去 44 天以来它运行良好。