• android 屏幕常亮代码


    屏幕保持常亮,有以下两种方法。

     

    方法一 :


    直接在onCreate()里,不用权限

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


    方法二 :


    1

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

     

    2

    private PowerManager powerManager =null;

    private WakeLock wakeLock = null;

     

    powerManager = (PowerManager)this.getSystemService(Service.POWER_SERVICE);

    wakeLock =this.powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,"My Lock");

    //是否需计算锁的数量

    wakeLock.setReferenceCounted(false);

     

    //请求常亮,onResume()

    wakeLock.acquire();

     

    //取消屏幕常亮,onPause()

    wakeLock.release();



    ===========================

    Android应用开发中,不少的应用需要和屏幕打交道,例如闹钟响铃的时候要保持屏幕处于亮屏状态,而在提醒过后又需要将屏幕熄灭。那么,在Android中是怎样来控制亮屏和熄屏的呢?下面就揭开神秘的面纱。

    一、PowerManager和PowerManager.WakeLock

    从标题中就可以大概看出这两者的关系,它们的静态结构如下:

    下面分别说一下它们的作用:

    1、PowerManager

    PowerManager是一个系统服务类,它是用来控制设备的电源的状态,例如,goToSleep就可以使设备进入睡眠状态,setBacklightBrightness可以用来控制背光的亮度。

    PowerManager作为一个系统的服务,在整个系统中只有一个实例,所以可以使用Context.getSystemService()来获取:

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

    分析到这里,可以更进一步的看出两者之间的关系,PowerManager是系统级别的管理者,每一个Application需要使用WakeLock都需要通过它来分配。

    pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);

    上面的代码就是用来创建一个WakeLock的方法,其中,PowerManager.PARTIIAL_WAKE_LOCK是一个标志位,标志位是用来控制获取的WakeLock对象的类型,主要涉及到CPU、屏幕和键盘灯,下面说一下标志位的意义。

    表一

    各种锁的类型对CPU 、屏幕、键盘的影响:

    PARTIAL_WAKE_LOCK:       保持CPU 运转,屏幕和键盘灯可以关闭。

    SCREEN_DIM_WAKE_LOCK:   保持CPU 运转,保持屏幕显示,但可以变暗,允许键盘灯关闭。

    SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许键盘灯关闭。

    FULL_WAKE_LOCK:         保持CPU 运转,保持屏幕和键盘灯都高亮显示。

    ACQUIRE_CAUSES_WAKEUP:  当获取锁后,立刻亮屏,典型地使用在通知中,以让用户立刻查看。

    ON_AFTER_RELEASE:       在释放锁(release())后,手机屏幕仍会继续亮一会儿。


    2、PowerManager.WakeLock

    该类可以用来控制设备的工作状态。使用该类中的acquire可以用来使设备一直处于工作的状态,当然如果你不需要使用该设备了,就调用release来关闭。注意:在使用该类的时候,必须保证acquire和release是成对出现的

    根据acquire的实现,可以知道有两种方式可以确保acquire和release成对出现:

    (1)、自动release

     public void acquire(long timeout) {
        synchronized (mToken) {
            acquireLocked();
            mHandler.postDelayed(mReleaser, timeout);
        }
     }

    调用该方法,就可以实现在timeout之后会自动调用release。

    (2)、手动release

    public void acquire() {
        synchronized (mToken) {
            acquireLocked();
        }
    }

    该函数不会自动release,就需要用户手动调用,所以使用的方式如下:

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
    wl.acquire();
     


    ..screen will stay on during this section..


    if (wl != null) {
         wl.release();

         wl = null;
     }


    系统不睡眠时通过命令行查看Wake Lock的命令为:

    adb shell dumpsys power;

    打印出来的即是当前锁状态信息。

    也可以adb shell进去,cd /sys/power/,

    cat wake_lock;如cat wake_lock后打印出结果为powerservice,即存在一个powerservice wakelock,

    手动清除当前wakelock用echo wakelockname > wake_unlock,即将存在的wakelock写进wake_unlock,如echo powerservice > wake_unlock



    ========================







  • 相关阅读:
    Warning: (1260, 'Row xxx was cut by GROUP_CONCAT()')
    MySQL之text字段
    将 Python 程序打包成 .exe 文件
    mysql json数据类型
    iOS边练边学--iOS中的json数据解析
    iOS边练边学--NSURLConnection发送HTTP请求以及NSString和NSData的相互转换
    iOS边练边学--Http网络再学习,简单介绍
    iOS边练边学--多线程练习的多图片下载 以及 使用第三方框架(SDWebImage)的多图片下载
    iOS边练边学--iOS中的(ARC下)单粒模式(GCD实现)
    iOS边练边学--cocoaPods管理第三方框架--命令行方式实现
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744515.html
Copyright © 2020-2023  润新知