2

私のアプリケーションでは、以下のこのメソッドにミリ秒単位で時間を渡しますが、このメソッドが呼び出されると、マニフェストでこのインテントに登録したBroadCastRecieverがすぐに呼び出され、開始した瞬間にオーディオ再生が停止されます。(BroadcastRecieverの目的はオーディオの再生を停止することですが、選択した時間に、以下の方法でアラームマネージャーに渡されます...)

getServiceを含む同様の構成を試しましたが、そのコンポーネントにalarmanagerを設定すると、そのコンポーネントでさえすぐに呼び出されます。

再生を停止するBroadcastRecieverは、まだ初期化されていないMediaPlayerオブジェクトを停止しようとするため、nullpointer例外でANRが発生することがあります。これは、再生を停止するpendingintentが設定時にすぐに呼び出されるためです。

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適切な時計を使用して、アラームが鳴る時間(アラームの種類によって異なります)

したがって、アラームのリアルタイムを提供する必要があります。1分後にアラームが必要な場合は、

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