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,可前往其文章查看。