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

  • 相关阅读:
    spart快速大数据分析学习提纲(一)
    Zookeeper的设计模式之观察者模式(十)
    shuffle机制和TextInputFormat分片和读取分片数据(九)
    MapReduce程序开发之流量求和(八)
    分布式系统间通信之RPC简单Demo(七)
    使用JAVA客户端对HDFS进行代码编写(五)
    分布式系统间通信之RPC的基本概念(六)
    DataNode工作原理(四)
    NameNode元数据的管理机制(三)
    javaweb项目部署到服务器(树莓派)上全过程——部署步骤记录与总结
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4154056.html
Copyright © 2011-2022 走看看