以编程方式修改 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 端点地址设置?