【android】WakeLock不管用了?android到底咋息屏啊?用DevicePolicyManager吧

GitHub链接:GitHub - oldsboy/CloseWindow: android桌面息屏小工具

网上搜android息屏跳出大片回答都说是用wakelock来实现android息屏

结果我权限也请了,程序也走了,没见着有啥反应,看的我火冒三丈,啥玩意儿啊这是

隐约回忆起以前做的息屏时会跳到android设备管理器那里授权!一阵搜索,发现了一个正解:DevicePolicyManager!

        ((TextView)this.findViewById(R.id.tv)).setOnClickListener(v -> {
            ComponentName adminReceiver = new ComponentName(this, AdminReceiver.class);
            DevicePolicyManager systemService = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
            if (requestLockAdmins(systemService, adminReceiver)){
                systemService.lockNow();
            }
        });    //点击以后如果有权限就lockNow!

下面是检查授权和跳转到设备管理器的授权界面:

    /**
     *申请设备管理员权限
     */
    private boolean requestLockAdmins(DevicePolicyManager systemService, ComponentName adminReceiver) {
        if (systemService == null) return false;
        //检查是否已经获取设备管理权限
        boolean active = systemService.isAdminActive(adminReceiver);
        if (!active) {
            //打开DevicePolicyManager管理器,授权页面
            Intent intent = new Intent();
            //授权页面Action -->  DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN
            intent.setAction(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            //设置DEVICE_ADMIN,告诉系统申请管理者权限的Component/DeviceAdminReceiver
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminReceiver);
            //设置 提示语--可不添加
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "DevicePolicyManager涉及的管理权限,一次性激活!");
            startActivityForResult(intent, REQUEST_DevicePolicy);
        }
        return active;
    }
AdminReceiver.class类是一个继承DeviceAdminReceiver的空类,用作receiver监听信息,以下在AndroidManifest.xml中注册。
    <application
        ......>
        ......
        <!-- 设备管理器权限,注册权限监听器 -->
        <receiver
            android:name=".provider.AdminReceiver"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/admin_manager" />

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

其中涉及一个声名授权文件

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <!--锁屏 -->
        <force-lock />
        <!--限制密码类型-->
<!--        <limit-password />-->
        <!-- 监控屏幕解锁尝试次数 -->
        <watch-login />
        <!-- 重置密码-->
<!--        <reset-password />-->
        <!--恢复出厂设置-->
<!--        <wipe-data />-->
        <!-- 设置锁定屏幕密码的有效期 -->
<!--        <expire-password />-->
        <!-- 设置存储设备加密 -->
<!--        <encrypted-storage />-->
        <!-- 停用相机 -->
<!--        <disable-camera />-->
    </uses-policies>
</device-admin>

那么至此,就走完一圈android息屏的流程了。

文中部分代码来源于:Android设备管理器DevicePolicyManager的使用和理解_blockbox的博客-CSDN博客_devicepolicymanager,若想更详细了解DevicePolicyManager,可前往其文章查看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值