2012-08-31 94 views
3

我有手機開機後啓動這樣的接收器:如何檢查是否報警已設置並運行

<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中設置。

因此,如何檢查Alarm manager是否已設置。

+0

您也可以看看:http://stackoverflow.com/questions/4556670/how-to-check-if-alarmmamager-already-has-an-alarm-set – Basher51

回答

2

可悲的是你的主要Activity 檢查,你不能查詢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); 

你可能需要改變的意圖的背景所以它一樣的人在Reciever。

另一個解決方法是檢測它是否是第一次啓動應用程序,然後才啓動它。但是,如果用戶在首次啓動之前重新啓動手機,會發生什麼?

4

您可以做的唯一的事情是,當用戶安裝應用程序並在第一次打開它時,您可以在SharedPreference中設置一個標誌,告訴您是否設置了鬧鐘或未設置鬧鐘設置爲Alaram。

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(); 
} 
+0

如果我運行AlarmManager不同的虛擬機,比我使用選項「android:process =」:remote「 – user836026

+1

」的活動如果你想訪問來自不同進程而不是MODE_PRIVATE的共享首選項,請使用MODE_MULTI_PROCESS – confucius

相關問題