在旋转时保存MediaPlayer的状态

时间:2016-08-03 20:52:13

标签: android android-mediaplayer

我正在开发一款包含收音机的应用程序,播放,停止和暂停按钮一切正常。我的问题是,无论何时播放一首歌,我按下后退按钮并重新打开应用程序按钮都不能使用当前的流媒体广播

当我改变方向时,也会发生这种情况。有没有办法可以保存媒体播放器的状态,然后获取状态,以便我可以停止正在播放的歌曲?

public class radioActivity extends AppCompatActivity {
Button b1;
private Button Button1;
private Button Button2;
private String STREAM_URL = "http://192.99.35.93:6370/;stream.mp3";
private MediaPlayer mPlayer;
@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_radio);
    Button button1 = (Button) findViewById(R.id.buttonpredica1);
    Button button2 = (Button) findViewById(R.id.buttonpredica2);


    mPlayer = new MediaPlayer();

    mPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
    WifiManager.WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE))
            .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");

    wifiLock.acquire();
    wifiLock.release();

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            try {
                mPlayer.reset();
                mPlayer.setDataSource(STREAM_URL);
                mPlayer.prepareAsync();
                mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mPlayer) {

                        mPlayer.start();

                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

2 个答案:

答案 0 :(得分:1)

这种情况发生的原因是,每当您按下或旋转设备时,您的活动就会被破坏并且随之而来。如果您希望您的应用在这种情况下继续播放(这对于广播应用来说非常有意义),您需要在服务中实现媒体播放逻辑:

https://developer.android.com/guide/components/services.html

关于你需要在后台处理媒体播放,有一个关于这个主题的非常完整的官方文档页面:

https://developer.android.com/guide/topics/media/mediaplayer.html

答案 1 :(得分:-1)

创建一个与GUI无关的新对象或类来处理无线电。

在GUI的构造函数中添加一个参数MediaPlayer,然后将相应的字段设置为Media Player。

调整按钮的代码以与Media Player Field进行交互。 这将允许您打开/关闭与同一MediaPlayer交互的各种窗口。

public radioactivity(MediaPlayer mPlayer) {
   this.mPlayer = mPlayer;
}