Android应用程序申请系统管理员权限
16lz
2021-01-26
Android应用程序申请系统管理员权限
ONE Goal, ONE Passion !
一些操作比如: 自动锁屏.清除数据.等都需要获取系统管理员权限才能够操作.那么怎么才能获得管理员权限呢?
程序向获得系统管理员权限步骤:
- 1, 声明一个广播接受者MyPolicyReceiver继承DeviceAdminReceiver.(MyPolicyReceiver继承至BroadcastReceiver)
- 2,为这个广播接受者做特殊的配置
- 2.1 声明一些需要的管理员权限(策略集)
- 3,使用DevicePolicyManager类去操作比如:锁屏,清空数据
第一步:声明一个广播接受者
/** * 广播接收者. 去申请管理员权限. 这个广播接收者需要在清单文件中做一些特殊的配置 * * @string /app_name" 给用户的描述 * android:label="@string/app_name" 设备管理器中显示的应用标题名 * android:permission="android.permission.BIND_DEVICE_ADMIN"> 需要申请的权限 * @xml/policy"/> policy.xml中为所声明的设备管理员权限 * * * 监听改频段的广播 * * * * @author * */ public class MyPolicyReceiver extends DeviceAdminReceiver { }
第二步:清单文件中配置
<receiver android:name="com.example.policy.MyPolicyReceiver" android:description="@string/app_name" android:label="@string/app_name" android:permission="android.permission.BIND_DEVICE_ADMIN" > <meta-data android:name="android.app.device_admin" android:resource="@xml/policy" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> intent-filter> receiver>
2.1声明一些需要的管理员权限(策略集)
在src/xml/pilicy.xml下:
<?xml version="1.0" encoding="UTF-8"?> <device-admin xmlns:android="http://schemas.android.com/apk/res/android" > <uses-policies> <force-lock /> <limit-password /> <watch-login /> <reset-password /> <wipe-data /> uses-policies> device-admin>
第三步:使用获得的管理员权限做一些操作
public class MainActivity extends Activity { /** * 设备管理员 */ private DevicePolicyManager mDPM; /** * 四大组件名的封装类 */ private ComponentName mConmp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 1, 获取设备管理员 mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); // 2, 申请权限 mConmp = new ComponentName(this, MyPolicyReceiver.class); } // 点击按钮去锁屏 public void policy(View v) { // 判断是否获得管理员权限啊 boolean active = mDPM.isAdminActive(mConmp); if (active) { // 已经获取管理员权限可以锁屏 System.out.println("--已经获取管理员权限--"); mDPM.lockNow(); // 解锁时要输入123才能解锁 mDPM.resetPassword("123", 0); } else { // 没有管理员权限---启动系统activity让用户激活管理员权限 Intent intent = new Intent( DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mConmp); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "只有激活了管理员权限才能锁屏,清理缓存"); startActivityForResult(intent, 0); } } }
激活权限有两种方式:
第一种: 直接进入到设置—-安全—设备管理器.点击激活.
前提是已经完成了,申请权限的前2步.
如图:
第二种: 直接使用代码去激活.
// 没有管理员权限---启动系统activity让用户激活管理员权限 Intent intent = new Intent( DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mConmp); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "只有激活了管理员权限才能锁屏,清理缓存"); startActivityForResult(intent, 0);
执行激活的代码后会出现下图所示:
点击激活即可. 只有激活了权限才能成为系统管理员.
注: 异常
08-27 09:00:53.332: E/AndroidRuntime(1906): Caused by: java.lang.SecurityException: No active admin owned by uid 10089 for policy #3
如果报类似的异常是因为没有激活管理员权限.或者是相应的锁屏,清理缓存等权限没有被申请.(最稳妥做法就是在策略集中把所有的权限都申请).
更多相关文章
- Android(安卓)Fragment 申请权限 onRequestPermissionsResult 不
- Android(安卓)需要动态申请的权限以及EasyPermission 的使用
- Content Provider使用方法以及Android运行时权限申请
- Android(安卓)Map 申请Debug Key的方法
- android 6.0 以上 动态申请多个权限
- Flutter开发之动态权限
- Android高效处理权限——EasyPermissions框架的使用
- 个人自制unity插件"android动态权限自动申请"的用法
- launchMode之的几种取值