Android 5.1.1 Lollipop retourne le chemin du fichier nul si l'image choisie dans la galerie

Android 5.1.1 lollipop retourne le chemin du fichier nul si l'image choisit dans la galerie. Le code ci-dessous fonctionne correctement dans tous les dispositifs ci-dessous 5.1.1, mais ne fonctionne pas dans lollipop 5.1.1

Uri contentUri = data.getData(); Cursor cursor = null; try { String[] proj = {MediaStore.Images.Media.DATA}; cursor = context.getContentResolver().query(contentUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } finally { if (cursor != null) { cursor.close(); } } 

Cursor.getString (column_index), cela renvoie null.

  • Téléchargement d'image depuis Android vers GCS
  • Impossible de trouver un Java Runtime Android Studio Robolectric
  • Synthèse de EditText visibile pendant la transition
  • Android Lollipop, la vue personnalisée AppCompat ActionBar ne prend pas toute la largeur de l'écran entier
  • Force la vidéo à ouvrir dans l'application Youtube sur Android
  • Le titre et la description du produit ne s'affichent pas après le remplacement de la clé publique (Base64).
  • 2 Solutions collect form web for “Android 5.1.1 Lollipop retourne le chemin du fichier nul si l'image choisie dans la galerie”

    Pour l'instant, j'ai fini avec cela pour obtenir une image de la galerie. Je l'ai testé sur 4.4, 5.0.1 et 5.1.1, mais il devrait également fonctionner sur les versions précédentes (avec une nouvelle et nouvelle application photo Google), devrait être moins difficile et ne nécessite pas de contrôle sur la version Android.

     public static Uri handleImageUri(Uri uri) { if (uri.getPath().contains("content")) { Pattern pattern = Pattern.compile("(content://media/.*\\d)"); Matcher matcher = pattern.matcher(uri.getPath()); if (matcher.find()) return Uri.parse(matcher.group(1)); else throw new IllegalArgumentException("Cannot handle this URI"); } return uri; } 

    Et avec cela, j'ai utilisé le même code que j'ai utilisé avant pour obtenir le chemin d'image:

     public static String getRealPathFromURI(Context context, Uri uri) { Cursor cursor = null; try { Uri newUri = handleImageUri(uri); String[] proj = { MediaStore.Images.Media.DATA }; cursor = context.getContentResolver().query(newUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } catch (Exception e){ return null; } finally { if (cursor != null) { cursor.close(); } } } 

    Pour un piratage temporaire pour Android Lollipop 5.1.1. Cela fonctionne bien maintenant. Mais je ne suis pas satisfait de ce hack non officiel.

     Uri selectedImage = data.getData(); if (Build.VERSION.SDK_INT == 22) { if (selectedImage != null && selectedImage.toString().length() > 0) { try { final String extractUriFrom = selectedImage.toString(); String firstExtraction = extractUriFrom.contains("com.google.android.apps.photos.contentprovider") ? extractUriFrom.split("/1/")[1] : extractUriFrom; firstExtraction = firstExtraction.contains("/ACTUAL") ? firstExtraction.replace("/ACTUAL", "").toString() : firstExtraction; String secondExtraction = URLDecoder.decode(firstExtraction, "UTF-8"); selectedImage = Uri.parse(secondExtraction); } catch (UnsupportedEncodingException e) { } catch (Exception e) { } } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.