以编程方式修改 android:exported

Posted

技术标签:

【中文标题】以编程方式修改 android:exported【英文标题】:Modify android:exported programmatically 【发布时间】:2017-08-01 14:53:09 【问题描述】:

要为其他应用提供 API,我们可以在应用的androidManifest.xml 中使用android:exported="true" 导出我们自己的内容提供者、服务和广播接收器。

但是,我希望用户能够停用应用程序中的 API 功能,这意味着我想在代码中动态设置 exported="false" 标志。这可能吗?

或者是通过在我的内容提供者/服务内部检查 API 是否启用并且如果 API 被禁用则不执行任何操作/不提供任何内容来实现此目的的唯一方法?


要了解我为什么要以编程方式禁用 API,下面是一个示例:

用户 A 想要使用 API,因此必须启用它。但是,用户 B 保护了应用程序,例如通过设置访问应用程序及其内容所需的密码。但是,如果有人可以访问该设备,他可以访问 API 以绕过密码保护。因此,用户 B 应该能够从应用程序的设置中停用 API。

【问题讨论】:

这个运气好吗? @Biggie,有这方面的消息吗? 【参考方案1】:

不确定您是否可以修改android:exported 设置,但您可以尝试通过禁用/启用组件来实现您想要的。

例如,要禁用组件,您可以执行以下操作:

packageManager
  .setComponentEnabledSetting(
       new ComponentName(
           context,
           /*Your Activity, Service, BroadcastReceiver, or ContentProvider*/.class),
       PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

警告:三思而后行仅使用组件启用/禁用(或更改android:export,如果可能的话)来保护您的 API,因为其他应用程序或某人可能会重新启用组件(根设备?adb?)

【讨论】:

以上是关于以编程方式修改 android:exported的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 5 中以编程方式修改 UINavigationcontroller

如何以编程方式修改 WCF app.config 端点地址设置?

以编程方式修改/创建vcproj文件

你能以编程方式修改 UICollectionView 滚动方向吗?

SpriteKit:以编程方式修改 SKScene 框架

在中等信任下以编程方式修改配置部分