【问题标题】:android media player stops playing after some minutesandroid 媒体播放器在几分钟后停止播放
【发布时间】:2016-09-17 13:19:09
【问题描述】:

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

我在 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>

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-12
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      相关资源
      最近更新 更多