当前位置: 首页 > 知识库问答 >
问题:

我的应用程序如何在非根设备上访问管理员级别权限?

蓝逸仙
2023-03-14

Android需要超级用户来删除、修改或读取根目录中的任何内容,但系统是只读的。

但是,我注意到,即使没有根设备,一些应用程序也能够利用这些进程。例如,Norton能够在非根手机上执行设备擦除。是否有方法授予我的应用程序类似的访问权限?

共有1个答案

微生耘豪
2023-03-14

具有管理员权限的应用程序可以使用设备管理API。此API提供擦除设备的能力。

使用这个,它不需要任何超级用户权限,它只需要设备管理员权限。

要总结如何使用设备管理API,请执行以下步骤:

  1. 您需要一个声明应用程序所需策略的资源文件
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <wipe-data />
  </uses-policies>
</device-admin>

您需要实现一个DeviceAdminReceiver来对应用程序感兴趣的各种管理事件做出反应。(如果您只对擦除设备感兴趣,一个空的实现就足够了)(关于如何设置此接收器的更多细节:这里)

您需要BIND_DEVICE_ADMIN权限

在某个时刻(可能是在启动时),您的应用程序必须触发ACTION_ADD_DEVICE_ADMIN,请求用户向您的应用程序授予“设备管理权限”。(一旦这些权限被授予,就没有理由再请求它们。用户始终可以从设置应用程序中取消授予这些权限)

当您的设置正确时(并且如果用户授予您的应用程序设备管理权限),您可以调用DevicePolicyManager:

DevicePolicyManager devicePolicyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
devicePolicyManager.wipeData(0);

请注意,不能卸载具有设备管理员权限的应用程序。用户需要手动删除这些权限(使用设置应用程序),然后才能卸载它。

 类似资料:
  • 我试图建立一个基于libSuperuser的应用程序。我的设备是根,但我有两个问题: 1) 在出口我的apk后,出于某种原因,它正在索取证书。我需要导出对根设备没有意义的应用程序签名。如果设备已根目录,为什么需要签名? 2) 运行应用程序时,我检查应用程序是否具有调用Shell的root权限。苏。available()在libsuperuser中可用,返回“false”。这意味着该应用程序没有ro

  • 我正在开发一个android应用程序。我想从扎根设备中保存我的应用程序。我成功地限制了我的应用程序与根设备,但一个根设备有magisk应用程序,所以在这个magis应用程序的帮助下,用户可以打开我的应用程序在根设备也。有人能帮我吗?提前谢了。 我的代码是 私有静态布尔checkRootMethod1(){String buildTags=build.tags;return buildTags!=n

  • 问题内容: 当我尝试通过Java ProcessBuilder类在任务计划程序中创建新任务时,出现Windows Vista拒绝访问错误。在XP上,它可以正常工作。 当我使用“以管理员身份运行”选项时,它也将在Vista上运行。 但是,这是一个额外的步骤,用户可能对此一无所知。当用户仅双击应用程序图标时,它将失败并拒绝访问。我的问题是如何在启动后立即强制Java应用重新获得管理员权限? 问题答案:

  • 如何使用与启动的应用程序相同的UID打开shell?

  • 我希望这个应用程序能够访问Graph API上的mail.read作用域,仅供特定的用户组使用。 我设法让整个组织都能进入。(点击Azure门户>Azure Active Directory>应用注册>MyApp>设置>权限中的“授予权限”按钮)。如何将这些权利限制在特定的用户群体,而不必提示任何个人同意?

  • 有没有一种方法可以在非根android设备上使用系统签名的应用程序进行系统范围的网络过滤? 类似于在根设备中使用iptables binary的应用程序。