我正在构建一个应用程序,通过wifi流式传输直播电台。我遇到的问题是如何在用户最小化应用程序时保持应用播放?
private void initializeMediaPlayer() {
player = new MediaPlayer();
try {
player.setDataSource("url");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
player.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
public void onBufferingUpdate(MediaPlayer mp, int percent) {
// playSeekBar.setSecondaryProgress(percent);
Log.i("Buffering", "" + percent);
}
});
}
答案 0 :(得分:1)
你需要研究Service
。当应用程序最小化时,它们将允许您在后台执行操作。
当您的应用最小化时,您制作一个Intent
,向您的Service
描述要播放的内容和时间。然后,Service
将构建MediaPlayer
并继续流式传输。另外,一个好主意是拥有一个Notification
,可以让用户在不打开应用的情况下结束此Service
。
另一个条件是用户在Service
播放一段时间后最大化应用。在这种情况下,您需要一个持久性机制来跟踪。与SharedPreferences
或SQLite
一样。
文档:http://developer.android.com/guide/components/services.html
答案 1 :(得分:0)
您必须将您的媒体播放器实现为服务,因为当最小化时,Activity将处于onstop状态。
public class MyMediaPlayerService extends Service implements MediaPlayer.OnPreparedListener,MediaPlayer.OnCompletionListener,AudioManager.OnAudioFocusChangeListener {
static MediaPlayer mPlayer = null;
public MyMediaPlayerService() {
}
public int onStartCommand(Intent intent, int flags, int startId) {
if (mPlayer != null && mPlayer.isPlaying()) {
mPlayer.stop();
mPlayer.release();
mPlayer = null;
mPlayer = new MediaPlayer();
}
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(intent.getStringExtra("streamurl"));
mPlayer.setLooping(true);
} catch (IOException e) {
e.printStackTrace();
}
mPlayer.setOnPreparedListener(this);
// Request audio focus for playback
mPlayer.prepareAsync();
mPlayer.setLooping(false);
mPlayer.setOnCompletionListener(this);
notification();
return START_NOT_STICKY;
}
答案 2 :(得分:0)
直播无线电流,无论用户界面如何,它都是长时间运行的过程,因此您需要在服务中实施完整的媒体播放器逻辑,您的服务将全部收取流量费用。根据ui而言,无论您使用什么UI组件来表示流数据都可以与您将实现的服务进行通信。
关于开始和停止流媒体,它将取决于您的应用程序设计。 我认为这种方法对所有预期的应用程序设计都是开放的。
如果您需要帮助,请告诉我。