[英]How to check if Alarm have been set and running
我有一個接收器,在手機啟動后啟動,如下所示:
<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設置。
因此,如何檢查是否已設置警報管理器。
您唯一能做的就是當用戶安裝應用程序並在第一次設置SharedPreference
中的標志時打開它,該標志告訴您是否設置了警報,如果未設置警報,則設置Alaram。
在您的主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();
}
遺憾的是,您無法在AlarmManager中查詢當前警報。
您只需創建一個與接收器中的意圖匹配的意圖。 更多信息在這里
所以將此添加到您的活動中
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的第一次啟動,然后才啟動它。 但是如果用戶在第一次啟動之前重新啟動手機會發生什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.