内容解析程序尝试写入文件,但无法获取权限

2022-08-15 00:00:00 android java android-contentprovider

我的内容提供商尝试在外部存储上创建文件,但它需要android.permission.WRITE_EXTERNAL_STORAGE

权限。我已将此权限添加到清单,但如果Build.VERSION.SDK_INT >= 23它无法创建文件。

因此,我希望在ContentProvider开始工作之前运行一个活动,以获得用户的许可。我怎么能做到这一点。谢谢。

注意:我不是在问如何获得运行时权限。如何在运行内容提供程序之前获得许可。如您所知,内容提供商在所有其他活动之前开始工作,我无法联系到ContextCompat..


解决方案

如果你需要推迟ContentProvider的初始运行-例如,直到你的应用被授予某些运行时权限请求,如本例-你可以在清单中将其声明为禁用,然后在适当的时候以编程方式启用它。

只需将清单中第一个<provider>元素的enabled属性设置为false

<provider
    android:name=".MyProvider"
    ...
    android:enabled="false" />

然后在准备好时使用PackageManager#setComponentEnabledSetting()启用它;即在本例中,在您成功获得权限之后。例如,从Activity处理运行时权限请求:

ComponentName myProvider = new ComponentName(this, MyProvider.class);
getPackageManager().setComponentEnabledSetting(myProvider, 
    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

相关文章