zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Qt Quick实现的涂鸦程序
    Java并发学习之十九——线程同步工具之Phaser
    poj 1845(等比数列前n项和及高速幂)
    装饰模式(旧恋)
    cocos2d-x 3.1.1 学习笔记[3]Action 动作
    Nmap 源代码学习四 软件简单使用
    关于phpcmsv9更新缓存出现链接被重置的问题
    POJ 3159 Candies(SPFA+栈)差分约束
    Ubuntu 配置ISCSI服务
    iSCSI存储技术
  • 原文地址:https://www.cnblogs.com/wangyulong/p/6043484.html
Copyright © 2011-2022 走看看