您的位置:首页 > 其它

安卓学习笔记之使用设备管理器(Administrator)

2016-03-27 13:44 417 查看

安卓学习笔记之使用设备管理器(Administrator)

设备管理器的作用:

.锁定屏幕<force-lock>
.擦除数据<wipe-data>(或恢复出厂设置)
.设置密码状态(重置密码 <reset-password>、限制密码长度<limit-password>、密码过期时间<expire-password>等)
.监视登录状态<watch-login>
.禁用摄像头<disable-camera>
.加密存储<encrypted-storage>
.禁用锁屏相关特性<disable-keyguard-features />
.等


使用设备管理器的步骤:

1、获取设备管理器

DevicePolicyManager = policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); //获取设备管理器
ComponentName componentName = new ComponentName(this, AdminReceiver.class); //创建设备组件 需要创建AdminReceiver


2.创建AdminReceiver

public class AdminReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

}

}


3.在src目录下创建xml文件夹 并创建device_admin.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 />
<disable-keyguard-features />
</uses-policies>
</device-admin>


4、在values目录的strings文件中创建设备名称与描述

<resources>
<string name="admin_description">设备管理器功能描述</string>
<string name="admin">设备管理器名称</string>
</resources>


5、AndroidManifest.xml中声明AdminReceiver

<receiver
android:name="com.yu.onekeylock.AdminReceiver"
android:description="@string/admin_description"
android:label="@string/admin"
<!-声明需要的权限-->
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />

<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>


6、使用设备管理器

在使用之前,需要判断是否激活

public void doit(View view) {
// 判断设备管理器是否激活
if (policyManager.isAdminActive(componentName)) {
policyManager.lockNow(); // 锁屏
//                  policyManager.resetPassword("123456", 0); //重置密码
//                  policyManager.wipeData(flags);
finish();
}else{
Toast.makeText(MainActivity.this    , "必须先激活设备管理器!", 1).show();
activateManage();
}
}


激活设备管理器:

private void activateManage() {
// 隐式启动
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//附加数据
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
//描述
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活后可以方便锁屏等操作");

startActivity(intent);
}


激活设备管理器后就可以进行相关功能操作了

policyManager.lockNow(); // 锁屏
//                  policyManager.resetPassword("123456", 0); //重置密码
//                  policyManager.wipeData(flags);
...


注:要卸载应用时,需先取消激活设备管理器

public void unInstall(View view) {
// 取消激活
policyManager.removeActiveAdmin(componentName);
// 卸载程序
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
}


Admin工具类:

/**
* <br/>Author: pecuyu
* <br/>Date: 2017/12/8
* <br/>TODO:Admin工具类
*/

public class AdminUtil {
private Context mContext;
private final DevicePolicyManager policyManager;
private final ComponentName componentName;

public AdminUtil(Context context) {
mContext = context;
policyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
componentName = new ComponentName(context, AdminReceiver.class);
}

public void activateAdmin() {
// 隐式启动
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//附加数据
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
//描述
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活后可以方便锁屏等操作");

mContext.startActivity(intent);
}

public void uninstall() {
// 取消激活
policyManager.removeActiveAdmin(componentName);
// 卸载程序
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + mContext.getPackageName()));
mContext.startActivity(intent);
}

// 判断设备管理器是否激活
public boolean isAdminActive() {
return policyManager.isAdminActive(componentName);
}

public void lockNow() {
policyManager.lockNow(); // 锁屏
}

public void disableCamera(boolean enable) {
policyManager.setCameraDisabled(componentName, enable);

}

/**
*
* @param flags
* {@link DevicePolicyManager#WIPE_EXTERNAL_STORAGE} and {
* @link DevicePolicyManager#WIPE_RESET_PROTECTION_DATA}.
*/
public void wipeData(int flags) {
policyManager.wipeData(flags);
}

/**
* 关闭特性功能
*
* @param which  which feature to disable <br/>
* know features: <br/>
*            <br/>{@link  DevicePolicyManager#KEYGUARD_DISABLE_FEATURES_NONE} (default),
*            <br/>{@link DevicePolicyManager#KEYGUARD_DISABLE_WIDGETS_ALL},
*            <br/>{@link DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS},
*            <br/>{@link DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS},
*            <br/>{@link DevicePolicyManager#KEYGUARD_DISABLE_SECURE_NOTIFICATIONS},
*            <br/>{@link DevicePolicyManager#KEYGUARD_DISABLE_FINGERPRINT},
*            <br/>{@link DevicePolicyManager#KEYGUARD_DISABLE_FEATURES_ALL}
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void disableFeature(int which) {
policyManager.setKeyguardDisabledFeatures(componentName, which);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: