2012-05-10 75 views
1

現在我的應用程序出現了幾天的大問題。我很抱歉,如果我的英語不是很好的話。我實施了一個AlarmManager,讓我的應用程序的用戶可以選擇在當前或第二天的任何時間啓動某項服務。所以例如用戶可以選擇在明天上午8點設置服務時間,然後啓動服務。Android - 鬧鐘在很長一段時間之後有時候不會啓動

警報管理器現在應該從現在開始等待所選時間的計算時間(我也是手動計算時間並且它是正確的!),然後啓動服務。我現在的問題是,有時報警管理員會開始我的服務,而且有時候不是。看來,如果等待4個小時以上說不再工作,我的服務不會被調用。我已經設置了所有必要的許可,否則它根本無法工作。你可以看看下面的alarmmanager的代碼:(!和它註冊)

someIntent = new Intent(); 
someIntent.setAction("START_SERVICE"); 
AlarmManager alarams ; 

alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, someIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
alarams = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarams.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+delay, alarmIntent); 

廣播接收機是這樣實現的:

alarmReceiver = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 

       Intent myIntent = new Intent(MainActivity.this, MyService.class); 
       startService(myIntent); 
      } 
     }; 

正如我告訴你,如果是在開始服務之前停止工作。編輯: 我有一個想法。我在這個線程中讀了一些東西:Android long running service with alarm manager and inner broadcast receiver

這可能是,我的意圖「someIntent」的構造函數僅適用於清單文件中聲明的BroadcastReceivers。所以在我的情況下,我應該使用someIntent = new Intent("START_SERVICE")而不是someIntent = new Intent(); someIntent.setAction("START_SERVICE")。這種效應被稱爲隧道效應 - 我會弄清楚,如果它能起作用,我會在這裏發表我的經驗。感謝上面提到的線程的解釋清楚的答案!如果您有任何其他想法或像我一樣的經歷,請讓我知道! eMu

回答

0

如果設備關機並啓動,那麼你將不會得到報警器廣播接收器。 實現OnBootReceiver,它將接收OnBoot完成,並且您可以開始未觸發的未決警報。

+0

感謝您的快速回復。設備之間沒有關閉。它只是進入睡眠模式,但由於RTC_WAKEUP的原因,這不會影響報警管理器。 –

+0

是的,在這種情況下,RTC_WAKEUP應該已經傳達了意圖。 – Tarun

+0

因此,在越來越多的測試中,AlarmManager仍然無法工作,我不明白爲什麼。我讀了smth。關於WAKE_LOCK,並且在調用廣播接收器之後手機進入睡眠模式之前,可能不會再調用我的服務。這是原因嗎?我真的希望你能幫助我! 最好的問候eMu –

相關問題