Android设备管理器,DeviceAdmin应用设置(代码方式,无需跳转系统界面用户点击激活)

2 篇文章 0 订阅
2 篇文章 1 订阅

我们有时候会用到DeviceAdmin权限,一般来说,需要用户手动到设备管理器里面激活应用,也可以APP通过startActivity的方式跳转到激活页面,这两个都需要用户手动点击激活,其实DevicePolicyManager本身有提供setActiveAdmin这个方法设置设备管理器应用的,不过这个方法是隐藏方法并且需要system权限

下面提供一种代码方式直接激活设备管理器的方式

必要条件

1.系统签名

2.uid 设置成 android.uid.system

代码如下

  private void mRefSetActiveAdmin(ComponentName policyReceiver, boolean refreshing) {
        DevicePolicyManager dpm  = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE)
        Class<?> refDPM = dpm.getClass();
        try {
            Method[] methods = refDPM.getDeclaredMethods();
            Method refSetActiveAdmin  = null;
            for (Method method : methods) {
                if(method.getName().equals("setActiveAdmin")){
                    if(method.getParameterTypes().length == 2){
                        refSetActiveAdmin = method;//Tips 为什么要用遍历的方式获取,因为用普通的参数类型方式无法获取到,这个情况遇到很多次了,明明包含该方法但就是无法获取到,有大神可以解释一下么。
                        break;
                    }

                }
            }

            refSetActiveAdmin.setAccessible(true);
            refSetActiveAdmin.invoke(dpm, policyReceiver, refreshing);
        }  catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

使用方式

        ComponentName componentName = new ComponentName(this, DeviceReceiver.class);//DeviceReceiver是admin类继承了DeviceAdminReceiver
        mRefSetActiveAdmin(componentName, false);

以上就可以激活指定的设备管理器Admin

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值