如何打开屏幕?

时间:2012-10-06 14:16:24

标签: android screen

DUPLICATE警告:这个问题适用于服务和前端,有一些类似的线程,但专注于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 Android Anton Cherkashyn 复制和粘贴

您需要添加触发屏幕的假活动:

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);
    }

}

接下来你必须启动这个活动(在我的情况下,它通常是非活动的,因此选择背景):

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

您必须在清单中通知您的应用有关此虚假活动的信息:

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

(上面 - 它放在我的应用程序的主命名空间中)。

问题在于它是冗长且不可靠的 - 第一次延迟(在活动中)适用于0非常好,但第二次......不同的故事,当我做了一些记录&#34; 350&#34;已经足够了,但是一旦我放弃了日志记录(因此执行速度更快),我不得不增加价值。

所以现在面对你有&#34; screenOn&#34;功能,但它不会工作,因为一些用户会购买更快的手机; - )

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

1 个答案:

答案 0 :(得分:0)

希望吼声样本帮助你,别忘了释放你的唤醒锁!

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