10

私は非常に時間に敏感な情報をユーザーに通知するアプリを書いています。多くのユーザーは、短い通知音ではなく、電話の着信音を使用したいと考えています。PreferenceScreen で設定してこの機能を有効にしましandroid:ringtoneType="all"たが、電話の着信音を選択すると、ユーザーが通知バーに触れるまで永遠に再生し続けることを除いて、うまく機能します...どうすれば 30 秒ほど後にオフにできますか? 、通知をキャンセルせずに?

C2DM受信機で使用しているコードは次のとおりです。

NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notif = new Notification(....)
....
String ringtone = PreferenceManager.getDefaultSharedPreferences(context).getString("ringtone", "");
notif.sound = Uri.parse(ringtone);
notif.audioStreamType = AudioManager.STREAM_NOTIFICATION;
nm.notify(1, notif);
4

3 に答える 3

12

これでうまくいくはずです。

....
mediaPlayer.start();
....
final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (mediaPlayer.isPlaying())
                mediaPlayer.stop();
        }
    }, timeout);
于 2012-07-21T17:36:37.987 に答える
7

Android では通知音の再生に干渉することはできませんが、再生中の着信音を完全に制御できる場合は、30 秒後に停止するか、好きなように操作できます。

ここでは、バックグラウンド サービスを使用して通知を実行していると想定しています。

事前のステップとして、音なしで通知を行う必要があります。デフォルトの単純なタスクバー通知です。次に、独自のMediaPlayerオブジェクトを使用して、着信音を 30 秒間再生します。

1) その場で通知を実行する場合: MediaPlayer オブジェクトを作成し、通知を開始した直後にユーザーが選択した着信音の再生を開始します。次に、Timer と TimerTask (使用方法についてはこちらの例を参照) またはScheduledThreadPoolExecutorで 30 秒カウントし、 MediaPlayer stop() を呼び出して 30 秒後に着信音を停止します。

2) 通知を後でスケジュールする場合: 通知を設定したらすぐに、AlarmManagerを作成してスケジュールし、通知と同時にトリガーされるようにします。パート 1 で説明したように、MediaPlayer オブジェクトを使用して着信音を 30 秒間再生する、作成した別のバックグラウンド サービスをアラームでトリガーできます。

どちらの場合も、通知は引き続き表示され、着信音の再生方法は通知とはまったく関係ありません。着信音を完全に制御できます。ユーザーがその時間まで通知をチェックしていない場合、スケジュールされた時間の後にさらに30秒間再生することもできます(通知は非常に時間に敏感な情報を配信すると言っているため、そうでなければ、着信音の再生でユーザーを悩ませませんしつこく)。

于 2012-07-21T01:44:40.070 に答える
1

簡単な回避策は、30 秒後に通知をキャンセルして、新しい通知を作成することです。

元の通知を複製して、新しい通知の着信音だけを削除することもできます。

于 2012-07-26T10:53:39.183 に答える