Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何打开屏幕?_Android_Screen - Fatal编程技术网

Android 如何打开屏幕?

Android 如何打开屏幕?,android,screen,Android,Screen,重复警告:此问题适用于服务和前端,有一些类似的线程,但主要集中在GUI方法上 问题 从任何状态开始(背景音乐播放、屏幕打开(原文如此!)、屏幕关闭、手机锁定、手机解锁等等),我只想改变状态中的一件事——打开屏幕。其他一切都不应该改变 尝试 从某个已知状态开始,我锁定手机并关闭屏幕: DevicePolicyManager dpm = (DevicePolicyManager)context .getSystemService(Context.DEVICE_POLI

重复警告:此问题适用于服务和前端,有一些类似的线程,但主要集中在GUI方法上

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

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

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()