2

在我的应用程序中,我将时间(以毫秒为单位)传递给下面的此方法,但是当调用此方法时,我在清单中为此意图注册的 BroadCastReciever 会立即被调用,甚至在它开始的那一秒就关闭音频播放。(BroadcastReciever 的目的是停止音频播放,但在通过以下方法传递给警报管理器的选定时间...)

我尝试了类似的配置,包括 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);
}
4

1 回答 1

3

正如文档中所写:

triggerAtTime 闹钟应该响起的时间,使用适当的时钟(取决于闹钟类型)

因此,您应该提供实时警报。如果您想在一分钟后发出警报,请提供

System.currentTimeMillis() + 60*1000;
于 2012-11-19T08:27:13.637 回答