【问题标题】:Can I use packagemanager.setApplicationEnabledSetting() on non-rooted device in user app我可以在用户应用程序的非根设备上使用 packagemanager.setApplicationEnabledSetting()
【发布时间】:2017-05-24 12:38:00
【问题描述】:

我正在尝试从我的应用中禁用其中一个应用。我创建了一个启动器应用程序并尝试使用以下包管理器方法

pm.setApplicationEnabledSetting(packageInfo.packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

但我得到 SecurityException 作为 SecurityException: Permission Denial: 尝试从 pid=20217, uid=10066, package uid=10067 更改组件状态

注意: 我在某处发现解决方案是在清单中提及以下权限

但是我在这个权限中收到一个警告,这个权限只授予系统应用程序。

【问题讨论】:

  • “我正在尝试从我的应用中禁用其中一个应用”——为什么? “但是我在此权限中收到警告,该权限仅授予系统应用程序” - 正确。否则,作为勒索软件攻击的一部分,恶意软件作者很容易禁用各种应用程序。
  • 是的,你是对的。但是,改变组件状态的正确方法是什么?
  • 您不会更改组件状态。你做点别的。既然你懒得回答“为什么?”我最初评论中的问题,我无法就可能的替代方案向您提供建议。
  • “我正在尝试从我的应用中禁用其中一个应用”——为什么? - 创建此类应用程序的目的是通过启动器应用程序实现移动设备管理。我的应用程序仅适用于特定组织。
  • 如果您真正实现的是 MDM 解决方案,欢迎您查看设备管理员和设备所有者 API。

标签: android security app-launcher


【解决方案1】:

要禁用/启用其他应用,您的应用必须具有系统权限。要获得特权,您应该执行以下步骤。

将此行添加到您的清单标题 android:sharedUserId="android.uid.system"

将此权限添加到清单“android.permission.CHANGE_COMPONENT_ENABLED_STATE”

使用系统密钥为您的应用签名。

我在启动器应用中检查了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多