Android(安卓)锁屏功能
16lz
2021-01-24
开发中遇到锁屏和唤醒屏幕的功能,顺便就想开发一个“一键锁屏”的app,然后就有了这篇文章。。。哈哈哈
首次打开必须用户手动授权锁屏功能;如下图:点击激活
第一步、在AndroidManifest.xml中配置:
第二步、配置中的my_device_admin代码 、MyDeviceAdminReceiver的代码
2.1、在res/xml中自定义my_device_admin.xml文件,我只配置了锁屏权限
<?xml version="1.0" encoding="utf-8"?>
2.2、新建MyDeviceAdminReceiver类
//可以不实现任何方法,继承空类即可public class MyDeviceAdminReceiver extends DeviceAdminReceiver {// @Override// public void onReceive(Context context, Intent intent) {// super.onReceive(context, intent);// Log.e("snoww", "onreceiver");// }//// @Override// public void onEnabled(Context context, Intent intent) {// Log.e("snoww", "激活使用");// super.onEnabled(context, intent);// }//// @Override// public void onDisabled(Context context, Intent intent) {// Log.e("snoww", "取消激活");// super.onDisabled(context, intent);// }}
第三步、 mainactivity的完整代码:
public class MainActivity extends AppCompatActivity { DevicePolicyManager dpm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lock(); } //锁屏 private void lock() { dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); ComponentName componentName = new ComponentName(this, MyDeviceAdminReceiver.class); // 判断该组件是否有系统管理员的权限 boolean isAdminActive = dpm.isAdminActive(componentName); if (!isAdminActive) {//这一句一定要有... Intent intent = new Intent(); intent.setAction(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); startActivityForResult(intent, 101); } //isAdminActive 为false,直接调用dpm.lockNow()会报java.lang.SecurityException: No active admin owned by uid 10510 for policy #3 if (isAdminActive) { dpm.lockNow(); //杀掉进程 android.os.Process.killProcess(android.os.Process.myPid()); } } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); //这种方式可能会造成自动重启// android.os.Process.killProcess(android.os.Process.myPid()); //授权技术关闭应用 finish(); }}
最后将mainactivity的主题设置为透明,就可以了;
体验APP地址
更多相关文章
- Android定制ListView的界面(使用继承自ArrayAdapter的自定义适配
- Android(安卓)中的ORM框架
- 操作 Android(安卓)模拟器
- Android(安卓)处理屏幕旋转
- Android(安卓)AIDL实现调用第三方登录
- Android中获取手机支持的硬件解码器类型以及对应的解码器名称
- 原:Android(安卓)获取屏幕高度、标题高度、状态栏高度详解
- 自定义View系列教程07--详解ViewGroup分发Touch事件
- Android跨进程通信 AIDL使用