Вопрос по android, media-player – Android MediaPlayer навсегда зацикливается на ICS

7

Я хочу воспроизвести звук уведомления, и моя проблема в том, что звук зацикливается вечно, когда он должен звучать только один раз.

Я пробовал два способа:

notification.sound = Uri.parse("content://media/internal/audio/media/38");

а также

mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
mMediaPlayer.setDataSource(this, Uri.parse("content://media/internal/audio/media/38"));
mMediaPlayer.setLooping(false);
mMediaPlayer.prepare();
mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        Log.v(Utils.TAG, "onprepared");
        mp.start();
    }
});

mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        Log.v(Utils.TAG, "end, we should release");
        mp.stop();
        mp.release();
    }
});

Во втором случае я никогда не вижу следа "конец, мы должны выпустить", звук воспроизводится снова и снова и снова.

Любая идея?

большое спасибо

UPDATE:

Я пробовал два устройства и:

It loops forever on a Galaxy Nexus with ICS 4.0.4 It works fine on a HTC Hero 2.2.1
на каком устройстве вы тестируете? FoamyGuy
Зегнус, ты когда-нибудь решал проблему? Я подтверждаю, что вижу ту же проблему на моем Galaxy Nexus. Denis Masyukov
Привет, Тим, я обновил свой вопрос. Кажется, что это не работает нормально на ICS zegnus

Ваш Ответ

2   ответа
5

try {
    mp.setDataSource(uri.toString());
    mp.setAudioStreamType(AudioManager.STREAM_ALARM);
    mp.prepare();
    mp.start();
    mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
        public void onSeekComplete(MediaPlayer mp) {
            mp.stop();
            mp.release();
        }
    });
} catch (Exception e) {
    e.printStackTrace();
}
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededsetOnSeekCompleteListenerError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
6

которые будут играть вечно. Это отличается от установки MediaPlayer на цикл. Если вы начнете воспроизводить звук со встроенным циклом, он никогда не закончится. В основном это мелодии звонка (в отличие от сигналов будильника или уведомлений). Вы можете настроить RingtoneManager на возврат только сигналов уведомлений или сигналов будильника с помощьюmyringtonemanager.setType(RingtoneManager.TYPE_ALARM|RingtoneManager.TYPE_NOTIFICATION) что исключит большинство зацикленных звуков, но, к сожалению, это не гарантирует исключить их всех на любом устройстве.:-(

Следовательно, решение Tiago Almeida является хорошим обходным путем (и я проголосовал за него), хотя оно также усекает все звуки, которые имеют всего несколько (и не имеют бесконечных) петель.

Error: User Rate Limit ExceededsetOnSeekCompleteListenerError: User Rate Limit Exceeded

Похожие вопросы