我的内容提供商尝试在外部存储上创建文件,但需要android.permission.WRITE_EXTERNAL_STORAGE
权限。我已经向Manifest添加了此权限,但是如果Build.VERSION.SDK_INT >= 23
无法创建文件。
所以我想在ContentProvider开始工作以获取用户许可之前运行一个活动。我该怎么做。谢谢。
注意:我不是在问我如何获得运行时权限。在运行内容提供程序之前,如何获得权限。如您所知,内容提供商在所有其他活动之前就开始工作,我无法联系到ContextCompat..
答案 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);