Android 如何打开屏幕?
重复警告:此问题适用于服务和前端,有一些类似的线程,但主要集中在GUI方法上 问题 从任何状态开始(背景音乐播放、屏幕打开(原文如此!)、屏幕关闭、手机锁定、手机解锁等等),我只想改变状态中的一件事——打开屏幕。其他一切都不应该改变 尝试 从某个已知状态开始,我锁定手机并关闭屏幕:Android 如何打开屏幕?,android,screen,Android,Screen,重复警告:此问题适用于服务和前端,有一些类似的线程,但主要集中在GUI方法上 问题 从任何状态开始(背景音乐播放、屏幕打开(原文如此!)、屏幕关闭、手机锁定、手机解锁等等),我只想改变状态中的一件事——打开屏幕。其他一切都不应该改变 尝试 从某个已知状态开始,我锁定手机并关闭屏幕: DevicePolicyManager dpm = (DevicePolicyManager)context .getSystemService(Context.DEVICE_POLI
DevicePolicyManager dpm = (DevicePolicyManager)context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
dpm.lockNow();
所以从现在开始,打开屏幕就意味着实际显示键盘保护。我尝试通过以下方式实现这一点:
- 强制
——什么也不发生userActivity
- 唤醒锁的各种组合——要么唤醒太弱(比如
——什么都没有发生),要么它触发屏幕打开,但只要我保持锁定。一旦我释放它,屏幕就会回到关闭状态(尽管我在释放后打开了部分唤醒锁定
);小问题是我必须在
之后延迟获取唤醒锁,否则lockNow
将被简单地取消lockNow
public class DummyBrightnessActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
//this next line is very important, you need to finish your activity with slight delay
new Handler().postDelayed(new Runnable() {
public void run() {
DummyBrightnessActivity.this.finish();
} },0);
}
}
接下来,您必须启动此活动(在我的情况下,它通常是非活动的,因此选择后台):
您必须在清单中通知您的应用程序此虚假活动:
<activity android:name=".DummyBrightnessActivity"
android:excludeFromRecents="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:taskAffinity="com.antonc.phone_schedule.Dummy">
</activity>
(上图——它位于我的应用程序的主名称空间中)
问题是它很长而且不可靠——第一个延迟(在活动中)对0非常有效,但第二个。。。不同的情况是,当我做一些日志记录时,“350”就足够了,但一旦我放弃了日志记录(因此执行速度稍快),我就必须增加值
所以现在面对这样一个事实:你有“screenOn”功能,但它不起作用,因为有些用户会购买速度更快的手机;-)
无论如何,仍然在寻找更好的东西…希望下面的示例能够帮助您,不要忘记释放您的wakelock
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "wakelock_event_name");
wl.acquire();
// Your Code
wl.release()
你也可以使用
//when-timewhen这发生在SystemClock.uptimeMillis()上;
pm.userActivity(when,true/false)您是否尝试过类似本文中的答案@ziziana,正如我在开始时所写的,我尝试了唤醒锁的组合——它们不能作为“切换屏幕”工作。它们要么被忽略,要么使屏幕保持“打开”状态。
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "wakelock_event_name");
wl.acquire();
// Your Code
wl.release()