2014-05-16 52 views
-1

我正在嘗試製作一個應用程序,它必須以固定的時間間隔執行某個任務。經過大量研究和嘗試,我認爲最好使用AlarmManager類,因爲它在內存和電池使用方面的效率,而不是在服務中運行定時器。如何正確使用AlarmManager類以固定的時間間隔執行任務?

現在有一些方面,我有問題。
一個是我應該如何訪問之前運行中創建的報警對象,以便能夠取消它?

Intent intent = new Intent(getActivity(), MyService.class); 
PendignIntent pintent = PendingIntent.getService(getActivity(), 0, intent, 0); 
AlarmManager alarm = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 
          20000, AlarmManager.INTERVAL_FIFTEEN_MINUTES, pintent); 

有辦法知道是否設置了報警,但它不能給你報警本身。

boolean alarmUp = (PendingIntent.getService(getActivity(), 0, new Intent(getActivity(), MyService.class), PendingIntent.FLAG_NO_CREATE) != null); 
if(alarmUp){ 
    //How to cancel the alarm 
}else { 
    Toast.makeText(getActivity(), "Alarm not running", Toast.LENGTH_SHORT).show(); 
} 

回答

1

是遵守前面取消基於的PendingIntent報警喜歡這個 -

AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE); 

    Intent alarmintent1=new Intent(MainActivity.this, AlarmReceiver.class); 
    PendingIntent sender1=PendingIntent.getBroadcast(SpeedMotors.this, 100, alarmintent1, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA); 

    try { 
     am.cancel(sender1); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     System.out.println("ex....."+e); 
    } 

    Calendar cal=Calendar.getInstance(); 
    cal.add(Calendar.SECOND, 5); 


    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*10, sender1); 
    System.out.println("alarm set..........."); 

嘗試會幫助你。

1

報警管理器中的註冊和取消是基於待處理的意圖。如果使用相同的參數創建掛起的意圖,則可以訪問相同的警報。

相關問題