Android一键锁屏与抬手亮屏的实
.
介绍
最近由于项目需要开发语音控制相关的功能,需要用语音来实现锁屏和唤醒屏幕的功能,所以顺便就想开发一个“一键锁屏”的App。主要是我用的手机那个双击亮屏使用起来太麻烦了,而且又不想按电源键。(主要是因为太穷了,买不起手机O(∩_∩)O哈哈~)
.
.
锁屏实现一
主要是基于
DeviceAdminReceiver
,安卓的设备管理器来实现一键锁屏的功能
.
1. 创建AdminManageReceiver
类并继承DeviceAdminReceiver
public class AdminManageReceiver extends DeviceAdminReceiver {
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
}
}
.
2.在res
目录下新建子目录xml
,创建一个xml
资源文件
<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock />
</uses-policies>
</device-admin>
.
3. 在 AndroidManifest.xml
中进行注册
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@drawable/ic_launcher"
android:supportsRtl="true"
android:theme="@style/Theme.LockAndLightScreenDemo"><!--隐藏状态栏与标题栏-->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".Receiver.AdminManageReceiver"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
</application>
.
4. 校验是否激活设备管理器
注: 不激活设备管理器权限是无法实现锁屏功能的。
DialogUtils
是我自己写的一个弹窗工具类,是基于AlertDialog
实现的。
private var mAdminName: ComponentName? = null
private var mDPM: DevicePolicyManager? = null
private fun ifOpenLockScreen() {
//判断是否有锁屏权限
if (checkLockPermission()) {
lockScreen()//锁屏
} else {
DialogUtils.createDialog(this@MainActivity,
R.drawable.dialog_icon_warning,
"提醒",
"点击「前往设置」前往激活设备管理器,如果未开启,锁屏功能无法使用!",
"前往设置", {
_, _ ->
showAdminManagement(mAdminName!!)
},
"算了", {
dialog, which ->
Toast.makeText(this, "未开启,锁屏功能无法使用", Toast.LENGTH_SHORT).show()
}
).show()
}
}
.
5. 如果没有激活设备管理器,跳转到激活页面
private var mAdminName: ComponentName? = null
private var mDPM: DevicePolicyManager? = null
//跳转到设备管理器激活页面
private fun showAdminManagement(mAdminName: ComponentName) {
val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName)
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "activity device")
startActivityForResult(intent, 1)
}
.
6. 实现一键锁屏功能
注: 我这里为了使用方便在调用完这个方法后
finish()
,会退出本应用。如果想实现更完美的效果建议把锁屏功能在 Service 实现,我这里就偷懒一下了。O(∩_∩)O哈哈~
//一键锁屏
private fun lockScreen() {
if (mDPM!!.isAdminActive(mAdminName!!)) {
mDPM!!.lockNow()
finish()
}
}
.
.
锁屏实现二
主要是基于
AccessibilityService
,安卓的无障碍服务来实现一键锁屏的功能
.
1. 创建 AccessibilitySetting
类并继承 AccessibilityService
服务
这里只继承
AccessibilityService
服务,但是没有做任何的逻辑代码处理,如果想实现更多的功能可以自己去查找安卓无障碍服务修改的资料来实现,这里就不做过多的介绍。
public class AccessibilitySetting extends Access