MediaPlayer Потоковое зависание приложения и сбой при медленных подключениях - PullRequest
0 голосов
/ 20 декабря 2018

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

В тот момент, когда вы нажимаете кнопку воспроизведения, приложение зависает и возобновляет работу только при запуске аудиопотока.При медленном соединении это может занять несколько секунд, зависание приложения.Без Интернета приложение через некоторое время вылетает.

public class SoundService extends Service {
    MediaPlayer mp;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    public void onCreate() {

        mp = new MediaPlayer();
        try {
            mp.setDataSource("stream_url");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 1");
            onDestroy();
        } catch (IllegalStateException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 2");
            onDestroy();
        } catch (IOException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 3");
            onDestroy();
        }

        try {
            mp.prepare();
            mp.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 4");
            onDestroy();
        } catch (IOException e) {
            e.printStackTrace();
            Log.v(TAG, "Error 5");
            onDestroy();
        }
    }

    public int onStartCommand(Intent intent, int flags, int startId) {
        mp.start();
        return Service.START_NOT_STICKY;
    }

    public void onDestroy() {
        mp.stop();
        mp.release();
        stopSelf();
        super.onDestroy();
   }
}

Вот так я запускаю поток (кнопка воспроизведения):

startService(new Intent(MainActivity.this, SoundService.class));

Без подключения приложение в итоге получает номер ошибки5, но это происходит только при сбоях, поэтому уже слишком поздно останавливать игрока.До этого я не получаю никаких "уловок".

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

Есть идеи?Спасибо!

1 Ответ

0 голосов
/ 17 августа 2019

используйте этот код, который может вам помочь

 mediaPlayer.prepareAsync();
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mediaPlayer.start();
                    }
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...