本文介紹了內(nèi)容解析程序嘗試寫入文件,但無法獲取權(quán)限的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我的內(nèi)容提供商嘗試在外部存儲上創(chuàng)建文件,但它需要android.permission.WRITE_EXTERNAL_STORAGE
權(quán)限。我已將此權(quán)限添加到清單,但如果Build.VERSION.SDK_INT >= 23
它無法創(chuàng)建文件。
因此,我希望在ContentProvider開始工作之前運行一個活動,以獲得用戶的許可。我怎么能做到這一點。謝謝。
注意:我不是在問如何獲得運行時權(quán)限。如何在運行內(nèi)容提供程序之前獲得許可。如您所知,內(nèi)容提供商在所有其他活動之前開始工作,我無法聯(lián)系到ContextCompat..
推薦答案
如果你需要推遲ContentProvider
的初始運行-例如,直到你的應(yīng)用被授予某些運行時權(quán)限請求,如本例-你可以在清單中將其聲明為禁用,然后在適當(dāng)?shù)臅r候以編程方式啟用它。
只需將清單中第一個<provider>
元素的enabled
屬性設(shè)置為false
:
<provider
android:name=".MyProvider"
...
android:enabled="false" />
然后在準備好時使用PackageManager#setComponentEnabledSetting()
啟用它;即在本例中,在您成功獲得權(quán)限之后。例如,從Activity
處理運行時權(quán)限請求:
ComponentName myProvider = new ComponentName(this, MyProvider.class);
getPackageManager().setComponentEnabledSetting(myProvider,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
這篇關(guān)于內(nèi)容解析程序嘗試寫入文件,但無法獲取權(quán)限的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,