轻松实现Android锁屏功能

锁屏需要引入设备超级管理员。在文档Android开发文档的Administration中有详细的说明。Android设备管理系统功能和控制访问。

主要有一下几个步骤:

1  创建广播接收者,实现DeviceAdminReceiver

package com.andy.lockscreen; 

import android.app.admin.DeviceAdminReceiver; 

/**
 * @author Zhang,Tianyou
 * @version 2014年11月20日 下午9:51:42
 *
 * 特殊的广播接受者 接收 管理员权限广播
 */ 

public class MyAdmin extends DeviceAdminReceiver{ 

}

2 在清单文件中注册该广播(不同普通的广播,需按照说明格式):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.andy.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=".MainActivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" /> 

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

     <receiver
      android:name=".MyAdmin"
      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>

3 在res下创建xml文件夹,创建对应的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-camera />
 </uses-policies>
</device-admin>

4 在values文件下string.xml添加

<string name="sample_device_admin_description">用户管理员的描述信息</string>
<string name="sample_device_admin">设置管理权限</string>

5 界面文件:

<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"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context="com.andy.lockscreen.MainActivity" > 

   <Button
    android:onClick="openAdmin"
    android:layout_alignParentTop="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="开启管理员权限" /> 

  <Button
    android:onClick="lockcreen"
    android:layout_centerInParent="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="一键锁屏" /> 

  <Button
    android:onClick="uninstall"
    android:layout_alignParentBottom="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="卸载锁屏" />
</RelativeLayout> 

6 实现锁屏和开启设备管理员权限,卸载文件

package com.andy.lockscreen; 

import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast; 

public class MainActivity extends Activity { 

