Contentresolver 尝试写入文件但无法获得权限

Content Resolver Try to Write file but cant get Permisions

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

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

所以我想 运行 在 ContentProvider 开始工作之前 activity 获得用户的许可。我该怎么做。谢谢

注意:我不是在问如何获得 运行时间权限。如何在 运行 宁内容提供商之前获得许可。如您所知,内容提供商在所有其他活动之前开始工作,我无法到达 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);