Как остановить потоковое mp3-файл - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть приложение, которое использует mp3-файлы. В первой версии файлы были включены в apk-файл. Сейчас я работаю над версией, в которой есть mp3-файлы в URL-ресурсе. Я изменил код и почти все работает нормально. Проблема в том, что кнопки для остановки, паузы и воспроизведения теперь не работают. Вот код, который запускает потоковую передачу (работает нормально):

private void playAudio(String media) {
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    try {
        mediaPlayer.setDataSource(media);
        mediaPlayer.prepare(); // might take long! (for buffering, etc)
        mediaPlayer.start();

    } catch (Exception e) {
        Log.e(TAG, "error: " + e.getMessage(), e);
    }
    mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
        public void onCompletion(MediaPlayer arg0) {
            finish();
        }
    });

}

И это те функции, которые я использую для остановки и т. Д. Хорошо работал с локальным файлом (raw-resources), но теперь он не работает:

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        Intent intent = new Intent(SpelaSaga.this, VisaIngressSaga.class);
        Bundle bundle = new Bundle();
        bundle.putString("Titel", titel);
        bundle.putInt("Position", position);
        intent.putExtras(bundle);
        SpelaSaga.this.startActivity(intent);
        finish();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

private OnClickListener button_1Listener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        mediaPlayer.stop();
        Intent intent = new Intent(SpelaSaga.this, VisaIngressSaga.class);
        Bundle bundle = new Bundle();
        bundle.putString("Titel", titel);
        bundle.putInt("Position", position);
        intent.putExtras(bundle);
        SpelaSaga.this.startActivity(intent);
        finish();

    }
};

private OnClickListener button_2Listener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        mediaPlayer.pause();

    }
};

Я осмотрелся и нашел только старые версии потоковых обучающих программ, которые требуют гораздо большего кодирования. Надеюсь, у кого-то есть хорошее представление о том, как управлять потоковой передачей.

1 Ответ

0 голосов
/ 02 декабря 2011

Я создал очень похожее приложение, мой код выглядит так:

public void startSound(final String URL) {
    bt.setText("STOP");
    new Thread() {
        public void run() {
            try {
                Uri uri = Uri.parse(URL);

                mp = MediaPlayer.create(PlaySound.this, uri);
                mp.start();
                mp.setOnCompletionListener(new OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer arg0) {
                        bt.setEnabled(true);
                        bt.setText("SŁUCHAJ");
                    }
                });
            } catch (Exception e) {

            }
            myProgressDialog.dismiss();
        }
    }.start();
}

, когда я нажимаю кнопку возврата:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        try {
            mp.stop();
        } catch (Exception e) {

        }
    }
    return super.onKeyDown(keyCode, event);
}

Я надеюсь, что этот ответ поможет Вам;)

...