转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47010177 

把应用程序升级为拥有系统管理员权限。写一个广播接收者,给该广播接收者去申请系统管理员的权限,让操作系统给广播接收者授权。(激活系统的授权组件)。在此,本人主要通过申请应用系统管理员权限,锁屏,设置密码,恢复出厂设置几个方面来简单介绍Android中如何给一个应用申请系统管理员的权限操作。其中,这些主要的功能都是通过Android提供的一个类来完成的,这个类就是DevicePolicyManager,有关这个类的详细说明,大家可以参考Android的官方文档,在此,我就不过多阐述了。下面,我们一起来看看如何实现这些功能呢?

1、创建my_admin.xml文件

在Android工程的res目录下新建xml目录,在xml目录下新建my_admin.xml文件

具体实现如下:

<?xml version="1.0" encoding="utf-8"?><device-admin xmlns:android="http://schemas.android.com/apk/res/android">        <uses-policies>                <limit-password />                <watch-login />                <reset-password />                <force-lock />                <wipe-data />        </uses-policies></device-admin>
这个文件中主要定义了一些要获取的系统管理员权限

2、创建布局文件

这个布局文件中有一个按钮,在按钮的onClick事件中实现相应的功能

具体实现如下:

<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=".MainActivity" >    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="onClick"        android:text="锁屏" /></RelativeLayout>

3、定义广播接收者MyAdmin

这个类不同于普通的广播接收者,它需要继承DeviceAdminReceiver,有关DeviceAdminReceiver的详细说明,大家可以参考Android的官方文档。

具体实现如下

package com.lyz.local.screen.activity;import android.app.admin.DeviceAdminReceiver;/** * 广播接收者 * @author liuyazhuang * */public class MyAdmin extends DeviceAdminReceiver {}

4、完善MainActivity

在这个类中,主要实现了页面按钮的点击事件,在这个点击事件中,通过DevicePolicyManager类实现相应的操作

具体代码如下:

package com.lyz.local.screen.activity;import android.os.Bundle;import android.app.Activity;import android.app.admin.DevicePolicyManager;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.view.Menu;import android.view.View;/** * 程序入口 * @author liuyazhuang * */public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public void onClick(View v){//获取系统管理权限DevicePolicyManager devicePolicyManager = (DevicePolicyManager) this.getSystemService(Context.DEVICE_POLICY_SERVICE);//申请权限ComponentName componentName = new ComponentName(this, MyAdmin.class);//判断该组件是否有系统管理员的权限boolean isAdminActive = devicePolicyManager.isAdminActive(componentName);if(isAdminActive){//锁屏devicePolicyManager.lockNow();//重置密码devicePolicyManager.resetPassword("123", 0);//恢复出厂设置(建议不要真机测试)devicePolicyManager.wipeData(0);}else{Intent intent = new Intent();//指定动作intent.setAction(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);//指定给哪个组件授权intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);startActivity(intent);}}}

5、注册BroadReceiver

最后不要忘了在AndroidManifest.xml中注册BroadReceiver

具体实现如下:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.lyz.local.screen.activity"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="18" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.lyz.local.screen.activity.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"><meta-data android:name="android.app.device_admin"android:resource="@xml/my_admin" /><intent-filter><action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /></intent-filter></receiver>    </application></manifest>

6、运行效果

1、展示应用授权管理员权限

Android之——申请应用系统管理员权限_第1张图片

2、点击锁屏

Android之——申请应用系统管理员权限_第2张图片

3、输入密码

Android之——申请应用系统管理员权限_第3张图片

Android之——申请应用系统管理员权限_第4张图片

4、卸载应用出现的问题即解决方法

Android之——申请应用系统管理员权限_第5张图片

Android之——申请应用系统管理员权限_第6张图片

Android之——申请应用系统管理员权限_第7张图片

Android之——申请应用系统管理员权限_第8张图片

Android之——申请应用系统管理员权限_第9张图片

Android之——申请应用系统管理员权限_第10张图片

Android之——申请应用系统管理员权限_第11张图片

温馨提示:大家可以到链接http://download.csdn.net/detail/l1028386804/8924361获取完整Android示例代码

更多相关文章

  1. Android调用系统相册或拍照实现头像更换
  2. Android 文件系统的结构
  3. [Android--Structure]App系统权限permission与安全security
  4. Android系统服务详解-android学习之旅(95)
  5. Android 使用反射机制获取或设置系统属性(SystemProperties)

随机推荐

  1. 在Servlet和HTML页面之间处理函数调用和
  2. Javascript构造函数有什么意义?
  3. 从javascript写入div
  4. 将数据从AJAX请求序列化到PHP
  5. iframe操作、调用父页面元素或js函数
  6. 如何让Require.js获取一个不以`.js`结尾
  7. 饿了么大前端 Node.js 进阶教程
  8. 如何使用显示滚动内容?
  9. 这种解决Fizzbuzz挑战的方式是什么?
  10. 子窗体传值给父窗体