Android实战教程第五篇之一键锁屏应用

作者:杨道龙 时间:2023-12-03 18:47:36 

Device Administration

对于这个应用,市场上很多,但是看一下评论就知道效果有多差了,因为99%一键锁屏应用没办法卸载。今天就开发一个小应用,实现轻松点击一键锁屏,同时支持卸载。。。

通查看谷歌原文档,有设备管理器的API,从这里可以抽取一些代码,开发出一个小应用,即即将介绍的《一键锁屏》。
根据文档翻译,获取设备管理器的大致步骤如下:

1、创建类DeviceAdminReceiver的子类

如:com.itydl.lockscreen.DeviceAdminSample

2、在清单文件中配置广播接收者


<receiver
 android:name="com.itydl.lockscreen.DeviceAdminSample"
 android:description="@string/sample_device_admin_description"
 android:label="@string/sample_device_admin"
 android:permission="android.permission.BIND_DEVICE_ADMIN" >
 <meta-data
  android:name="android.app.device_admin"
  android:resource="@xml/device_admin_sample" />

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

3、配置字符串相关信息


<string name="activity_sample_device_admin">设备管理员</string>
<string name="sample_device_admin">管理员</string>
<string name="sample_device_admin_description">开启设备管理员,不开启扣2000块</string>

4、在res目录下创建xml文件夹,在该文件夹下创建deviceadminsample.xml文件,内容:


<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>

5、在代码中创建设备管理器和组件


dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
ComponentName who = new ComponentName(this, DeviceAdminSample.class);

6、功能

dpm.lockNow();一键锁屏

上述步骤有些晦涩,看一下实际操作步骤(建议通过阅读官网AP文档I一步步操作):

1)、把下方官方文档给出的配置文件的代码复制到自己创建的工程里面:

Android实战教程第五篇之一键锁屏应用

复制过去发现报错了,因为三条描述属性信息没有配置,那么去String.xml中配置以下三条信息:


<string name="activity_sample_device_admin">设备管理员</string>
<string name="sample_device_admin">管理员</string>
<string name="sample_device_admin_description">开启设备管理员,不开启扣2000块</string>

删除掉配置文件中系统自带的activity节点信息。修改复制过来的activity标签name为我们工程的活动名称。

此时还是报错,因为还有一个android:resource="@xml/device_admin_sample" 没有配置
新建xml的文件夹,建一个device_admin_sample的文件,里面需要配置一些内容。把官方文档中的内容全部写入即可。
内容如下:

Android实战教程第五篇之一键锁屏应用

解决了报错问题。

2)、按照文档要求,新建一个class DeviceAdminSample extends DeviceAdminReceiver。这是一个广播接收者,里面不需要写任何内容,记得把配置文件中活动和接收者名称修改为我们自己的。

android:name="com.itydl.lockscreen.DeviceAdminSample"
android:name="com.itydl.lockscreen.MainActivity"

3)、在活动中点击事件里面添加如下两行代码:


 DevicePolicyManager dmp = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
 dmp.lockNow();//一键锁屏

此时其实已经开发完毕了,运行后会报错,发现时没有“”拥有者“权限类似的错误信息。因为这仅仅对于程序员有效,进入设备管理器激活这个应用,再打开就可以使用了;对于用户,不知道在哪激活,根本得不得体验,所以还需要设置一键锁屏的时候,启动程序,先进入开启设备管理器活动的逻辑,让用户手动激活。
具体的代码如下:
清单文件:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itydl.lockscreen"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
 android:minSdkVersion="8"
 android:targetSdkVersion="17" />

<application
 android:allowBackup="true"
 android:icon="@drawable/ic_launcher"
 android:label="@string/app_name"
 android:theme="@style/AppTheme" >

<activity
  android:name="com.itydl.lockscreen.MainActivity"
  android:label="一键锁屏" >
  <intent-filter>
   <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
 </activity>

