Android媒体播放器在几分钟后停止播放

时间:2016-05-20 10:09:40

标签: android android-mediaplayer

我遇到一个问题,媒体播放器总是在几分钟后随机停止,大多数情况下,当手机睡眠并再次触摸时,视频会挂起并停止播放。

我在stackoverflow上尝试了很多解决方案,但都没有。我差点把我的头发拉出来!!!

我试过这个答案

Android MediaPlayer stops playing after some time

MediaPlayer randomly stops on Android 4.4 (19)

How to prevent mediaplayer to stop when screen goes off?

以及更多答案,它们都无效

这是我的代码

public class MainActivity {

    MediaPlayer mp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

        mp = MediaPlayer.create(this, R.raw.my_webm_video);
mp.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
        playVideo();

    }

    @Override
    public void onResume() {
        super.onResume();
        mp = MediaPlayer.create(this, R.raw.my_webm_video);
        mp.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
        playVideo();
    }

    public void playVideo(){

        SurfaceView sv = (SurfaceView) findViewById(R.id.surfaceView);
        SurfaceHolder holder = sv.getHolder();
        holder.addCallback(new SurfaceHolder.Callback(){
            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }

            @Override
            public void surfaceCreated(SurfaceHolder holder) {
               mp.setDisplay(holder);
               mp.start();
               mp.setLooping(true);
            }

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {

            }

        });
    }


}

这是我的XML布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

1 个答案:

答案 0 :(得分:0)

好的,所以我终于解决了这个问题。让任何其他人遇到这个问题

在onCreate中,我检查了视频是否已播放,以确保每次都不会调用该视频。

int firstPlayed = 0;

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mp = MediaPlayer.create(this, R.raw.my_webm_video);
        mp.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
        if(!mp.isPlaying()) {
            firstPlayed = 1;
            playVideo();
        }
}

我签入了onResume,用户导航退出活动并返回,这使视频屏幕变黑。

public void onResume() {
        super.onResume();
         if(!mp.isPlaying() && firstPlayed == 0) {
            mp = MediaPlayer.create(this, R.raw.my_webm_video);
            mp.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
            playVideo();
        }
        firstPlayed = 0;
}

然后我注意到我需要第一次检查才能确定。