Android之——申请应用系统管理员权限

转载请注明出处: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 {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	@Override
	public 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示例代码

你可能感兴趣的:(android,权限)