Android一键锁屏代码
16lz
2021-01-23
锁屏小Demo
由于手机关机键最近不好用了,所以就研究研究一键锁屏的小玩意。
首先创建一个工程
布局很简单,就一个button
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/c" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="锁屏" android:onClick="LockScreen" android:id="@+id/button" android:layout_centerVertical="true" android:layout_centerHorizontal="true" />RelativeLayout>
创建一个广播
广播只需继承DeviceAdminReceiver即可
public class AdminReceiver extends DeviceAdminReceiver {}
当然,别忘了在清单文件中注册需要权限android:permission="android.permission.BIND_DEVICE_ADMIN"
<receiver android:name=".AdminReceiver" 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>
resource中的文件内容为
<device-admin xmlns:android="http://schemas.android.com/apk/res/android" > <uses-policies> <limit-password /> <watch-login /> <reset-password /> <force-lock /> <wipe-data /> <expire-password /> <encrypted-storage /> <disable-camera /> uses-policies>device-admin>
mainActivity中的代码实现
public void LockScreen(View v){ new Thread(new Runnable() { @Override public void run() { SystemClock.sleep(1000); dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); componentName = new ComponentName(getApplicationContext(), AdminReceiver.class); if (dpm.isAdminActive(componentName)) {//判断是否有权限(激活了设备管理器) dpm.lockNow();// 直接锁屏 //杀死当前应用 android.os.Process.killProcess(android.os.Process.myPid()); }else{ activeManager();//激活设备管理器获取权限 } } }).start(); } private void activeManager() { //使用隐式意图调用系统方法来激活指定的设备管理器 Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "一键锁屏"); startActivity(intent); }
为了避免每次进了应用都要点击Button按钮才可实现功能,所以可以直接在onCreate()方法中实现该功能
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar actionBar = getSupportActionBar(); actionBar.hide(); setContentView(R.layout.activity_main); new Thread(new Runnable() { @Override public void run() { SystemClock.sleep(1000); dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); componentName = new ComponentName(getApplicationContext(), AdminReceiver.class); if (dpm.isAdminActive(componentName)) {//判断是否有权限(激活了设备管理器) dpm.lockNow();// 直接锁屏 //杀死当前应用 android.os.Process.killProcess(android.os.Process.myPid()); }else{ activeManager();//激活设备管理器获取权限 } } }).start(); }
由于每次点击桌面图标会需要一点时间去处理逻辑功能,会产生闪屏效果,所以我选择在线程中睡1s钟。当然,可以自己设置一个好看点的背景图片,就Ok了。如有不足之处,请指出,谢谢!
源码链接
欢迎关注公众号
更多相关文章
- Android截屏实现——亲测有效代码
- android APP 获得system权限
- android 权限定义的文件,位置
- [置顶] Android SDK中的例子的源代码
- Android 拨打电话功能
- android通过chmod命令实现文件权限修改