<receiver
  android:name="com.itydl.lockscreen.DeviceAdminSample"
  android:description="@string/sample_device_admin_description"
  android:label="@string/sample_device_admin"
  android:permission="android.permission.BIND_DEVICE_ADMIN" >
  <meta-data
   android:name="android.app.device_admin"
   android:resource="@xml/device_admin_sample" />

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

</application>

</manifest>

package com.itydl.lockscreen;

import android.os.Bundle;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

private DevicePolicyManager dmp;

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
    //获取设备管理员对象
   dmp = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
}

/**
 * 一键锁屏
 *
 * @param v
 */
public void lockScreen(View v) {
 // 如果没有激活设备管理员,提醒用户做事
 ComponentName who = new ComponentName(this, DeviceAdminSample.class);
 if (dmp.isAdminActive(who)) {// true表示已经激活,测试管理员是否已经激活。这里的who其实就是我们自定义的空的广播接收者
  dmp.lockNow();// 一键锁屏

} else {
      ////帮助用户打开激活设备管理器的界面,让用户手动激活
      /**根据官方文档,写出启动设备管理器的活动
   * // Launch the activity to have the user enable our admin. Intent
   * intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
   * intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
   * mDeviceAdminSample);
   * intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
   * mActivity.getString(R.string.add_admin_extra_app_text));
   * startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);
   */

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
  intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
     who);
   intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
     "设备管理器。。。");
   startActivityForResult(intent, 1);
 }
}

}

此时记得去设备管理器取消激活。

一键运行之后如下:

Android实战教程第五篇之一键锁屏应用

点击一键锁屏后,自动跳转到设备管理器页面,按下Activiate。应用就生效了。

这个时候应用算是开发完毕了,的确能实现锁屏功能,但是还有很多问题需要解决。
你会发现此时的而应用和市场上评论一样,没法卸载!!!

这样用户体验也很差,而且必须点开用用才能锁屏,那就没必要浪费时间点开一个应用去锁屏了。

对于上面几个问题,在后边的博文中继续更新解决,点击查看https://www.jb51.net/article/96996.htm。

来源:http://blog.csdn.net/qq_32059827/article/details/51860900

标签:Android,一键锁屏
0
投稿

猜你喜欢

  • Java spring webmvc如何实现控制反转

    2023-03-12 06:35:56
  • Java线程同步方法实例总结

    2022-08-20 20:35:08
  • Java实现简单学生管理系统

    2023-01-06 16:40:38
  • C#对Json进行序列化和反序列化

    2023-04-16 09:06:15
  • C#基础知识之this关键字介绍

    2022-02-08 10:59:16
  • java利用easyexcel实现导入与导出功能

    2022-09-29 06:40:16
  • SpringBoot注册Filter的两种实现方式

    2023-01-01 10:26:05
  • C#编程调用Cards.dll实现图形化发牌功能示例

    2022-10-24 12:02:54
  • 浅谈Java锁机制

    2022-01-09 00:58:56
  • 详解Java中的ThreadLocal

    2022-08-19 17:48:43
  • Java基础之反射详解

    2022-06-16 12:25:11
  • java线程中断 interrupt 和 LockSupport解析

    2021-06-29 01:20:48
  • 关于springboot响应式编程整合webFlux的问题

    2023-12-07 07:25:55
  • SpringBoot2.0 ZipKin示例代码

    2022-11-25 00:24:40
  • Android App中使用Gallery制作幻灯片播放效果

    2022-04-03 21:53:37
  • Android Studio的中文乱码问题解决方法

    2023-06-05 04:48:14
  • java实现上传图片尺寸修改和质量压缩

    2023-04-04 03:42:55
  • Unity2021发布WebGL与网页交互问题的解决

    2023-01-27 23:44:17
  • Android中ACTION_CANCEL的触发机制与滑出子view的情况

    2023-08-01 14:39:09
  • Android编程实现图片的颜色处理功能示例

    2022-10-08 23:15:25
  • asp之家 软件编程 m.aspxhome.com