gpt4 book ai didi

android - 如何点亮屏幕?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:45:06 25 4
gpt4 key购买 nike

重复警告:此问题同时存在于服务和前端,有一些类似的线程但专注于 GUI 方法。

问题

从任何状态开始(背景音乐播放、屏幕打开(原文如此!)、屏幕关闭、手机锁定、手机解锁等等)我只想改变状态中的一件事——打开屏幕上。其他都不会改变。

尝试

从某个已知状态开始,我锁定手机并关闭屏幕:

DevicePolicyManager dpm = (DevicePolicyManager)context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
dpm.lockNow();

所以从现在开始,打开屏幕就意味着实际显示键盘锁。我尝试这样做:

  • 强制 userActivity -- 什么都没有发生
  • 唤醒锁的各种组合——要么唤醒太弱(如 PARTIAL_WAKE_LOCK——没有任何反应),要么触发屏幕开启,但只要我保持锁定。一旦我释放它,屏幕就会回到关闭状态(尽管我设置了 ON_AFTER_RELEASE);小问题是我必须在 lockNow 之后延迟获得唤醒锁,否则 lockNow 将被简单地取消

解决方法

这几乎是 Changing the Screen Brightness System Setting AndroidAnton Cherkashyn 复制粘贴

您需要添加触发屏幕的虚假 Activity :

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 (在我的例子中它通常是非 Activity 的,因此背景选项):

new Handler().postDelayed(new Runnable() { 
public void run() {
Intent intent = new Intent(context, DummyBrightnessActivity.class);
intent.addFlags(Intent.FLAG_FROM_BACKGROUND | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} },500);

并且您必须在您的 list 中通知您的应用有关此虚假 Activity :

<activity android:name=".DummyBrightnessActivity"
android:excludeFromRecents="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:taskAffinity="com.antonc.phone_schedule.Dummy">
</activity>

(上图——它位于我的应用程序的主命名空间中)。

问题是它很长而且不可靠——第一个延迟(在 Activity 中)适用于 0 非常好,但是第二个......不同的故事,当我做一些日志记录时“350”就足够了,但是一旦我删除日志记录(因此执行速度更快)我不得不增加该值。

所以现在面对这样一个事实,你有“screenOn”功能,但它不起作用,因为有些用户会购买更快的手机;-)

无论如何,还在寻找更好的东西......

最佳答案

希望下面的示例对您有所帮助,不要忘记释放您的唤醒锁!

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 - 时间 when 这发生了 SystemClock.uptimeMillis(); pm.userActivity(何时, true/false)

关于android - 如何点亮屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12760573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com