2

我有一個android setInexactRepeating置於我的onCreate中,永遠不會觸發。我在裏面有一個日誌,以確保它實際上正在執行,這似乎並沒有觸發,以及我爲它計劃的事件。我希望它每隔10秒就會關閉一次,但即使是第一次,它也不會消失。Android的SetInexactRepeating根本沒有發射

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Log.d("Restart", "First"); 
    Intent toRun = new Intent(this, AlarmRestart.class); 
    PendingIntent pendingToRun = PendingIntent.getBroadcast(this, 0, toRun, 0); 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    am.cancel(pendingToRun); 
    am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis(), 10000L, pendingToRun); 

    Log.d("Restart", "Second"); 
} 

這是在其他文件:

public class AlarmRestart extends BroadcastReceiver { 
    public void onReceive(Context context, Intent intent) { 
     Log.d("Restart", "Third"); 
    } 
} 

這就是 「亞行外殼dumpsys報警說:」

com.packageName.restart 
5715ms running, 64 wakeups 
3 alarms: flg=0x14 cmp=com.packageName.restart/.AlarmRestart 
61 alarms: flg=0x14 cmp=com.packageName.restart/.reciever.AlarmRestart 
+0

能'alarm.cancel()'是問題的一部分? – eternalmatt 2012-07-30 19:24:06

+0

感謝您的建議!這應該只是取消以前的setInexactRepeating,我沒有它嘗試過,仍然有相同的效果。 – Lethjakman 2012-07-30 19:26:53

回答

4

我發現這個問題:/

 <reciever android:name="com.appName.restart.AlarmRestart" android:enabled="true" /> 

它的拼寫接收機....不reciever。嚴重的是,XML需要一個錯誤檢查器。我仍然將CommonWares的答案標記爲已接受的答案,因爲他解決了我稍後會遇到的其他幾個問題。

+0

是的,我啞巴的同事做了同樣的事情,我們看了一個小時。 – lostintranslation 2014-04-23 20:50:56

8

AlarmRestartBroadcastReceiver。這不是Service。但是,您正在嘗試使用getService()PendingIntent。這是行不通的。將getService()改爲getBroadcast(),你應該有更好的運氣。

+0

這是我絕對沒有意識到有一個區別。謝謝。我正在修改我的代碼以反映您的建議,但它仍然跳過廣播接收器而沒有錯誤消息。 – Lethjakman 2012-07-30 20:20:50

+2

@Lethjakman:首先,你可以切換到'setRepeating()',因爲你不能做任意時間間隔的不精確重複,只能在'setInexactRepeating()'的文檔中列出。其次,你可能想要安排第一次出現在未來。除此之外,使用命令行中的'adb shell dumpsys alarm'來獲取所有已註冊的'AlarmManager'警報的日誌,並查看您的應用程序有哪些內容。 – CommonsWare 2012-07-30 20:25:35

+0

我正在尋找一個這樣的命令!我開始認爲它不存在!雖然它更吸引人,但它說我的應用程序已經喚醒了335次......這絕對是一個巨大的幫助。非常感謝。 – Lethjakman 2012-07-30 20:38:20

1

您可以在ELAPSED_REALTIME_WAKEUP報警使用SystemClock.elapsedRealtime(),而不是System.currentTimeMillis的()