2012-11-16 21 views
2

在我的應用程序中,我在下面的這個方法中傳遞了一個milleseconds的時間,但是當調用這個方法時,我在清單中爲這個意圖註冊的BroadCastReciever被立即調用,關閉音頻播放,甚至在第二個開始時關閉。 (BroadcastReciever的目的是停止音頻播放,但在選定的時間通過以下方法傳遞給警報管理器...)爲什麼使用AlarmManager爲PendingIntent設置時,請求的組件立即被調用?

我試過了類似的配置,包括getService,但是即使這個組件被立即調用當爲該組件設置一個警報管理器時。

我偶爾會得到帶有空指針異常的ANR,因爲停止播放的BroadcastReciever會嘗試停止尚未初始化的MediaPlayer對象,因爲在設置時會立即調用暫停播放的暫停內容。

private void makeAlarm(long timeInFuture){ 
     Intent INTENT = new Intent("myapp.stopplayback"); 
     AlarmManager alarmManager=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 

     PendingIntent pi = PendingIntent.getBroadcast(this, 0, INTENT, 0); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, timeInFuture, pi); 
} 
+0

請將'timeInFuture'的實際值添加到問題中。 –

+0

@guydudebro:你可以在makeAlarm()中記錄timeInFuture的值併發布它 – Ashwin

+0

取決於選擇的時間,它會有所不同,但是對於1分鐘的選擇60000將顯示在makeAlarm()的logcat中。 –

回答

3

寫在docs

triggerAtTime時間報警應熄滅,使用適當的 時鐘(取決於報警類型)

所以,你應該提供報警實時。如果您想在一分鐘後報警,請提供

System.currentTimeMillis() + 60*1000; 
相關問題