我正在构建一个广播流应用程序。当我拥有良好的互联网连接时,即使进行多任务处理,一切也都很好。问题出在没有互联网连接或互联网连接不畅。
当您点击播放按钮时,该应用程序会冻结,并且仅在音频流开始时恢复运行。如果连接速度较慢,则挂起应用程序可能需要几秒钟。如果没有互联网,该应用最终会在一段时间后崩溃。
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,但这仅在崩溃时发生,因此停止播放器为时已晚。在此之前,我没有任何收获。
作为临时的解决方法,我在开始流之前先检查互联网连接。这样,我可以防止崩溃,但是我的应用仍然挂在慢速连接上仍然有问题。
有什么想法吗?谢谢!
答案 0 :(得分:0)
使用此代码可能会对您有所帮助
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
});