2015-06-24 76 views
2

我的應用需要非常準確的重複鬧鐘時間。從API 19開始,AlarmManager setRepeating現在不精確以節省電量(保存樹木和所有樹木)。AlarmManager set的替代方法在API 19及更高版本中重複使用?

是否有任何解決方法來獲取API 19的setExact方法在循環上工作?

注意:從API 19開始,所有重複報警都是不精確的。如果您的應用程序需要精確的交付時間,那麼它必須使用一次性精確警報,如上所述每次重新安排時間。其targetSdkVersion早於API 19的傳統應用程序將繼續擁有其所有警報,包括重複警報,並將其視爲確切對待。

+0

你究竟想要做什麼?似乎他們對如何做事情給出了一個非常直接的解釋? – ianhanniballake

+0

我有一個任務在準確的時間運行。 Alarmmanager setRepeating用於爲此作業正常工作。現在自從API 19及以上版本以來,由於它們在運行之前將警報分組在一起,它可以運行得非常晚。 setExact會做這項工作,但我需要這個重複的版本。例如,我有一個每5分鐘運行一次任務的服務。 – zeroprobe

回答

4

是否有任何解決方法讓API 19的setExact方法在循環上工作?

當然。您的BroadcastReceiver或任何正在從警報中獲得控制權的人,請撥打setExact()安排下一次重複,除了執行其現有工作。

請記住,雖然the changes to background processing in Android M可能會給您帶來困難。

2

如果Google提供了setExactRepeating()方法,它可能會解決您的問題。 (這是一個笑話)

現在,你必須自己重新安排鬧鐘。

  1. 使用setExact()方法來調度的第一次報警,例如:

    alarmManager.setExact(AlarmManager.RTC_WAKEUP,triggerAtMillis,的PendingIntent);

  2. 重新安排你的廣播接收器的onReceiver()報警,重複時間是每天(AlarmManager.INTERVAL_DAY在下面的代碼):

    公共無效的onReceive(上下文語境,意圖意圖){

    Context danielContext = MonitorApp.getContext(); 
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
        Intent i = new Intent(context, ReceiverName.class);//put your own ReceiverName 
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, i, 0); 
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + AlarmManager.INTERVAL_DAY, pendingIntent); 
    

    }

當然,做一些在onReceiver()方法來實現你的目標。

相關問題