Fork me on GitHub

Android锁屏软件

需求描述:锁屏软件就是点击应用然后直接锁屏,不会弹出任何界面

设计思路:应用启动以后通过getSystemService获取系统的服务,调用安卓系统的DevicePolicyManager和ComponentName来对系统进行操作,先判断用户是否有相应的权限,如果有,直接锁屏,如果没有就先获取系统权限,再锁屏

废话不说,直接上代码

Main.java(主页面)

 1 package com.example.wangshibang.screenlock;
 2 
 3 import android.app.Activity;
 4 import android.app.admin.DevicePolicyManager;
 5 import android.content.ComponentName;
 6 import android.content.Context;
 7 import android.content.Intent;
 8 import android.os.Bundle;
 9 
10 /**
11  * Created by wangshibang on 2016-11-8.
12  */
13 public class Main extends Activity {
14     private DevicePolicyManager policyManager;//管理和操作设备的API
15     private ComponentName componentName;//打开其他应用程序中的Activity或服务
16 
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21 
22         //获取设备管理服务
23         policyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
24         //AdminReceiver 继承自 DeviceAdminReceiver
25         componentName = new ComponentName(this, AdminReceiver.class);
26 
27         //主方法
28         myLock();
29 
30         //killMyself ,锁屏之后就立即kill掉我们的Activity,避免资源的浪费
31         android.os.Process.killProcess(android.os.Process.myPid());
32     }
33 
34     private void myLock(){
35         boolean isActive = policyManager.isAdminActive(componentName);
36         if(!isActive){
37             //若没有权限就去获取权限
38             activeManage();
39 
40             return;
41             //锁屏
42             //policyManager.lockNow();
43         }
44         else {
45             policyManager.lockNow();
46         }
47     }
48 
49     private void activeManage(){
50         //启动设备管理(隐式Intent) - 在AndroidManifest.xml中设定相应过滤器
51         Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
52         //权限列表
53         intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
54         //描述(additional explanation)
55         intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "----Other Description----");
56         startActivityForResult(intent, 0);
57     }
58 }

AdminReceiver.java

 1 package com.example.wangshibang.screenlock;
 2 
 3 import android.app.admin.DeviceAdminReceiver;
 4 import android.content.Context;
 5 import android.content.Intent;
 6 import android.content.SharedPreferences;
 7 import android.widget.Toast;
 8 
 9 /**
10  * Created by wangshibang on 2016-11-8.
11  */
12 public class AdminReceiver extends DeviceAdminReceiver {
13 
14     public static SharedPreferences getDevicePreference(Context context){
15         //获取设备存储的数值
16         return context.getSharedPreferences(DeviceAdminReceiver.class.getName(),0);
17     }
18 
19     // 密码的特点
20     public static String PREF_PASSWORD_QUALITY = "password_quality";
21     // 密码的长度
22     public static String PREF_PASSWORD_LENGTH = "password_length";
23 
24     public static String PREF_MAX_FAILED_PW = "max_failed_pw";
25 
26     void showToast(Context context, CharSequence text) {
27         Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
28     }
29 
30     @Override
31     public void onEnabled(Context context, Intent intent) {
32         // TODO Auto-generated method stub
33         showToast(context, "设备管理:可用");
34     }
35 
36     @Override
37     public void onDisabled(Context context, Intent intent) {
38         // TODO Auto-generated method stub
39         showToast(context, "Deactive successful!");
40     }
41 
42     @Override
43     public CharSequence onDisableRequested(Context context, Intent intent) {
44         // TODO Auto-generated method stub
45         return "Are you sure want to Deactive?";
46     }
47 
48     @Override
49     public void onPasswordChanged(Context context, Intent intent) {
50         // TODO Auto-generated method stub
51         showToast(context, "设备管理:密码己经改变");
52     }
53 
54     @Override
55     public void onPasswordFailed(Context context, Intent intent) {
56         // TODO Auto-generated method stub
57         showToast(context, "设备管理:改变密码失败");
58     }
59 
60     @Override
61     public void onPasswordSucceeded(Context context, Intent intent) {
62         // TODO Auto-generated method stub
63         showToast(context, "设备管理:改变密码成功");
64     }
65 }

AndroidManifest.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.wangshibang.screenlock">
 4 
 5     <application
 6         android:allowBackup="true"
 7         android:icon="@mipmap/lock"
 8         android:label="@string/app_name"
 9         android:supportsRtl="true"
10         android:theme="@style/AppTheme">
11         <activity android:name=".Main"
12             android:label="@string/app_name"
13             android:theme="@android:style/Theme.NoDisplay">
14             <intent-filter>
15                 <action android:name="android.intent.action.MAIN" />
16                 <category android:name="android.intent.category.LAUNCHER" />
17             </intent-filter>
18         </activity>
19         <!-- 设备管理 -->
20         <receiver
21             android:name=".AdminReceiver"
22             android:label="ScreenLock"
23             android:permission="android.permission.BIND_DEVICE_ADMIN">
24             <meta-data
25                 android:name="android.app.device_admin"
26                 android:resource="@xml/lock_screen" />
27             <intent-filter>
28                 <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
29             </intent-filter>
30         </receiver>
31     </application>
32 
33 </manifest>

res文件夹下建一个xml文件夹,里面有个lock_screen.xml文件

lock_screen.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
 3     <uses-policies>
 4         <!-- 强行锁定  在里仅这个是需要的-->
 5         <force-lock />
 6         <!-- 清除所有数据(恢复出厂设置) -->
 7         <wipe-data />
 8         <!-- 重置密码 -->
 9         <reset-password />
10         <!-- 限制密码选择 -->
11         <limit-password />
12         <!-- 监控登录尝试 -->
13         <watch-login />
14     </uses-policies>
15 </device-admin>

最后是什么都没有的activity_main.xml文件

1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3     android:orientation="vertical" android:layout_width="match_parent"
4     android:layout_height="match_parent">
5 
6 </LinearLayout>

楼主才疏学浅,不喜勿喷

最后附上源码的链接:链接:http://pan.baidu.com/s/1i5x5s6x 密码:es42

posted @ 2016-11-08 16:17  雪山玉龙  阅读(505)  评论(0编辑  收藏  举报