`
yuanlanjun
  • 浏览: 1184708 次
文章分类
社区版块
存档分类
最新评论

Android 激活Deviceadmin,并进行锁屏和恢复出厂设置

 
阅读更多


Android手机一般不用时,都会通过电源键来锁定屏幕同时关闭屏幕灯。

其实从API Level 8 (也就是Android 2.2) 开始, Android提供了DevicePolicyManager类, 可以让你的应用程序也能执行屏幕锁定等操作。

锁定效果:

要让自己的应用实现该屏幕锁定,主要需要用到以下几个类:DevicePolicyManager

这是设备管理的主类。通过它可以实现屏幕锁定、屏幕亮度调节、出厂设置等功能。

DeviceAdminReceiver

该类继承自 BroadcastReceiver 。 从源码可以看到,其实就是实现了一个OnReceive方法,该方法中根据不同的Action,执行相应的操作。 比如,如果激活成功,那么Action就是ACTION_DEVICE_ADMIN_ENABLED, 据此调用 onEnabled 方法。

系统源码:

  1. /**
  2. * Intercept standard device administrator broadcasts.Implementations
  3. * should not override this method; it is better to implement the
  4. * convenience callbacks for each action.
  5. */
  6. @Override
  7. public void onReceive(Context context, Intent intent) {
  8. String action = intent.getAction();
  9. if (ACTION_PASSWORD_CHANGED.equals(action)) {
  10. onPasswordChanged(context, intent);
  11. } else if (ACTION_PASSWORD_FAILED.equals(action)) {
  12. onPasswordFailed(context, intent);
  13. } else if (ACTION_PASSWORD_SUCCEEDED.equals(action)) {
  14. onPasswordSucceeded(context, intent);
  15. } else if (ACTION_DEVICE_ADMIN_ENABLED.equals(action)) {
  16. onEnabled(context, intent);
  17. } else if (ACTION_DEVICE_ADMIN_DISABLE_REQUESTED.equals(action)) {
  18. CharSequence res = onDisableRequested(context, intent);
  19. if (res != null) {
  20. Bundle extras = getResultExtras(true);
  21. extras.putCharSequence(EXTRA_DISABLE_WARNING, res);
  22. }
  23. } else if (ACTION_DEVICE_ADMIN_DISABLED.equals(action)) {
  24. onDisabled(context, intent);
  25. }
  26. }


具体中的简单引用:

屏幕锁定和恢复出厂设置

1.创建 MyAdmin 的广播接受者 继承 DeviceAdminReceiver


<receiver android:name=".MyAdmin">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/my_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>


my_admin.xml

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
</uses-policies>
</device-admin>

2.获取IDevicePolicyManager

DevicePolicyManager dm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);


3.注册广播接受者为admin设备

ComponentName mAdminName = new ComponentName(this, MyAdmin.class);
if (mService != null) {
if (!mService.isAdminActive(mAdminName)) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra (DevicePolicyManager.EXTRA_DEVICE_ADMIN,mAdminName);
startActivity(intent);
}

}


4.点击事件中进行锁屏或者清零数据处理

public void lock(View view){
dm.resetPassword("123", 0); //滑动解锁屏幕条后需要输入密码(方法中新设置的密码)才能真正解锁
dm.lockNow();

//恢复出厂设置.
//dm.wipeData(0);
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics