Так что я использую URL-адрес для потоковой передачи звука с использованием mediaPlayer - я могу запустить поток без проблем - и остановить его также ... пока я не переключаюсь виды деятельности.Android dev mediaPlayer потоковая передача не прекратится после переключения активности
Проблема возникает, когда я запускаю поток ... затем переключаю действия ... затем возвращаюсь и пытаюсь остановить его. Я получаю сбой, потому что я думаю, что переменная уже равна нулю, даже несмотря на то, что MediaPlayer все еще работает.
Я объявляю свой медиаплеер публичным в основном потоке, поэтому не уверен, почему его считают нулевым после переключения действий.
Вот мой код для запуска потока, и его закрытия:
if(v.getId()==R.id.btnStart){
Context context = getApplicationContext();
AppPrefs appPrefs = new AppPrefs(context);
if(listening==false){
appPrefs.set_stream("1");
txtListen.setVisibility(View.VISIBLE);
listening=true;
btnStart.setText("Stop Stream");
String url = "http://streamingurl";
mediaPlayer = new MediaPlayer();
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(url);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // might take long! (for buffering, etc)
mediaPlayer.start();
}
else{
appPrefs.set_stream("0");
listening=false;
if(
mediaPlayer!=null){mediaPlayer.release();
mediaPlayer = null;
}
btnStart.setText("Start Stream");
txtListen.setVisibility(View.INVISIBLE);
}
}