我正在构建一个无线电流应用程序。当我拥有良好的互联网连接时,即使在多任务处理时,一切都很好。问题是没有或没有互联网连接不佳的问题。
点击播放按钮时,应用程序冻结,并且仅在音频流启动时才能恢复。随着慢速连接,这可能需要几秒钟的时间,将应用程序悬挂。没有互联网,该应用最终在一段时间后崩溃。
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,但这仅在崩溃时才发生,因此为时已晚,请阻止玩家。在此之前,我没有任何"捕获"。
作为临时解决方法,我在开始流之前要检查Internet连接。这样,我可以防止崩溃,但是我仍然有悬挂在慢速连接上的应用程序的问题。
有什么想法吗?谢谢!
使用此代码可能会帮助您
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
});