Comment faire pour conserver l'autorisation de l'API android 19 (KitKat)?

Dans mon application je stocker le chemin d'accès de l'image dans ma db SQlite pour une utilisation ultérieure. Le chemin que je reçois est

content://com.android.providers.media.documents/document/image%3A71964

Quand j'ai récupérer ce chemin à partir de la base de données et d'essayer de récupérer l'image de ce chemin android jette

java.lang.SecurityException: Permission Denial: opening provider
com.android.providers.media.MediaDocumentsProvider 
from ProcessRecord{42c84ec8 23911:com.gots.gb/u0a248} (pid=23911, uid=10248) 
requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS

Selon https://developer.android.com/guide/topics/providers/document-provider.html#permissions j'ai besoin de persister autorisation en ajoutant le code suivant

final int takeFlags = intent.getFlags()
        & (Intent.FLAG_GRANT_READ_URI_PERMISSION
        | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
//Check for the freshest data.
getContentResolver().takePersistableUriPermission(uri, takeFlags);

Quand j'ai ajouté ce code à mon ImageAdapter classe qui s'étend BaseAdapter android jette

08-21 02:14:38.530: W/System.err(24452): java.lang.SecurityException:
No permission grant found for UID 10248 and Uri 
content://com.android.providers.media.documents/document/image:71964

C'est la partie pertinente de mon ImageAdapter code

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView ;


    if (convertView == null){
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(185, 185));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);

    }
    else{
        imageView = (ImageView)convertView ;
    }

    InputStream is = null;
    Bitmap bitmap = null ;

    try {

        Log.d(TAG,String.valueOf(list.get(position)));
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        final int takeFlags = intent.getFlags()
                & (Intent.FLAG_GRANT_READ_URI_PERMISSION
                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        //Check for the freshest data.

        if (Build.VERSION.SDK_INT >= 19){
            mContext.getContentResolver().takePersistableUriPermission(list.get(position), takeFlags);
        }


        is = mContext.getContentResolver().openInputStream(list.get(position));

        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 8;
        bitmap = BitmapFactory.decodeStream(is,null, options);
        is.close();
        imageView.setImageBitmap(bitmap);

        return imageView;

    }
    catch (Exception e) {
        e.printStackTrace();

        return null;
    }

ce que je fais mal?
Grâce

Essayez d'appeler takePersistableUriPermission() lorsque vous obtenez la Uri à l'origine, et non pas lorsque vous essayez d'utiliser la Uri plus tard. Aussi, s'il vous plaît ne pas appeler un ContentResolver sur le thread principal de l'application, comme vous le faites dans un couple de points dans getView(). En particulier, openInputStream() et votre BitmapFactory travail doit absolument être déplacé à un thread d'arrière-plan.
J'obtiens cette erreur Requested flags 0x1, but only 0x0 are allowed erreur. Je suis en train d'essayer de récupérer une image à partir de la galerie à l'aide de ACTION_GET_CONTENT .
Je n'ai pas joué avec ce genre de choses encore (il est haut sur ma liste de choses à faire), mais ma conjecture est que la Galerie n'est pas vous offrir un permanent de l'autorisation.

OriginalL'auteur Pdksock | 2014-08-20