【发布时间】:2014-02-11 12:03:37
【问题描述】:
我的活动中有一个 VideoView,仅用作背景,视频处于循环模式。
屏幕不会自动进入睡眠模式。我尝试手动计算自上次用户交互以来的秒数,但仍然无法强制关闭屏幕。
我尝试过 PowerManager、获取锁和 goToSleep() 函数,但我仍然无法关闭屏幕。
【问题讨论】:
标签: android screen android-videoview
我的活动中有一个 VideoView,仅用作背景,视频处于循环模式。
屏幕不会自动进入睡眠模式。我尝试手动计算自上次用户交互以来的秒数,但仍然无法强制关闭屏幕。
我尝试过 PowerManager、获取锁和 goToSleep() 函数,但我仍然无法关闭屏幕。
【问题讨论】:
标签: android screen android-videoview
我知道这是一个古老的问题,但我想我还是会写一个答案,因为这个页面出现在 Google 搜索中。
我用这段代码解决了同样的问题:
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setScreenOnWhilePlaying(false);
}
});
【讨论】:
VideoView -> com.android.server.wm.Session.relayout() -> com.android.server.wm.RootWindowContainer.handleNotObscuredLocked() -> 在包含 VideoView 的窗口中添加 KEEP_SCREEN_ON 标志 -> system_server 获取 WakeLock 类型为 SCREEN_BRIGHT_WAKE_LOCK
试试这个:
DevicePolicyManager mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
mDPM.lockNow();
这将锁定您的手机(与按下电源/锁定按钮相同)并因此转动屏幕。
【讨论】:
我用这段代码解决了同样的问题:
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setScreenOnWhilePlaying(true);
}
});
【讨论】:
我遇到了同样的问题。下面的代码解决了我的问题。希望对你有帮助。
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setScreenOnWhilePlaying(false);
}
});
【讨论】:
已解决在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);
【讨论】: