一键锁屏的应用非常多,本例仅为一个入门示例。
一。创建管理员消息接收器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
/*** * 设备管理员接收器 接收管理员级别的设备相关消息 */ public class MyDeviceAdminReceiver extends DeviceAdminReceiver { /** 没有需要重写的方法,所以可啥也不做。以下代码谨供参看 **/ @Override public void onEnabled(Context context, Intent intent) { Toast.makeText(context, "设备管理:可用", 0).show(); } @Override public void onDisabled(Context context, Intent intent) { Toast.makeText(context, "设备管理:不可用", 0).show(); } @Override public CharSequence onDisableRequested(Context context, Intent intent) { return "这是一个可选的消息,警告有关禁止用户的请求"; } @Override public void onPasswordChanged(Context context, Intent intent) { Toast.makeText(context, "设备管理:密码己经改变", 0).show(); } @Override public void onPasswordFailed(Context context, Intent intent) { Toast.makeText(context, "设备管理:改变密码失败", 0).show(); } @Override public void onPasswordSucceeded(Context context, Intent intent) { Toast.makeText(context, "设备管理:改变密码成功", 0).show(); } } |
二。注册消息接收器
1.注册接收器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<manifest ... > <uses-sdk ... /> <application ... > <activity android:name=".MainActivity" ... > <intent-filter> ... </intent-filter> </activity> <!--注册自定义的设备管理员消息接收器 name=接收器全路径 des和lbl都在/res/values/strings.xml里配置“ <string name="des">用户管理员描述</string> <string name="lbl">用户管理员简述</string>” permission=增加管理员权限 --> <receiver android:name="com.cuiweiyou.lockscreendemo.receive.MyDeviceAdminReceiver" android:description="@string/des" android:label="@string/lbl" android:permission="android.permission.BIND_DEVICE_ADMIN" > <!-- resource:可以管理的权限清单 --> <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> |
2.功能清单文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<!-- 在/res下创建xml目录,在其中创建device_admin_sample.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-keyguard-features/> <!-- 禁用锁屏信息 --> <disable-camera /> <!-- 禁用摄像头 --> </uses-policies> </device-admin> |
3.字串注册
1 2 3 4 5 6 7 8 9 10 11 |
<!-- /res/values/strings.xml --> <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">LockScreenDemo</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="des">设备管理员详细描述XXXXX...</string> <string name="lbl">标题:NB的管理员</string> </resources> |
三。布局
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<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" > <Button android:id="@+id/btn_douninstall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:onClick="douninstall" android:text="卸载" /> <Button android:id="@+id/btn_doclock" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/btn_douninstall" android:layout_centerHorizontal="true" android:onClick="doclock" android:text="锁屏" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/btn_doclock" android:layout_centerHorizontal="true" android:onClick="doadmin" android:text="开启管理员" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/btn_douninstall" android:layout_centerHorizontal="true" android:onClick="doclear" android:text="清除数据" /> </RelativeLayout> |
四。功能实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
public class MainActivity extends ActionBarActivity { /** 设备管理器 **/ private DevicePolicyManager dpm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); // 在桌面创建应用的快捷键,开启权限后 一点即锁 // doclock(null); // finish(); } /** * 系统设置, 安全, 设备管理器, “用户管理员”。 开启此功能。 **/ // 开启管理员,不必再手动开启 public void doadmin(View v) { // 激活目标:硬件管理员广播接收者 ComponentName componentName = new ComponentName(this, MyDeviceAdminReceiver.class); // 意图:开启管理员 Intent i = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); // 扩展管理员-自定义的接收者 i.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); // 提示信息,引导用户开启 i.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "开启一键锁屏,轻松锁定屏幕"); // 执行 startActivity(i); /** * 如果没有在“系统设置,,,, 用户管理员”,即弹出此引导提示用户开启 **/ } // 锁屏 public void doclock(View v) { ComponentName componentName = new ComponentName(this, MyDeviceAdminReceiver.class); if (dpm.isAdminActive(componentName)) { dpm.lockNow(); // 锁屏 dpm.resetPassword("", 0); // 设置锁屏密码。“”表示无密码 } else { Toast.makeText(MainActivity.this, "还没有管理员权限,快开启吧", 0).show(); } } /** 添加卸载本管理器应用的功能。因为系统默认不卸载管理员应用 **/ public void douninstall(View v) { // 清除管理员权限 ComponentName componentName = new ComponentName(this, MyDeviceAdminReceiver.class); dpm.removeActiveAdmin(componentName); // 卸载 Intent i = new Intent(); i.setAction("android.intent.action.VIEW"); i.addCategory("android.intent.category.DEFAULT"); i.setData(Uri.parse("package:" + getPackageName())); startActivity(i); } // 删除数据!谨慎操作! public void doclear(View v) { // dpm.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE); // 清除SD卡上的数据 // dpm.wipeData(0); // 恢复出厂设置 } } |
声明
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/772.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设