当app在android中的后台时继续播放流式音频

时间:2014-11-20 07:08:19

标签: android android-activity android-service android-mediaplayer

我正在构建一个应用程序,通过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);
    }
});
}

3 个答案:

答案 0 :(得分:1)

你需要研究Service。当应用程序最小化时,它们将允许您在后台执行操作。

当您的应用最小化时,您制作一个Intent,向您的Service描述要播放的内容和时间。然后,Service将构建MediaPlayer并继续流式传输。另外,一个好主意是拥有一个Notification,可以让用户在不打开应用的情况下结束此Service

另一个条件是用户在Service播放一段时间后最大化应用。在这种情况下,您需要一个持久性机制来跟踪。与SharedPreferencesSQLite一样。

文档: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组件来表示流数据都可以与您将实现的服务进行通信。

关于开始和停止流媒体,它将取决于您的应用程序设计。 我认为这种方法对所有预期的应用程序设计都是开放的。

如果您需要帮助,请告诉我。

相关问题