设备管理

2018-03-16  本文已影响137人  鲁西西z

Android 2.2通过提供Android Device Administration API引入了对企业应用程序的支持。设备管理API在系统级提供设备管理功能。提供了 提示用户设置新的密码,立即锁定设备,擦除设备的数据(即将设备恢复为出厂默认设置)等功能。

它是如何工作的:

2.设备API支持的策略

开发设备管理应用程序

a)创建DeviceAdminReceiver的子类

要创建设备管理员应用程序,您必须创建 DeviceAdminReceiver的子类。这个DeviceAdminReceiver类包含一系列的回调,当特定的事件发生的时候触发。
public class DeviceAdminSample extends DeviceAdminReceiver {

    @Override
    public DevicePolicyManager getManager(Context context) {
        Log.e("AdminReceiver","getManager()");
        return super.getManager(context);
    }

    @Override
    public ComponentName getWho(Context context) {
        Log.e("AdminReceiver","getWho()");
        return super.getWho(context);
    }

    @Override
    public String onChoosePrivateKeyAlias(Context context, Intent intent,
            int uid, Uri uri, String alias) {
        Log.e("AdminReceiver","onChoosePrivateKeyAlias()");
        return super.onChoosePrivateKeyAlias(context, intent, uid, uri, alias);
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        Log.e("AdminReceiver","onDisableRequested()");
        return super.onDisableRequested(context, intent);
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        Log.e("AdminReceiver","onDisabled()");
        super.onDisabled(context, intent);
    }

    @Override
    public void onEnabled(Context context, Intent intent) {
        Log.e("AdminReceiver","onEnabled()");
        super.onEnabled(context, intent);
    }

    @Override
    public void onLockTaskModeEntering(Context context, Intent intent,
            String pkg) {
        Log.e("AdminReceiver","onLockTaskModeEntering()");
        super.onLockTaskModeEntering(context, intent, pkg);
    }

    @Override
    public void onLockTaskModeExiting(Context context, Intent intent) {
        Log.e("AdminReceiver","onLockTaskModeExiting()");
        super.onLockTaskModeExiting(context, intent);
    }

    @Override
    public void onPasswordChanged(Context context, Intent intent) {
        Log.e("AdminReceiver","onPasswordChanged()");
        super.onPasswordChanged(context, intent);
    }

    @Override
    public void onPasswordExpiring(Context context, Intent intent) {
        Log.e("AdminReceiver","onPasswordExpiring()");
        super.onPasswordExpiring(context, intent);
    }

    @Override
    public void onPasswordFailed(Context context, Intent intent) {
        Log.e("AdminReceiver","onPasswordFailed()");
        super.onPasswordFailed(context, intent);
    }

    @Override
    public void onPasswordSucceeded(Context context, Intent intent) {
        Log.e("AdminReceiver","onPasswordSucceeded()");
        super.onPasswordSucceeded(context, intent);
    }

    @Override
    public void onProfileProvisioningComplete(Context context, Intent intent) {
        Log.e("AdminReceiver","onProfileProvisioningComplete()");
        super.onProfileProvisioningComplete(context, intent);
    }

    @Override
    public void onReadyForUserInitialization(Context context, Intent intent) {
        Log.e("AdminReceiver","onReadyForUserInitialization()");
        super.onReadyForUserInitialization(context, intent);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("AdminReceiver","onReceive()");
        super.onReceive(context, intent);
    }

    @Override
    public void onSystemUpdatePending(Context context, Intent intent,
            long receivedTime) {
        Log.e("AdminReceiver","onSystemUpdatePending()");
        super.onSystemUpdatePending(context, intent, receivedTime);
    }

    
}

在AndroidManifex.xml中注册广播

<receiver android:name=".DeviceAdminSampleReceiver"
        android:label="@string/sample_device_admin"
        android:description="@string/sample_device_admin_description"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

管理在设备上执行的策略的类。

    private DevicePolicyManager manager;
    private ComponentName component;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_device_admin);
        
        manager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        
        component = new ComponentName(this, AdminReceiver.class);                       
    }

启用设备管理

if(manager.isDeviceOwnerApp(getPackageName())){
    showToast("应用程序处于已经授权管理员权限");
}else{
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, component);
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "只有激活管理员权限才能锁屏");
    startActivity(intent);
}

消除

manager.removeActiveAdmin(component);

锁屏

if(manager.isAdminActive(component)){
    // 设备立即锁屏
    manager.lockNow();
//              manager.resetPassword("123", 0);
    // 设备在1s内没有操作锁屏
//              manager.setMaximumTimeToLock(component, 1000);
}else{
    showToast("设备管理器没有激活");
}

设置密码

if(manager.isAdminActive(component)){
    //manager.resetPassword("123", 0);
    Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
    startActivity(intent);
}else{
    showToast("设备管理器没有激活");
}

清除数据

if(manager.isAdminActive(component)){
    manager.wipeData(0);
    // 密码失败后檫除设备数据

// manager.setMaximumFailedPasswordsForWipe(component, 0);
}else{
showToast("设备管理器没有激活");
}

禁用摄像头

if(manager.isAdminActive(component)){
    boolean flag = manager.getCameraDisabled(component);
    Log.e("DemoDeviceAdminActivity", "相机是否可用:"+flag);
    manager.setCameraDisabled(component, !flag);
}else{
    showToast("设备管理器没有激活");
}

加密数据

if(manager.isAdminActive(component)){
    boolean flag = manager.getStorageEncryption(component);
    Log.e("DemoDeviceAdminActivity", "数据是否加密:"+flag);
    
    manager.setStorageEncryption(component, !flag);
}else{
    showToast("设备管理器没有激活");
}
上一篇 下一篇

猜你喜欢

热点阅读