转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47010177
把应用程序升级为拥有系统管理员权限。写一个广播接收者,给该广播接收者去申请系统管理员的权限,让操作系统给广播接收者授权。(激活系统的授权组件)。在此,本人主要通过申请应用系统管理员权限,锁屏,设置密码,恢复出厂设置几个方面来简单介绍Android中如何给一个应用申请系统管理员的权限操作。其中,这些主要的功能都是通过Android提供的一个类来完成的,这个类就是DevicePolicyManager,有关这个类的详细说明,大家可以参考Android的官方文档,在此,我就不过多阐述了。下面,我们一起来看看如何实现这些功能呢?
在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>这个文件中主要定义了一些要获取的系统管理员权限
这个布局文件中有一个按钮,在按钮的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>
这个类不同于普通的广播接收者,它需要继承DeviceAdminReceiver,有关DeviceAdminReceiver的详细说明,大家可以参考Android的官方文档。
具体实现如下
package com.lyz.local.screen.activity; import android.app.admin.DeviceAdminReceiver; /** * 广播接收者 * @author liuyazhuang * */ public class MyAdmin extends DeviceAdminReceiver { }
在这个类中,主要实现了页面按钮的点击事件,在这个点击事件中,通过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); } } }
最后不要忘了在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>
1、展示应用授权管理员权限
2、点击锁屏
3、输入密码
4、卸载应用出现的问题即解决方法
温馨提示:大家可以到链接http://download.csdn.net/detail/l1028386804/8924361获取完整Android示例代码
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/l1028386804/article/details/47010177