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

时间:2018-12-05 15:24:10

标签: java android android-contentprovider

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

权限。我已经向Manifest添加了此权限,但是如果Build.VERSION.SDK_INT >= 23无法创建文件。

所以我想在ContentProvider开始工作以获取用户许可之前运行一个活动。我该怎么做。谢谢。

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

1 个答案:

答案 0 :(得分:0)

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

只需将清单中enabled元素上的<provider>属性设置为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);