Android Oreo: URI dari ACTION_GET_CONTENT tidak diberikan FLAG_GRANT_READ_URI_PERMISSION saat dibungkus dengan Intent.createChooser

Saya mendapatkan pengecualian di bawah ini saat menggunakan Intent ACTION_GET_CONTENT yang dibungkus dengan Intent.createChooser. Saya tidak mendapatkan pengecualian ini ketika saya tidak membungkus Intent dengan Intent.createChooser..

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.providers.downloads.documents/document/523 flg=0x1 (has extras) }} to activity {com.mycompany.app/com.mycompany.app.activity.MessageCompose}: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.downloads.DownloadStorageProvider from ProcessRecord{..} (pid=20538, uid=10127) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs

Kode yang bermasalah: -

Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType(type);
i = Intent.createChooser(i, "Select a file");
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(i, ACTIVITY_REQUEST_PICK_ATTACHMENT);

Kode berfungsi ketika saya menghapus baris

i = Intent.createChooser(i, "Select a file"); 

Ketika saya memeriksa onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
...
uri = data.getData();

int permissionGrant = getApplicationContext().checkCallingOrSelfUriPermission(uri,  Intent.FLAG_GRANT_READ_URI_PERMISSION); 
// Returns PERMISSION_GRANTED without createChooser 
// Returns PERMISSION_DENIED with createChooser

File manifes: -

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.mycompany.app.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/providers_paths"/>
        </provider>

Bagaimana cara memperbaiki masalah ini, saat menggunakan pemilih.


person Thanigs    schedule 20.06.2019    source sumber
comment
Lihat ini =› stackoverflow.com/questions/56554617/   -  person Chirag Savsani    schedule 20.06.2019
comment
Saya tidak memiliki pegangan untuk file URI, sebelum meluncurkan Intent. Tujuan meluncurkan Intent adalah membiarkan pengguna memilih file. Saya mendapatkan uri penyedia di onActivityResult saja   -  person Thanigs    schedule 20.06.2019