Android設(shè)備管理器DEMO

一、權(quán)限清單: res/xml/devices_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 />
        <expire-password />
        <encrypted-storage />
        <disable-camera />
    </uses-policies>
</device-admin>

二、建立和注冊設(shè)備管理器的Receiver

import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * Created by kdroid on 2016/4/22.
 */
public class SampleDeviceAdminReceiver extends DeviceAdminReceiver{
    @Override
    public void onDisabled(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(context, "disabled dpm", Toast.LENGTH_SHORT).show();
        super.onDisabled(context, intent);
    }

    @Override
    public void onEnabled(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(context, "enabled dpm", Toast.LENGTH_SHORT).show();
        super.onEnabled(context, intent);
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(context, "disable dpm request", Toast.LENGTH_SHORT)
                .show();
        return super.onDisableRequested(context, intent);
    }
}
<receiver
    android:name=".SampleDeviceAdminReceiver"
    android:permission="android.permission.BIND_DEVICE_ADMIN" >
    <meta-data
        android:name="android.app.device_admin"
        android:resource="@xml/devices_admin" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        <action android:name="android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED" />
        <action android:name="android.app.action.DEVICE_ADMIN_DISABLED" />
    </intent-filter>
</receiver>
三、建立Manager類
public class PolicyManager {
    public static final int DPM_ACTIVATION_REQUEST_CODE = 100;
    private Context mContext;
    private DevicePolicyManager mDPM;
    private ComponentName adminComponent;

    public PolicyManager(Context context) {
        // TODO Auto-generated constructor stub
        this.mContext = context;
        mDPM = (DevicePolicyManager) mContext
                .getSystemService(Context.DEVICE_POLICY_SERVICE);
        adminComponent = new ComponentName(mContext.getPackageName(),
                mContext.getPackageName() + ".SampleDeviceAdminReceiver");
    }

    public boolean isAdminActive() {
        return mDPM.isAdminActive(adminComponent);
    }

    public ComponentName getAdminComponent() {
        return adminComponent;
    }

    public void disableAdmin() {
        mDPM.removeActiveAdmin(adminComponent);
    }
}
四、開啟和禁用設(shè)備管理器Intent的寫法
// 會直接跳轉(zhuǎn)到當(dāng)前應(yīng)用的 激活/關(guān)閉 界面
// this will go directly to the activate/de-activate screen of the app you choose:
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, new ComponentName(context, SecurityDeviceAdminReceiver.class));
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                context.getString(R.string.settings_device_admin_desc));
activity.startActivity(intent);

// 會跳轉(zhuǎn)到設(shè)備管理器列表
// this will go to the list of admin apps
final Intent intent=new Intent();
intent.setComponent(new ComponentName("com.android.settings","com.android.settings.DeviceAdminSettings"));
activity.startActivity(intent);
開啟Intent的寫法2
// 會跳轉(zhuǎn)到系統(tǒng)界面
if (!policyManager.isAdminActive()) {
    Intent activateDeviceAdmin = new Intent(
            DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    activateDeviceAdmin.putExtra(
            DevicePolicyManager.EXTRA_DEVICE_ADMIN,
            policyManager.getAdminComponent());
    activateDeviceAdmin
            .putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                    "After activating admin, you will be able to block application uninstallation.");
    startActivityForResult(activateDeviceAdmin,
            PolicyManager.DPM_ACTIVATION_REQUEST_CODE);
}
關(guān)閉Intent的寫法2
// 沒有跳轉(zhuǎn)界面
policyManager.disableAdmin()
極端用法
// those are quite risky, so you could first use this method:
Intent intent=new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
final PackageManager packageManager=context.getPackageManager();
final List<ResolveInfo> resolveInfos=packageManager.queryIntentActivities(intent,0);
if(resolveInfos!=null&&!resolveInfos.isEmpty()){
  try{
    final ResolveInfo resolveInfo=resolveInfos.get(0);
    intent=new Intent();
    intent.setComponent(new ComponentName(resolveInfo.activityInfo.packageName,resolveInfo.activityInfo.name));
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,componentNameResult);
    context.startActivity(intent);
    return true;
  }catch(final Exception e){}
}    

// you can add try-catch for each of the methods, and if all failed , use:
final Intent intent=new Intent(Settings.ACTION_SECURITY_SETTINGS);
activity.startActivity(intent);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容