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

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)、把下方官方文档给出的配置文件的代码复制到自己创建的工程里面:

复制过去发现报错了,因为三条描述属性信息没有配置,那么去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的文件,里面需要配置一些内容。把官方文档中的内容全部写入即可。
内容如下:

解决了报错问题。

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);
  }
 } 

}

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

一键运行之后如下:

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

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

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

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

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

(0)

相关推荐

  • Android应用程序转到后台并回到前台判断方法

    我们知道,当我们按返回或Home键退出应用程序的界面时,应用程序会在后台被挂起.这么设计的好处是,由于应用被系统缓存在内存中,那么在用户打开启动应用时就可以通过调用缓存,快速启动应用.当然,由于当今内存和处理器能力的限制,系统会自动关闭一些进程. 那么我如何判断这个应用程序在前台还是后台,应用从后台回到前台了? 看到一般都是runningProcess或者runningTasks来判断应用在前台还是后台 事实上,Android在SDK 14的时候提供了一个Callback.ActivityLif

  • Android仿百度谷歌搜索自动提示框AutoCompleteTextView简单应用示例

    本文实例讲述了Android仿百度谷歌搜索自动提示框AutoCompleteTextView简单应用.分享给大家供大家参考,具体如下: 现在我们上网几乎都会用百度或者谷歌搜索信息,当我们在输入框里输入一两个字后,就会自动提示我们想要的信息,这种效果在Android 里是如何实现的呢? 事实上,Android 的AutoCompleteTextView Widget ,只要搭配ArrayAdapter 就能设计同类似Google 搜索提示的效果. 本例子先在Layout 当中布局一个AutoCom

  • Android编程单选项框RadioGroup综合应用示例

    本文实例讲述了Android编程单选项框RadioGroup用法.分享给大家供大家参考,具体如下: 今天介绍的是RadioGroup 的组事件.RadioGroup 可将各自不同的RadioButton ,设限于同一个Radio 按钮组,同一个RadioGroup 组里的按钮,只能做出单一选择(单选题). 首先,我们先设计一个TextView Widget ,以及一个RadioGroup ,并将该RadioGroup 内放置两个RadioButton ,默认为都不选择,在程序运行阶段,利用onC

  • Docker 实现浏览器里开发Android应用的功能

    在浏览器里开发Android应用          这里需要用到Docker的知识, Che 发布后对Android应用开发多了一个工具,这里就对如何实现该功能就行详细介绍: Eclipse Che 最近Che发布了正式版,那我就介绍下在Che上开发Android吧-- 使用Che需要懂得一些Docker的知识,只需要一点点即可,因为Che是基于Docker的,所以了解Docker有助于理解Che的工作方式. 不废话,教程只有四步,开始. 第一步:部署docker服务器 我选择的是digital

  • Android入门教程之ListView的应用示例

    本文实例讲述了Android ListView的简单应用.分享给大家供大家参考,具体如下: 我们今天要讲的内容是Android中ListView中的实现.一共分为四个步骤,我将一一讲解: Step one:创建一个新的Android工程,命名为ListViewDemo. Step two:找到ListViewDemo.Java,把我们习惯的继承Activity,改成ListActivity,如下: public class ListViewDemo extends ListActivity St

  • Android应用 坐标系详细介绍

    Android 应用坐标系详解: 由于最近做Android项目需要用坐标系的知识,所以度娘了一下,整理了相关资料,记录下来. 1 背景 去年有很多人私信告诉我让说说自定义控件,其实通观网络上的很多博客都在讲各种自定义控件,但是大多数都是授之以鱼,却很少有较为系统性授之于渔的文章,同时由于自己也迟迟没有时间规划这一系列文章,最近想将这一系列文章重新提起来,所以就来先总结一下自定义控件的一个核心知识点--坐标系. 很多人可能不屑一顾Android的坐标系,但是如果你想彻底学会自定义控件,我想说了解A

  • Android编程基础之获取手机屏幕大小(DisplayMetrics应用)示例

    本文实例讲述了Android获取手机屏幕大小的方法.分享给大家供大家参考,具体如下: 这里主要用了三个对象TextView ,Button ,以及DisplayMetrics ,其中Displaymetrics 是取得手机屏幕大小的关键类,这个例子非常的简单,当我们点击按钮,触发事件,在TextView 里显示手机屏幕的宽高分辨率. 看一下效果图: 按钮触发前: 按钮触发后: 其中我们在res->layout->values->string.xml增加了两行如下: <string

  • Android编程之重力感应用法分析

    本文实例讲述了Android编程之重力感应用法.分享给大家供大家参考,具体如下: 重力感应主要是依靠手机的加速度传感器(accelerometer)来实现 在Android的开发中一共有八种传感器但是不一定每一款真机都支持这些传感器.因为很多功能用户根本不care的所以可能开发商会把某些功能屏蔽掉.还是得根据真机的实际情况来做开发,下面主要讨论加速度传感器的具体实现方式,传感器名称如下: 加速度传感器(accelerometer) 陀螺仪传感器(gyroscope) 环境光照传感器(light)

  • Android应用APP自动更新功能的代码实现

    由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必要给我们的Android应用增加自动更新的功能. 既然实现自动更新,我们首先必须让我们的应用知道是否存在新版本的软件,因此我们可以在自己的网站上放置配置文件,存放软件的版本信息: <update> <version>2</version> <name>baidu

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

    Device Administration 对于这个应用,市场上很多,但是看一下评论就知道效果有多差了,因为99%一键锁屏应用没办法卸载.今天就开发一个小应用,实现轻松点击一键锁屏,同时支持卸载... 通查看谷歌原文档,有设备管理器的API,从这里可以抽取一些代码,开发出一个小应用,即即将介绍的<一键锁屏>. 根据文档翻译,获取设备管理器的大致步骤如下: 1.创建类DeviceAdminReceiver的子类 如:com.itydl.lockscreen.DeviceAdminSample 2

  • Android实战教程第六篇之一键锁屏应用问题解决

    上一篇,初步开发了这个应用,功能都有了(见http://www.jb51.net/article/96992.htm 点击打开链接). 但是遗留了两个问题:1.还是无法卸载:2.必须手动去点击应用程序进入程序,再点击按钮,这显得很麻烦. 这一篇就解决上面两个问题,做出最好的效果. 首先解决无法卸载问题: 在清单文件中,再配置一键卸载的主活动(两个主活动无所谓,只不过在桌面上显示两个图标而已,其实仍然是一个应用) <activity android:name="com.itydl.locks

  • Android实战教程第十篇仿腾讯手机助手小火箭发射效果

    之前对系统自带的土司的源码做了简要分析,见博客:点击打开链接 这一篇给一个小案例,自定义土司,模拟腾讯卫士的小火箭发射.如果想要迅速看懂代码,建议先去看一下上篇介绍点击打开链接 首先,定义一个服务,在这个服务里面,完成土司的创建(小火箭布局创建),烟的效果属于动画播放,而且要依托一个activity.(这个activity要定义为透明状态) 定义烟的activity的布局文件 <?xml version="1.0" encoding="utf-8"?>

  • Android实战教程第四篇之简单实现短信发送器

    本文实例为大家分享了Android发短信功能的实现方法,供大家参考,具体内容如下 首先配置一个布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_

  • Android实战教程第八篇之短信备份

    各种手机助手里面都包含了短信备份这一项.短信的本分主要包含四项:内容body.事件date.方式type.号码address. 短信备份~一.使用一种很笨的方式来保存短信到xml文件中,而且保存在外部存储.后续会有:短信备份~二(xml序列化器):短信备份~三(内容提供者获取短信xml备份):短信备份~四(json方式备份数据库短信).备份的方式越来越高效,比较不同存储方式. 很显然,初次介绍短信备份,以一种简单笨拙的方式,且不涉及内容提供者,虚拟10条短信. 短信的保存,要以对象的形式保存.因

  • Android实战教程第七篇之如何在内存中存储用户名和密码

    本文实例为大家分享了Android内存中存储用户名和密码的方法,供大家参考,具体内容如下 首先是配置文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layo

  • Android实战教程第三篇之简单实现拨打电话功能

    本文实例为大家分享了Android打电话功能的实现代码,需要一个文本输入框输入号码,需要一个按钮打电话. 本质:点击按钮,调用系统打电话功能. xml布局文件代码:: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="m

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

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

  • android实现一键锁屏和一键卸载的方法实例

    前言 本文主要介绍了关于android实现一键锁屏和一键卸载的相关内容,分享出来供大家参考学习,这两个功能也是大家在开发中会遇到的两个需求,下面话不多说了,来一起看看详细的介绍吧. 一.设备管理器操作步骤 1.创建类DeviceAdminReceiver的子类 如:com.itheima62.lockscreen.DeviceAdminSample 2.在清单文件中配置广播接收者 <receiver android:name="com.itheima62.lockscreen.Device

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

    Android程序之一键锁屏 (1)布局文件activity_main.xml如下: <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

随机推荐