DeviceManager--Device administration设备管理器

To create a device admin app, you must subclassDeviceAdminReceiver. TheDeviceAdminReceiverclass consists of a series of callbacks that are triggered when particular events occur.
大意:写一个设备管理APP,首先必须继承DeviceAdminReceiver类,这个类包含了很多回调方法,这些回调方法会在特定事件发生时,被触发。就是这个APP会管理一些设备功能(如:锁屏、密码策略管理),一旦触发这些功能,就会调用这些重写的回调函数

The process of enabling the app begins when the user performs an action that triggers theACTION_ADD_DEVICE_ADMINintent
大意: 启用这个APP,即激活设备管理器,是由触发了ACTION_ADD_DEVICE_ADMIN,才会进行的

The line intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample)states that mDeviceAdminSample (which is aDeviceAdminReceivercomponent) is the target policy.
大意:激活设备管理器的意图 ACTION_ADD_DEVICE_ADMIN 需要添加字段为 DevicePolicyManager.EXTRA_DEVICE_ADMIN 的数据来传递这个设备管理APP请求的策略有哪些,而这个mDeviceAdminSample对象,就是 DeviceAdminReceiver组件对象。所以说这个设备管理接收器即进行了监听后的回调功能,又传递了这个APP申请的策略。非常重要

代码

  • java代码中完成了如果设备进行了锁屏或者解锁行为,辣么它就会回调这些函数
    sampleDeviceAdminReceiver .java
public class sampleDeviceAdminReceiver extends DeviceAdminReceiver {

    @Override
    public void onLockTaskModeEntering(Context context, Intent intent, String pkg) {
        super.onLockTaskModeEntering(context, intent, pkg);
        Toast.makeText(context, "熊博士为您锁屏", Toast.LENGTH_SHORT);
    }
    @Override
    public void onLockTaskModeExiting(Context context, Intent intent) {
        super.onLockTaskModeExiting(context, intent);
        Toast.makeText(context, "熊博士为您解锁屏幕", Toast.LENGTH_SHORT);
    }
}
  • 在清单文件中,除了激活设备管理器的action外,主要就是在元数据属性中设置了,请求一个资源文件地址,里面是APP要申请的策略
    AndroidManifest.xml
        <receiver android:name=".sampleDeviceAdminReceiver"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <intent-filter>
                <!--当用户同意该APP为设备管理器时,调用该广播-->
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
            <meta-data android:name="android.app.device_admin"
                android:resource="@xml/request_policies" />
        </receiver>

request_policies.xml

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <!--强制锁屏的策略,需要什么,在这里填,我这里只设定一个策略-->
        <force-lock />
    </uses-policies>
</device-admin>
  • 入口活动,发送激活设备管理的意图,设置锁屏的按钮
    MainActivity.java
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ComponentName mDeviceAdminSample = new ComponentName(this, sampleDeviceAdminReceiver.class);
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
        //给系统发送一个请求激活设备管理器的意图
        startActivity(intent);
        Button button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //获取设备策略管理服务对象,来执行策略
                DevicePolicyManager devicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
               //锁屏
                devicePolicyManager.lockNow();
            }
        });
    }
}

遇见的小问题:

  • 应用图标的格式问题。我用jpg图片替换png图片作为图标编译会失败
    [Answer] 可以使用类似这个https://jpg2png.com/zh/地址的jpg转png解决

官网中的例子:https://developer.android.com/guide/topics/admin/device-admin#sample

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值