内容解析程序尝试写入文件,但无法获取权限
我的内容提供商尝试在外部存储上创建文件,但它需要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);
相关文章