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文件里面定义,具体如下:

  
            
android:resource="@xml/device_admin" />

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

  
  
  
    
        
      
      
     
      
      
      
      
      
      
    
 

然后实现权限的检查,假设我的继承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。可以将多个标志组合为级别和标志参数的一部分。

需要权限:


你可能感兴趣的:(Android)