要为其他应用提供API,我们可以在我们的应用android:exported="true"
中使用AndroidManifest.xml
导出我们自己的内容提供商,服务和广播接收器。
但是,我希望用户能够在应用程序中停用API功能,这意味着我想在代码中动态设置exported="false"
标志。这可能吗?
或者是通过检查我的内容提供者/服务内部是否启用API来实现此目的的唯一方法,如果API被禁用则不执行任何操作/什么都不提供?
要理解我想以编程方式禁用API的原因,这里有一个例子:
用户A想要使用API,因此必须启用它。
但是,用户B保护了应用程序,例如通过设置访问应用程序及其内容所需的密码。但是,如果有人访问该设备,他可以访问API以绕过密码保护。因此,用户B应该能够从应用程序的设置中停用API。
答案 0 :(得分:0)
不确定是否可以实现对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?)