让一个运用成为管理员运用
如果你想让你的运用具有系统的许多特殊的功能,比如锁屏,重置密码,恢复出厂设置,等等
那么,你应该怎么做呢?
在保持你代码尽量不变的情况下,你需要为你的运用注册管理员权限,那么你你应该怎么做呢
1.新建一个类,继承与DeviceAdminReceiver,逻辑可以什么都不写,类的名字也是随意的,例如:
package com.example.androidtest;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
public class MyAdmin extends DeviceAdminReceiver {
}
2.因为DeviceAdminReceiver是BroadcastReceiver的子类,因此他是android的组件,所以需要在清单文件配置: <receiver android:name="com.example.androidtest.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>
又因为系统在跑动时,需要xml/my_admi的配置文件,所以,还需要在res/xml文件夹 下新建一个名为:my_admi.xml
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
<expire-password />
<encrypted-storage />
<disable-camera />
</uses-policies>
</device-admin>
3.配置完毕后,在你要使用这项系统服(锁屏,重置密码,恢复出厂设置,等等)务的页面加上如下代码:
DevicePolicyManager manager = (DevicePolicyManager) this.getSystemService(this.DEVICE_POLICY_SERVICE);
ComponentName mAdminName = new ComponentName(this,MyAdmin.class);
if(!manager.isAdminActive(mAdminName))
{
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName);
startActivity(intent);
}
4.这样就可以在我们的运用中尽情的使用manager 来执行这项服务了
比如:
manager.resetPassword("123456789", 0);//修改密码
manager.lockNow();//锁屏
manager.wipeData(0);//恢复出厂设置