修改android:以编程方式导出

时间:2017-03-11 06:53:03

标签: android android-permissions

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

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

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

要理解我想以编程方式禁用API的原因,这里有一个例子:

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

1 个答案:

答案 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?)