android12.0(S) DeviceOwner 应用默认授权(MDM 权限)

news2024/9/22 1:16:01

MDM(Mobile Device Manager) 通俗来讲就是管理设备使用

国内 MDM 服务商有 360 等

国外 MDM 服务商有 hexnode 等

当你在设备上配置了 DeviceOwner 后,状态栏下拉中会多出如下

pSkYOYT.png

关于 DeviceOwner 介绍可参考下面

Android DeviceOwner 应用的能力

Android Device Administration 应用的能力

开整

接下来我们自己写一个 MDM apk,打开 AS 新建一个工程,就叫 DeviceOwnerDemo,包名 cn.test.deviceownerdemo

1、写一个类继承 DeviceAdminReceiver,空实现就行

public class TestDeviceAdminReceiver extends DeviceAdminReceiver {
    @Override
    public void onReceive(@NonNull Context context, @NonNull Intent intent) {
        super.onReceive(context, intent);
        String action = intent.getAction();
        Log.e("TestDeviceAdminReceiver","action="+action);
        //action=android.app.action.DEVICE_ADMIN_ENABLED
    }
}

2、在 AndroidManifest.xml 中配置 DeviceAdminReceiver,固定写法直接 copy

<receiver
	android:name=".TestDeviceAdminReceiver"
	android:permission="android.permission.BIND_DEVICE_ADMIN">

	<intent-filter>
		<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
		<action android:name="android.app.action.PROFILE_PROVISIONING_COMPLETE" />
	</intent-filter>

	<meta-data
		android:name="android.app.device_admin"
		android:resource="@xml/device_admin" />
</receiver>

3、新增 device_admin.xml 配置 DeviceAdminReceiver 支持功能

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
        <encrypted-storage />
        <disable-camera />
        <limit-password />
        <expire-password />
        <disable-keyguard-features />
    </uses-policies>
</device-admin>

这样一个最简单的 MDM 应用就完成了,接下来就需要激活权限

DeviceAdmin 权限

pSkNaxe.png

通过 app 申请,先手动授权

		DevicePolicyManager mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName testDeviceAdmin = new ComponentName(this, TestDeviceAdminReceiver.class);
        boolean adminActive = mDPM.isAdminActive(testDeviceAdmin);
        if (!adminActive){
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, testDeviceAdmin);
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "");
            startActivityForResult(intent, REQUEST_ACTIVATE);
        }

DeviceOwner 权限,通过 adb 设置

adb shell dpm set-device-owner cn.test.deviceownerdemo/.TestDeviceAdminReceiver

4、接下来就可通过刚刚 mDPM 操作设备配置,比如禁用系统状态栏

	DevicePolicyManager mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
    ComponentName testDeviceAdmin = new ComponentName(this, TestDeviceAdminReceiver.class);
	if(mDPM.isAdminActive(testDeviceAdmin)){
		mDPM.setStatusBarDisabled(testDeviceAdmin, false);
	}

使用上搞清楚了,接下来我们就来修改源码了,一般 MDM apk 都是客户提供的,都需要预装到系统中且默认授权

实际上重要的就两个 xml 文件 device_owner_2.xml device_policies.xml

当你手动授权成功后,在设备 /data/system/ 目录下就有这两文件,所以我们可以将两个 xml 预制到系统中

data 分区下预制文件,开机会无法启动,所以我们曲线救国,先将文件放到 system 下,系统起来后在 init.rc 执行 copy

注意 xml 文件中的 package 和 name 对应你实际的 MDM 包名

system/extras/su/device_owner_2.xml

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<root>
<device-owner package="cn.test.deviceownerdemo" name="" component="cn.test.deviceownerdemo/cn.test.deviceownerdemo.TestDeviceAdminReceiver" userRestrictionsMigrated="true" canAccessDeviceIds="true" />
<device-owner-context userId="0" />
</root>

system/extras/su/device_policies.xml

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<policies setup-complete="true" provisioning-state="3">
<admin name="cn.test.deviceownerdemo/cn.test.deviceownerdemo.TestDeviceAdminReceiver">
<policies flags="991" />
<strong-auth-unlock-timeout value="0" />
<test-only-admin value="true" />
<user-restrictions no_add_managed_profile="true" />
<default-enabled-user-restrictions>
<restriction value="no_add_managed_profile" />
</default-enabled-user-restrictions>
<cross-profile-calendar-packages />
</admin>
<lock-task-features value="16" />
</policies>

device/mediateksample/k67v1_64_bsp/device.mk

