我有一个接收器,在手机启动后启动,如下所示:
<receiver android:name=".OnBootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
在我接收的接收器中设置了这样的警报:
AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, LocationPoller.class);
i.putExtra(LocationPoller.EXTRA_INTENT,
new Intent(context, LocationReceiver.class));
i.putExtra(LocationPoller.EXTRA_PROVIDER,
LocationManager.GPS_PROVIDER);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
PERIOD,
pi);
它工作正常,当然,当用户安装应用程序时,在用户重启手机之前不会设置闹钟。
要解决这个问题,我需要从我的Activity中检查是否设置了AlarmManager,如果不是,我需要从Activity设置。
因此,如何检查警报管理器是否已设置。
答案 0 :(得分:4)
你唯一可以做的就是当用户安装应用程序并在第一次设置SharedPreference
中的标志时打开它,告诉你警报是否设置如果未设置警报阿拉姆。
Activity
中的
检查onCreate
方法
SharedPreferences spref = getSharedPreferences("TAG", MODE_PRIVATE);
Boolean alaram_set = spref.getBoolean("alarm_set_flag", false); //default is false
if(!alaram_set){
//create your alarm here then set the flag to true
SharedPreferences.Editor editor = spref.edit();
editor.putBoolean("alarm_set_flag", true); // value to store
editor.commit();
}
答案 1 :(得分:2)
可悲的是,您无法在AlarmManager中查询当前的警报。
解决问题的最佳方法是cancel your current Alarm并设置一个新选项。
您只需要创建一个与接收者中的意图匹配的意图。 More info here
将此添加到您的活动中
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, LocationPoller.class);
i.putExtra(LocationPoller.EXTRA_INTENT,
new Intent(context, LocationReceiver.class));
i.putExtra(LocationPoller.EXTRA_PROVIDER,
LocationManager.GPS_PROVIDER);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);
// Cancel alarms
try {
AlarmManager.cancel(pi);
} catch (Exception e) {
Log.e(TAG, "AlarmManager update was not canceled. " + e.toString());
}
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime(),
PERIOD,
pi);
您可能需要更改intent的上下文,使其与Reciever中的相同。
另一种解决方法是检测它是否是App的第一次启动,然后才启动它。但是如果用户在第一次启动之前重新启动手机会发生什么呢?