0

受信者クラスによって受信されるアラームを設定しました。着信音を再生し、振動させて通知を表示し、通知をクリックするとそれを閉じる必要があります。

通知が表示された瞬間に振動しますが、着信音は永遠に再生され、通知をクリックするとコード全体が再度実行されるため、別の着信音が再生され始め、通知は閉じられません。

これについて正しい方法は何ですか?

これが私のコードです

public void onReceive(Context context, Intent intent) {

    String id = intent.getStringExtra("id");
    String type = intent.getStringExtra("type");
    String time = intent.getStringExtra("time");
    String date = intent.getStringExtra("date");

    if(type.equals("1")){
        msg = "Care UK appointment";
    }else{
        msg = "Exercise Reminder";
    }

    for(int i = 0; i < PP.parse2.size(); i++){

        if(PP.parse2.get(i).id.equals(id)){
            PP.parse2.remove(i);
            PP.saveReminder();
            break;
        }
    }

    nm = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    CharSequence from = msg;
    CharSequence message = time+" on "+date;
    PendingIntent contentIntent = PendingIntent.getBroadcast(context,
            Integer.parseInt(id), intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) context.getSystemService(Activity.ALARM_SERVICE);
    am.cancel(contentIntent);


    @SuppressWarnings("deprecation")
    Notification notif = new Notification(R.drawable.alarm_icon,
            msg, System.currentTimeMillis());
    notif.setLatestEventInfo(context, from, message, contentIntent);
    notif.flags |= Notification.FLAG_AUTO_CANCEL;
    nm.notify(1, notif);
    //nm.cancel(1);

    Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);     
    // Vibrate for 500 milliseconds
    v.vibrate(2000);
    playSound(this, getAlarmUri());

}   

private void playSound(Context context, Uri alert) {
    mMediaPlayer = new MediaPlayer();
    try {
        mMediaPlayer.setDataSource(context, alert);
        final AudioManager audioManager = (AudioManager) context
                .getSystemService(Context.AUDIO_SERVICE);
        if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
            mMediaPlayer.prepare();
            mMediaPlayer.start();

        mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {           
            @Override
            public void onCompletion(MediaPlayer mp) {
                mMediaPlayer.stop();
                mMediaPlayer.release();
        }
    }); 
        }
    } catch (IOException e) {
        System.out.println("OOPS");
    }
}

// Get an alarm sound. Try for an alarm. If none set, try notification,
// Otherwise, ringtone.
private Uri getAlarmUri() {
    Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    if (alert == null) {
        alert = RingtoneManager
                .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        if (alert == null) {
            alert = RingtoneManager
                    .getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        }
    }
    return alert;
}
4

2 に答える 2

0

受信者が複数回呼び出されているかどうかを確認します。また、通知を介してバイブレーションと音楽オプションを設定します。自分で設定する必要はありません。このサンプルを参照して ください http://smartandroidians.blogspot.com/2010/04/alarmmanager-and-notification-in.html

于 2013-07-12T09:07:38.613 に答える