2013-07-19 2 views
0

Я хочу создать функцию restart() в классе Android Service, использующем MediaPlayer. Он перезапустит MediaPlayer и попытается снова подключиться к тому же URL-адресу, если произойдут некоторые ошибки, особенно IO Exception.Перезапуск MediaPlayer в Android на исключение IO

Какой оптимальный способ попробовать несколько попыток подключения? Существует возможность сделать задержку между вызовами. Это можно сделать в функции перезапуска с помощью Thread.sleep, но, возможно, это не хорошо, из-за того, что вы повесили службу. Во время перезагрузки пользователь может захотеть вызвать другой URL-адрес станции, поэтому перезапуск должен быть отменен таким образом.

Вот пример потенциальной функции ...

public void restart() 
{ 
    try 
    { 
     this.playlist="ERROR";  
     for (int u=1; u<5; u++) 
     { 
      if (on==false) 
      { 
       Thread.sleep(15000); // maybe bad 
       mplayer.reset(); // 
       String currenturl2=currenturl; 
       currenturl=""; 
       playSong(getApplicationContext(),currenturl2); // starting play 
       playlist="RESTARTING...("+String.valueOf(u)+")"; 
      // we must block retries somehow when we catch playing again 
      }; 
     }; 

    } 
    catch (Exception e) 
    { 
     playlist="RESTART ERROR"; 
     Log.e(TAG2,"a"+e.toString()); 
    } 
} 

Это можно не делать цикл FOR в перезапуске, и вызвать новый перезапуск в исключение ... Может быть, кто-то имеет некоторые готовый код/алгоритм для просмотра.

ответ

0

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

Вместо использования Thread.sleep(), что будет задержка между каждой повторной попыткой, вы можете захотеть использовать Handler и postDelayed(Runnable, time) метод для каждого повтора, в результате которых Избавление от цикла и рекурсивных вызовов.

Если вы достаточно терпеливы, я могу попытаться кратко написать рекурсивную версию этого метода.

+0

Спасибо. У меня есть метод onError, но я еще не смог подражать его работе. Первое исключение не срабатывает при ошибке (при отключении сети, но в других случаях можно запускать onError). Но во всех случаях я могу перенаправить функцию restart(). Возможно, новый поток не требуется. Насколько я понимаю, в случае исключения может быть несколько вызовов restart(). Несмотря на это, только один перезапуск должен быть запущен в одно мгновение, и не должно быть случая запуска потока несколько раз. Мне нужна стабильная версия ASAP, но лучше использовать простую стабильную версию. – Tramway11

Смежные вопросы