PRODUCT_COPY_FILES += \
        system/extras/su/device_policies.xml:system/device_policies.xml \
        system/extras/su/device_owner_2.xml:system/device_owner_2.xml

system/core/rootdir/init.rc

 
    copy /system/device_policies.xml /data/system/device_policies.xml 
    chmod 0600 /data/system/device_policies.xml
    chown system system /data/system/device_policies.xml
    copy /system/device_owner_2.xml /data/system/device_owner_2.xml 
    chmod 0600 /data/system/device_owner_2.xml
    chown system system /data/system/device_owner_2.xml

这样烧写后,MDM apk 就默认拥有 DeviceOwner 权限了,DeviceAdmin 权限可以通过

hide 方法 DevicePolicyManager.setActiveAdmin(@NonNull ComponentName policyReceiver, boolean refreshing, int userHandle)

随便找个系统应用,Settings 里加一下就行

参考文章

设置客户app为设备管理者 android9.0 效果如同adb shell dpm set-device-owner

一键设置 DeviceAdmin/ProfileOwner/DeviceOwner 应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

品牌舆情监测系统简介,品牌舆情监测及应对方案?

品牌舆情监测是指通过观察和分析互联网和社交媒体上关于企业、产品或服务的信息&#xff0c;以了解消费者对企业、产品或服务的看法和感受。品牌舆情监测可以帮助企业了解消费者对企业、产品或服务的反馈&#xff0c;从而改进产品和服务&#xff0c;提高客户满意度。品牌舆情监…

【4.3】Ribbon饥饿加载

【4.3】Ribbon饥饿加载1 测试2 饥饿加载2.1 修改加载策略3 Ribbon负载均衡总结1 测试 重启Order服务&#xff0c;回到浏览器&#xff0c;打开浏览器的控制台&#xff0c;发起一次请求&#xff1a; 可以看到这次请求的耗时达到了390ms 再刷新一次&#xff1a; 可以看到这次时…

谷粒学院——第二十章、权限管理

一、权限管理需求描述 不同角色的用户登录后台管理系统拥有不同的菜单权限与功能权限&#xff0c;权限管理包含三个功能模块&#xff1a;菜单管理、角色管理和用户管理 1、菜单管理 &#xff08;1&#xff09;菜单列表&#xff1a;使用树形结构显示菜单列表 &#xff08;2&…

故障分析 | MySQL 主从延时值反复跳动

作者&#xff1a;徐文梁 爱可生DBA成员&#xff0c;负责客户项目的需求和维护。目前在数据库新手村打怪升级中。喜欢垂钓&#xff0c;如果你也喜欢垂钓&#xff0c;可以约个晴好天气&#xff0c;咱们一边钓鱼一边聊聊数据库&#xff0c;岂不快哉。 本文来源&#xff1a;原创投稿…

idea常用配置及问题解决

文章目录一、配置1.字体与行高2.快捷键(eclipse)3.Git配置4.添加Github账户5.设置字符集:UTF-86.设置自动编译7.顶部工具栏左侧显示8.配置.gitignore文件9.忽略、不显示文件10.显示包的层级结构(树结构)11.修改 Generate 快捷键12.设置代码提示忽略大小写13.去除pom.xml中依赖的…

【Go】入门Go语言

【Go】入门Go语言 前言 Go这门语言在当下已经越来越火热了&#xff0c;无论是后端开发岗&#xff0c;还是逆向安全岗位&#xff0c;亦或是渗透领域&#xff0c;乃至脚本小子…各个领域的人员都在分Go这一杯羹。 并且在最近越来越多的CTF比赛中&#xff0c;Go逆向、Go pwn&am…

idea配置maven步骤及常见问题

idea 配置maven步骤及常见问题maven 下载maven的配置配置系统环境变量maven本地仓库配置和镜像加速idea 中配置maven的设置常见问题&#xff0c;每次新建项目需要重新手动配置maven的解决maven 下载 首先&#xff0c;进入它的官网&#xff1a;链接: https://maven.apache.org/…

Find My资讯|被盗的AirPods通过苹果Find My找回并抓到盗窃者

美国一位盗窃案的受害者&#xff0c;他在圣安东尼奥莱昂谷的家中发现有人偷走了他的汽车后决定亲手将小偷捉住。打开Find My&#xff0c;他看到其中被拿走的AirPods显然是停在35号州际公路上的一个旅行站。在前往该站并发现一辆SUV里有五个人后&#xff0c;阿林顿打电话给警察寻…

