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