zoukankan      html  css  js  c++  java
  • Android让手机主动亮屏的代码

    我们在做电子阅读器的时候可能会要求屏幕保持常亮,不希望它熄灭。它的原理也是利用系统服务,来操纵底层设备。

    一、系统服务——PowerManager

    PowerManager.java就是管理我们电源方面的功能的,当然也包括我们屏幕的亮和熄灭。

     PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

    PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);// init powerManager

    因为PowerManager是系统服务,所以它的生命周期不是应用程序所能控制的;应用程序只能通过系统,向系统请求获取PowerManager服务,然后系统把这个服务的应用给我们用。

    二、PowerManager.WakeLock

    这个内部类可以真正实现控制屏幕

    类型 cpu 屏幕 键盘
    PARTIAL_WAKE_LOCK on off off
    SCREEN_DIM_WAKE_LOCK on dim off
    SCREEN_BRIGHT_WAKE_LOCK on Bright off
    FULL_WAKE_LOCK on Bright Bright

    由于它定义了这么多类型,每种类型可以指定相对应的部件工作和不工作。那么我们就可以利用这些类型,从最细粒度来控制我们的屏幕,控制我们的电源,从而让我们的电源工作时间尽可能的延长。

     

    三、实际运用

    1. 首先加入权限

    <uses-permissionandroid:name="android.permission.WAKE_LOCK" />

     

    2. 进行初始化

        private PowerManager.WakeLock mWakelock;
    PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);// init powerManager
            mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP|
                    PowerManager.SCREEN_DIM_WAKE_LOCK,"target"); // this target for tell OS which app control screen

     

    3. 强制亮屏

    mWakelock.acquire(); // Wake up Screen and keep screen lighting

     

    4. 取消强制亮屏,释放控制

    mWakelock.release(); // release control.stop to keep screen lighting

    PS:这里需要注意的是acquire和release必须成对使用

    5. 有一种情况是类似于来电显示,我们不仅需要让屏幕点亮,而且还想要取消锁屏界面,该怎么做呢?

    在AndroidManifest.xml中加上permission 权限:

    <uses-permissionandroid:name="android.permission.DISABLE_KEYGUARD" />
        // 键盘锁管理器对象
            KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
            // 这里参数”kale”作为调试时LogCat中的Tag
            KeyguardLock kl = km.newKeyguardLock("kale");
            if (km.inKeyguardRestrictedInputMode()) {  
                 // 解锁键盘  
                 kl.disableKeyguard(); 
             }  

    6. 在新版本中上面的代码变得不推荐了,系统给在activity显示时保持常亮提供了一个新的方法,使用方法也相当简单,下面这句只需要加在activity中即可。

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

     

    参考自:

    http://blog.csdn.net/pku_android/article/details/7596968

    http://bbs.51cto.com/thread-1018050-1.html

  • 相关阅读:
    我爱Java系列之---【SpringBoot打成war包部署】
    279. Perfect Squares
    矩阵dfs--走回路
    112. Path Sum
    542. 01 Matrix
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    Invert Binary Tree
    563 Binary Tree Tilt
    145 Binary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4154056.html
Copyright © 2011-2022 走看看