视频播放时无法关闭屏幕
Posted
技术标签:
【中文标题】视频播放时无法关闭屏幕【英文标题】:Cannot turn the screen off while video is playing 【发布时间】:2014-02-11 12:03:37 【问题描述】:我的活动中有一个 VideoView,仅用作背景,视频处于循环模式。
屏幕不会自动进入睡眠模式。我尝试手动计算自上次用户交互以来的秒数,但仍然无法强制关闭屏幕。
我尝试过 PowerManager、获取锁和 goToSleep() 函数,但我仍然无法关闭屏幕。
【问题讨论】:
【参考方案1】:我知道这是一个古老的问题,但我想我还是会写一个答案,因为这个页面出现在 Google 搜索中。
我用这段代码解决了同样的问题:
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
@Override
public void onPrepared(MediaPlayer mediaPlayer)
mediaPlayer.setScreenOnWhilePlaying(false);
);
【讨论】:
谢谢,所以是 VideoView 导致屏幕不关闭问题。VideoView
-> com.android.server.wm.Session.relayout()
-> com.android.server.wm.RootWindowContainer.handleNotObscuredLocked()
-> 在包含 VideoView 的窗口中添加 KEEP_SCREEN_ON
标志 -> system_server 获取 WakeLock
类型为 SCREEN_BRIGHT_WAKE_LOCK
【参考方案2】:
试试这个:
DevicePolicyManager mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
mDPM.lockNow();
这将锁定您的手机(与按下电源/锁定按钮相同)并因此转动屏幕。
【讨论】:
我得到“java.lang.SecurityException: No active admin'owned by uid 10087 for policy #3”。我必须事先设置一些管理员权限吗? 在此处阅读有关解决此问题的信息:developer.android.com/guide/topics/admin/device-admin.html【参考方案3】:我用这段代码解决了同样的问题:
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
@Override
public void onPrepared(MediaPlayer mediaPlayer)
mediaPlayer.setScreenOnWhilePlaying(true);
);
【讨论】:
mediaPlayer.setScreenOnWhilePlaying(true);【参考方案4】:我遇到了同样的问题。下面的代码解决了我的问题。希望对你有帮助。
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
@Override
public void onPrepared(MediaPlayer mediaPlayer)
mediaPlayer.setScreenOnWhilePlaying(false);
);
【讨论】:
【参考方案5】:已解决在onCreate()中的setContentView()后添加一行代码
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_flag);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
在片段中
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
【讨论】:
以上是关于视频播放时无法关闭屏幕的主要内容,如果未能解决你的问题,请参考以下文章