android media player在几分钟后停止播放

android media player在几分钟后停止播放,android,android-mediaplayer,Android,Android Mediaplayer,我有一个问题,媒体播放器总是在几分钟后随机停止,大多数情况下,当手机睡觉时,你再次触摸它,视频挂起并停止播放 我在stackoverflow上尝试了很多解决方案,但都没有成功。我快把头发拔出来了 我试过这个答案 还有更多的答案,它们都不起作用 下面是我的代码 public class MainActivity { MediaPlayer mp; @Override public void onCreate(Bundle savedInstanceState) {

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

我在stackoverflow上尝试了很多解决方案,但都没有成功。我快把头发拔出来了

我试过这个答案

还有更多的答案,它们都不起作用

下面是我的代码

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>

好的,我终于解决了这个问题。万一有人碰到这个问题

在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();
        }
}
我在Resume上签了名,以防用户退出活动并返回,这会使视频屏幕变黑

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;
}

然后我注意到我需要一个firstPlayed检查来确定。

好的,所以我最终解决了这个问题。万一有人碰到这个问题

在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();
        }
}
我在Resume上签了名,以防用户退出活动并返回,这会使视频屏幕变黑

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;
}
然后我注意到我需要一张第一次使用的支票来确定