  /**
   * 设备策略服务
   */
  private DevicePolicyManager dpm; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
  } 

  /**
   * 锁屏
   *
   * @param view
   */
  public void lockcreen(View view) {
    ComponentName who = new ComponentName(this, MyAdmin.class);
    // 判断是否已经开启管理员权限
    if (dpm.isAdminActive(who)) {
      // 锁屏
      dpm.lockNow();
      // 设置屏幕密码 第一个是密码 第二个是附加参数
      dpm.resetPassword("123", 0); 

      // 清楚数据
      // WIPE_EXTERNAL_STORAGE 清楚sdcard的数据
      // 0 恢复出厂设置
      //dpm.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);
    } else {
      // 如果为未开启 提示
      Toast.makeText(MainActivity.this, "请先开启管理员权限!", Toast.LENGTH_SHORT)
          .show();
    }
  } 

  /**
   * 代码开启管理权限
   *
   * @param view
   */
  public void openAdmin(View view) {
    // 创建一个Intent 添加设备管理员
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    // 激活MyAdmin广播接收着
    ComponentName who = new ComponentName(this, MyAdmin.class); 

    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, who);
    // 说明用户开启管理员权限的好处
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
        "开启可以一键锁屏,防止勿碰");
    startActivity(intent); 

    Toast.makeText(MainActivity.this, "管理员权限已开启!", Toast.LENGTH_SHORT).show();
  } 

  /**
   * 卸载当前的软件 设备管理数据特殊应用 所以不能普通卸载
   */ 

  public void uninstall(View view) {
    // 1. 先清除管理员权限
    ComponentName who = new ComponentName(this,
        MyAdmin.class);
    dpm.removeActiveAdmin(who); 

    // 2. 普通应用的卸载
    Intent intent = new Intent();
    intent.setAction("android.intent.action.VIEW");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.setData(Uri.parse("package:"+getPackageName()));
    startActivity(intent); 

  } 

} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android编程实现的一键锁屏程序详解

    本文实例讲述了Android编程实现的一键锁屏程序.分享给大家供大家参考,具体如下: 据笔者了解,所有的Android手机都用电源键来手动锁屏.笔者使用手机时,一天之内手动锁屏的次数绝对不少于30次.如果都用电源键来进行的话,那么电源键的使用寿命一定不会长久. 虽然现在有很多的桌面软件都集成了一键锁屏,但是要安装这些软件就必须安装它们的其他组件,这点让人很不爽,因为他们会定期自动更新,或者在后台运行一些我不想要的东西.所以我决定自己写一个锁屏程序. 经过在android开发文档里面的查找,我发现

  • Android实现屏幕锁定源码详解

    最近有朋友问屏幕锁定的问题,自己也在学习,网上找了下也没太详细的例子,看的资料书上也没有有关屏幕锁定程序的介绍,下个小决心,自己照着官方文档学习下,现在做好了,废话不多说,先发下截图,看下效果,需要注意的地方会加注释,有问题的朋友可以直接留言,我们共同学习交流,共同提高进步!直接看效果图: 一:未设置密码时进入系统设置的效果图如下: 二:设置密码方式预览: 三:密码解密效果图 四:九宫格解密时的效果图 下面来简单的看下源码吧,此处讲下,这个小DEMO也是临时学习下的,有讲的不明白的地方请朋友直接

  • Android编程之自定义锁屏实例分析

    本文实例讲述了Android编程之自定义锁屏.分享给大家供大家参考,具体如下: 花了半天时间研究下了自定义锁屏,发现其实实现并不是很神秘.不过有些地方还是值得注意. 首先说流程,锁屏界面一般是在关闭屏幕时启用,打开屏幕时展现在我们面前,所以我们知道了锁屏的时机,恰好屏幕开关会发出相应的广播,所以我们也可以像系统一样捕获到屏幕开关的事件. 广播对应的两个action 引用 android.intent.action.SCREEN_ON android.intent.action.SCREEN_OF

  • android禁止锁屏保持常亮(示例代码)

    在播放video的时候在mediaplayer mMediaPlayer.setScreenOnWhilePlaying(true); 已经设置了,在原生的android没有问题和在defy上也没有问题,一到三星的galaxy上就有问题,不知道三星他们改了哪些地方.一般的话设置了播放视频屏幕没有自动.但是在三星上就出了问题. 只好再找找.一般的话设置有两种方法. 如下: 复制代码 代码如下: 1. getWindow().addFlags(WindowManager.LayoutParams.F

  • Android唤醒、解锁屏幕代码实例

    解锁.唤醒屏幕用到KeyguardManager,KeyguardLock,PowerManager,PowerManager.WakeLock   所需权限: 复制代码 代码如下: <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /&

  • Android系统永不锁屏永不休眠的方法

    开发Android程序时,有时候在程序运行的时候,不能让系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠,有两种方式:        一种是添加权限,              一种是代码中设置, 建议使用第一种方式,这样,在安装程序的时候会进行提醒: 第一种方式: 在Manifest.xml文件里面用user-permission声明 名称为:android.permission.WAKE_LOCK 第二种方式: getWindow().setFlags(WindowManager.L

  • Android屏幕锁屏弹窗的正确姿势DEMO详解

    在上篇文章给大家介绍了Android程序开发仿新版QQ锁屏下弹窗功能.今天通过本文给大家分享android锁屏弹窗的正确姿势. 最近在做一个关于屏幕锁屏悬浮窗的功能,于是在网上搜索了很多安卓屏幕锁屏的相关资料,鉴于网上的资料比较零碎,所以我在这里进行整理总结.本文将从以下两点对屏幕锁屏进行解析: 1. 如何监听系统屏幕锁屏 2. 如何在锁屏界面弹出悬浮窗 如何监听系统屏幕锁屏 经过总结,监听系统的锁屏可以通过以下两种方式: 1) 代码直接判定 2) 接收广播 1) 代码直接判定 代码判断方式,也

  • Android开发实现消除屏幕锁的方法

    本文实例讲述了Android开发实现消除屏幕锁的方法.分享给大家供大家参考,具体如下: 实现屏幕无锁--->当我们开机或者超过锁屏幕时间或按电源键之后屏幕没有锁的一种状态. 经过查询许多资料以及分析代码,我们可以发现最主要的屏幕功能还是在framework/base/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java中. 里面有一个handleshow方法: 真正的去锁屏实现有一个 handlehide方法,

  • Android如何实现锁屏状态下弹窗

    前言 想在锁屏上面实现弹窗,第一个想法就是利用 WindowManager 设置 Window 的 Flag,通过设置 Flag 的显示优先级来让窗口显示在锁屏的上面. 接下来就是试验可能相关的 Window Type 属性,验证该方案是否可行. 在尝试各个 Window Type 属性之前需要明确各个 Type 所需要的权限,下面是 com.android.internal.policy.impl.PhoneWindowManager.checkAddPermission 的源码: publi

  • Android编程实现一键锁屏的方法

    本文实例讲述了Android编程实现一键锁屏的方法.分享给大家供大家参考,具体如下: 这里要用到下面两个类: DeviceAdminReceiver 设备管理组件.这个类提供了一个方便解释由系统发出的意图的动作.你的设备管理应用程序必须包含一个DeviceAdminReceiver的子类.本程序中,就代表一个手机上的设备管理器. DevicePolicyManager 一个管理设备上规范的类. 大多数客户端必须声明一个用户当前已经启用的DeviceAdminReceiver. 这个DeviceP

随机推荐