谷粒学院——第二十二章、Jenkins可持续自动部署

一、安装内容 Jenkins&#xff08;本文主要安装&#xff09;、Maven、Git、JDK Jenkins与Github配合实现持续集成需要注意以下几点&#xff1a; ①Jenkins要部署到外网&#xff0c;因为内网Github是无法访问到的&#xff08;走过的坑&#xff01;&#xff09;&#xff0c;这里…

Usaco Training 刷怪旅 第三层 第六题:Ski Course Design

说实话&#xff0c;一开始看上一题的时候觉得太恶心就先来做这道&#xff0c;所以这题其实比上一题早做出来&#xff08;&#xff09; Farmer John has N hills on his farm (1 < N < 1,000), each with an integer elevation in the range 0 .. 100. In the winter, sin…

MVC MVVM架构

注&#xff1a;个人理解仅供参考1、MVC优点&#xff1a;1、模块独立&#xff0c;解耦缺点&#xff1a;1、厚重的ViewController2、遗失&#xff08;无处安放&#xff09;的网络逻辑3、较差的可测试性图2、MVVM优点1、低耦合&#xff1a;View可以独立于Model变化和修改&#xff…

【HybirdCLR】入门记录-Unity2021 + WebGL

目录前言环境案例学习先PC平台试一下转为WebGL平台动手做一个demo功能基本工作流程搭建环境构建项目补充致谢参考资料前言 之前一直有听说热更新技术&#xff0c;于是找点时间来研究一下热更新技术的使用。热更新的实现方式有很多种&#xff0c;这里笔者记录一下自己学习Hybir…

基于开源体系的云原生微服务治理实践与探索

作者&#xff1a;董艺荃&#xff5c;携程服务框架负责人 携程微服务产品的发展历程 携程微服务产品起步于 2013 年。最初&#xff0c;公司基于开源项目 ServiceStack 进行二次开发&#xff0c;推出 .Net 平台下的微服务框架 CServiceStack。 2014 年&#xff0c;公司推出 Jav…

【PhD Debate —11】矛与盾的对决——神经网络后门攻防

点击蓝字关注我们AI TIME欢迎每一位AI爱好者的加入&#xff01;2022年7月9日&#xff0c;AI TIME组织了Ph.D. Debate第十一期&#xff0c;题为“矛与盾的对决——神经网络后门攻防”的研讨活动&#xff0c;特别邀请了宾夕法尼亚州州立大学电子工程系博士生向臻、清华大学博士生…

区块链基础知识(一)

参考书籍《区块链原理、设计与应用》 基本原理 比特币网络工作流程 技术的演化与分类 分布式共识 交易性能 扩展性问题 数据库和存储系统 数据库也是区块链中重要的一环 分布式系统核心问题 单节点结构演变为分布式系统&#xff0c;首先遇到的问题就是一致性的保障。 一致性问…

小程序开发经验分享(5)-全屏展示小程序

小程序的 navigationBar,有APP开发经验的同学应该知道,navigationBar也就是程序最顶部的一条,我们同常的开发页面,也都是在navigationBar下方的主体区用标签开发UI部分 如下面两个图片,左边的翻译君官方小程序中上面就有这样一个navigationBar用于展示自己的title和菜单按…

K8s 认证工程师 CKA 考题分析和题库练习(下)

目录 10、考核知识&#xff1a;检查可用节点数量 题目内容 题目内容中文解释 做题解答 11、考核知识&#xff1a;一个 Pod 封装多个容器 题目内容 题目内容中文解释 官方文档搜索关键字&#xff1a;pod ​编辑做题解答 12、考核知识&#xff1a;持久卷 PersistentV…

Mac M1芯片 搭建RocketMQ

Mac M1芯片 搭建RocketMQ RocketMQ需要启动三个组件 1、nameserver 路由中心,为整个MQ集群提供服务协调与治理 2、broker 提供消息的转发和存储功能 3、console 控制台面板工具 1、下载RocketMQ https://rocketmq.apache.org/dowloading/releases/ 选择 Binary: rocketmq-all-4…

对外投资追踪汇率数据金融开放指数

一、2005-2020年中国全球投资追踪数据 “中国全球投资跟踪”&#xff08;China Global Investment Tracker&#xff09;数据库&#xff0c;由美国企业研究所于1月28日发布。该数据库是唯一一套涵盖中国全球投资和建设的综合数据集&#xff0c;同时使用分别记录和汇总记录两种方…

这几个算法可视化网站,太牛了!

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/Tyson0314/Java-…