Android中各种Manager类的使用(三):PowerManager和DevicePolicyManager的使用

在最近的开发中,需要用到息屏和亮屏的操作,应用距离传感器感应到有人靠近时息屏防止误触,人离开时亮屏。这时候需要用到PowerManager和DevicePolicyManager类。使用PowerManager类进行屏幕在息屏状态下的唤醒,使用DevicePolicyManager类进行强制息屏。和各种Manager类相似,两个类获取实例的方式相同,通过以下方法就可以获取:

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
DevicePolicyManager dm = (DevicePolicyManager)getSystem(Context.DEVICE_POLICY_SERVICE);

DevicePolicyManager类是在android.app.admin目录下

PowerManager类是在android.os目录下


息屏操作:

使用DevicePolicyManager类进行息屏操作是调用DevicePolicyManager.lockNow()方法,调用该方法很重要的一个前提是要创建一个类继承DeviceAdminReceiver,该类可以不做任何操作,但是必须要有,这个类继承了一个广播接收类,所以需要在AndroidManifest文件里面定义,具体如下:

<receiver  
            android:name="xxx(类的名)"  
            android:label="@string/xxx"  
            android:permission="android.permission.BIND_DEVICE_ADMIN" >  
            <meta-data  
                android:name="android.app.device_admin"  
android:resource="@xml/device_admin" <!-- device_admin名称随意,name属性固定 -->/>
<intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver>

此时在xml文件夹下的xml文件配置如下:

<?xml version="1.0" encoding="utf-8"?>  
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">  
<!-- 指定设备超级管理员的权限,以下任选,可多选 -->  
  <uses-policies>  
    <disable-camera />    <!-- 停用相机 -->
    <disable-keyguard-features />  <!-- 停用屏幕锁定的部分功能 -->
    <encrypted-storage />  <!-- 设置存储设备加密 -->
    <expire-password /> <!-- 设置锁屏密码的有效性 -->
    <set-global-proxy />  <!-- 设置设备全局代理 -->
    <watch-login />  <!-- 监视屏幕解锁尝试次数-->
    <limit-password />  <!-- 设置密码规则 -->
    <reset-password />  <!-- 更改锁屏密码 -->
    <force-lock />  <!-- 锁定屏幕 -->
    <wipe-data />  <!-- 清除所有数据,恢复出厂设置 -->
  </uses-policies>  
</device-admin> 

然后实现权限的检查,假设我的继承DeviceAdminReceiver的类名为MyAdminReceiver,主类为MainActivity,则操作如下:

ComponentName componentName = new CompnentName(MainActivity.this, MyAdminReceiver.class);
boolean isAdmin = devicePolicyManager.isAdminActivity(componetName); 

此时返回的布尔值isAdmin若为true,则设备管理器已经激活,若为false,则未激活。可以手动跳转到激活界面,操作如下:

Intnet intent = new Intent();
intent.setAction(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, compnentName);
startActivity(intent);

若激活,息屏操作如下:

devicePolicyManager.lockNow();

如此,息屏操作完成。

亮屏操作:

PowerManager.WakeLock wl = powermanager.newWakeLock(PowerManager.ACQUIRE_CAUSE_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK ,"TAG");
//锁定屏幕长期唤醒
wl.acquire();
//若不调用以下函数,则屏幕常亮;可以选择在定时器后调用,实现定时接触锁定的操作
wl.release();

在获取wl实例时,调用PowerManager.newWakeLock(int levelAndFlags, String tag)函数其中参数levelAndFlags指定使用逻辑或操作符组合的唤醒锁级别和可选标志。

唤醒锁定级别为:PARTIAL_WAKE_LOCK、FULL_WAKE_LOCK、SCREEN_DIM_WAKE_LOCK和SCREEN_BRIGHT_WAKE_LOCK。必须将一个唤醒锁级别指定为levelAndFlags参数的一部分。

唤醒锁标志是:ACQUIRE_CAUSES_WAKEUP和ON_AFTER_RELEASE。可以将多个标志组合为级别和标志参数的一部分。

需要权限:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值