簡體   English   中英

如何檢查警報是否已設置並運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM