相关疑难解决方法(0)

Android:如何以编程方式打开和关闭屏幕?

在将此帖标记为"重复"之前,我正在撰写此帖子,因为没有其他帖子能够解决问题.

我试图关闭设备,然后在几分钟或传感器更换后,将其重新打开.

关闭显示测试

我可以使用以下方式关闭屏幕:

params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
Run Code Online (Sandbox Code Playgroud)

我无法使用wl.release()方法关闭屏幕.

打开显示测试

我的第一个猜测,如下,不起作用.什么都没发生,屏幕仍然关闭.

params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = -1f;
getWindow().setAttributes(params);
Run Code Online (Sandbox Code Playgroud)

然后我也尝试使用唤醒锁,但没有成功.

PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "tag");
wl.acquire();
Run Code Online (Sandbox Code Playgroud)

最后我尝试了以下内容,没有结果.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

总而言之,我不会在控制台中遇到任何这些方法的任何错误.当我使用电源按钮打开设备时,我的测试文本"屏幕应该打开",在屏幕上.这表明代码应该已经运行.如果你已经测试了代码,请回答,似乎很多功能,例如params.screenBrightness = -1,根据sdk不能正常工作.

android

93
推荐指数
8
解决办法
17万
查看次数

锁定屏幕上的服务启动活动会打开屏幕,但不会显示活动本身

我正在尝试从已经获得锁定的服务开始活动,如下所示:

Intent i = new Intent(context, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

活动清单声明如下:

<activity
        android:name=".MyActivity"
        android:configChanges="orientation|screenSize|keyboardHidden|keyboard|navigation"
        android:excludeFromRecents="true"
        android:launchMode="singleInstance"
        android:screenOrientation="nosensor"
        android:showOnLockScreen="true"
        android:taskAffinity=""
        android:theme="@style/MyTheme" />
Run Code Online (Sandbox Code Playgroud)

最后,on onCreate()或on onAttachedToWindow()(我试过两个),我添加以下标志:

final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

问题是我第一次startActivity()从我的服务中调用时,屏幕会亮起,但活动本身并没有显示出来.它显示锁定屏幕.每次后续调用startActivity()工作正常,但我找不到这种奇怪行为的原因.

我已经尝试过建议获取完整的唤醒锁而不是部分,根据以下SO答案更改清单中的标志和值:

请注意,我的主题不是对话框,而是全屏活动.

还有其他想法吗?

android android-activity

12
推荐指数
1
解决办法
1万
查看次数

标签 统计

android ×2

android-activity ×1