Android: l'application se bloque sur onActivityResult pendant l'utilisation de Camera Intent

J'utilise l'intention de caméra pour capturer des images dans mon application. Le problème que mon application bloque sur Android 5.0.2 lors de l'utilisation de la caméra. J'utilise l'intention du fragment. Voici mon code dans le fragment:

Méthode pour prendre une photo

  • Comment changer la hauteur du bouton 'Log in with Facebook'?
  • Modifier la couleur du texte de NumberPicker
  • Ajout d'un bouton "noter mon app" dans le jeu libgdx
  • ClassCastException inexplicable dans android.widget.ProgressBar.onRestoreInstanceState
  • Comment définir par programmation maxLength dans Android TextView?
  • Comment définir des rayons d'angle pour le bouton dans le code java?
  •  private void takePhoto() { mHighQualityImageUri = Util.generateTimeStampPhotoFileUri(getActivity()); Log.d(UploadPicturesFragment.class.getSimpleName(), "URI: " + mHighQualityImageUri.toString()); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, mHighQualityImageUri); startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } 

    OnActivityResult dans mon fragment

     public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != Activity.RESULT_OK) { return; } if (requestCode == REQUEST_IMAGE_CAPTURE) { Log.d(UploadPicturesFragment.class.getSimpleName(), "IMAGE URI NOT NULL: " + (mHighQualityImageUri == null)); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), mHighQualityImageUri); DroomUtil.beginCrop(mHighQualityImageUri, getActivity(), this, true, bitmap.getWidth(), bitmap.getHeight()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

    Log Trace

     12-29 10:28:03.491: E/AndroidRuntime(9780): java.lang.RuntimeException: Unable to resume activity {in.droom/in.droom.activity.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:2, request=1, result=-1, data=null} to activity {in.droom/in.droom.activity.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3224) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3257) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2479) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.ActivityThread.access$800(ActivityThread.java:144) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.os.Handler.dispatchMessage(Handler.java:102) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.os.Looper.loop(Looper.java:155) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.ActivityThread.main(ActivityThread.java:5702) 12-29 10:28:03.491: E/AndroidRuntime(9780): at java.lang.reflect.Method.invoke(Native Method) 12-29 10:28:03.491: E/AndroidRuntime(9780): at java.lang.reflect.Method.invoke(Method.java:372) 12-29 10:28:03.491: E/AndroidRuntime(9780): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) 12-29 10:28:03.491: E/AndroidRuntime(9780): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824) 12-29 10:28:03.491: E/AndroidRuntime(9780): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:2, request=1, result=-1, data=null} to activity {in.droom/in.droom.activity.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.ActivityThread.deliverResults(ActivityThread.java:3881) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3197) 12-29 10:28:03.491: E/AndroidRuntime(9780): ... 11 more 12-29 10:28:03.491: E/AndroidRuntime(9780): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.content.ContentResolver.openInputStream(ContentResolver.java:651) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.provider.MediaStore$Images$Media.getBitmap(MediaStore.java:1019) 12-29 10:28:03.491: E/AndroidRuntime(9780): at in.droom.fragments.UploadPicturesFragment.onActivityResult(UploadPicturesFragment.java:395) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.Activity.dispatchActivityResult(Activity.java:6164) 12-29 10:28:03.491: E/AndroidRuntime(9780): at android.app.ActivityThread.deliverResults(ActivityThread.java:3877) 12-29 10:28:03.491: E/AndroidRuntime(9780): ... 12 more 

    La ligne no. 395 est:

     Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), mHighQualityImageUri); 

  • Comment utiliser un FirebaseRecyclerAdapter avec une référence dynamique dans Android?
  • Comment ajouter des tags dans XML dans Android?
  • Police Arial pour le texte dans Android
  • Google PlacePicker ferme immédiatement après le lancement
  • Est-ce que Android Studio possède une visionneuse hiérarchique?
  • Eclipse présente des erreurs mais je ne les trouve pas
  • 7 Solutions collect form web for “Android: l'application se bloque sur onActivityResult pendant l'utilisation de Camera Intent”

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 

    Cela signifie que mHighQualityImageUri est null , selon toute vraisemblance. Cela se produira si vous ne parvenez pas à retenir Uri utilisant onSaveInstanceState() . Il est tout à fait possible que votre processus soit terminé lorsque votre application est en arrière-plan et que l'application de la caméra est au premier plan.

    Suivez les étapes ci-dessous afin de prendre une photo de la caméra et de l'afficher sur ImageView

    1) Démarrer l'intention de la caméra

     Uri fileUri; String photoPath = ""; private void startingCameraIntent() { String fileName = System.currentTimeMillis()+".jpg"; ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, fileName); fileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); startActivityForResult(intent, YOUR_REQ_CODE); } 

    2) Callback onActivityResult Function

     @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { try { photoPath = getPath(fileUri); System.out.println("Image Path : " + photoPath); Bitmap b = decodeUri(fileUri); your_image_view.setImageBitmap(b); } catch(Exception e) { e.printStackTrace(); } } } 

    3) fonction decodeUri

     private Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException { BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(getContentResolver() .openInputStream(selectedImage), null, o); final int REQUIRED_SIZE = 72; int width_tmp = o.outWidth, height_tmp = o.outHeight; int scale = 1; while (true) { if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) { break; } width_tmp /= 2; height_tmp /= 2; scale *= 2; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver() .openInputStream(selectedImage), null, o2); return bitmap; } 

    4) getPath of Image

     @SuppressWarnings("deprecation") private String getPath(Uri selectedImaeUri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(selectedImaeUri, projection, null, null, null); if (cursor != null) { cursor.moveToFirst(); int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); return cursor.getString(columnIndex); } return selectedImaeUri.getPath(); } 

    Final In Manifest définit la permission

      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

    Remarque: Si vous utilisez marshmallow (Android 6.0), vous devez définir les contrôles d'autorisation avant d'utiliser l'application caméra. Vous pouvez lire sur Android les autorisations demandées au moment de l'exécution

    Tout d'abord, vérifiez si les data sont null dans onActivityResult en ajoutant un code supplémentaire qui empêchera votre application de se briser , comme celle-ci

     public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != Activity.RESULT_OK && data !=null) { return; } } 

    Ensuite, considérez cette leçon qui explique comment capturer des photos à l'aide d'une application d'appareil photo existante.

    Il existe une référence complète sur Demander l'autorisation de l'appareil photo à l' aide de la balise d'utilisation-caractéristique , Obtenir une vignette , Enregistrer une photo pleine grandeur , et beaucoup d'autres qui peuvent vous être très utiles pour accomplir votre tâche …

      please check your path from mHighQualityImageUri because output path is not found, below code is modify please check it, it work and remember camera result is give in Main Activity class because You used Fragment so declare on activity Result in Main Activity (Fragment Activity) class. //on Fragment Class private void takePhoto() { /* mHighQualityImageUri = Util.generateTimeStampPhotoFileUri(getActivity()); Log.d(UploadPicturesFragment.class.getSimpleName(), "URI: " + mHighQualityImageUri.toString());*/ imageUri =Uri.fromFile(new File("/sdcard/")); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); context.startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } //on Main Activity Class @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { /* Log.d(UploadPicturesFragment.class.getSimpleName(), "IMAGE URI NOT NULL: " + (mHighQualityImageUri == null));*/ try { /*if(imageUri==null){ Log.i("Bitmap", "Image URI Null"); }else { Log.i("Bitmap","Image URI is not Null"); }*/ Uri imageUri = Uri.fromFile(new File("/sdcard/")); Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),imageUri); // mHighQualityImageUri); if(bitmap !=null) { Log.i("Bitmap", "Bitmap not Null"); }else { Log.i("Bitmap","Bitmap is Null"); } // DroomUtil.beginCrop(mHighQualityImageUri, getActivity(), this, true, bitmap.getWidth(), // bitmap.getHeight()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } super.onActivityResult(requestCode, resultCode, data); } 

    Sur Android, j'ai vu différents appareils afficher un comportement différent pour choisir l'image avec une caméra et une galerie. Je trouve que la meilleure façon est de:

    1. Créez un fournisseur de contenu dans votre application.
    2. Obtenez un Uri auprès de votre fournisseur de contenu et passez-le à l'intention de la caméra.
    3. La caméra écrira l'image capturée à votre Uri.
    4. Lisez-le en utilisant context.getContentResolver (). OpenInputStream ().

    Cette méthode rend votre code indépendant de l'Uri retourné dans l'intention puisque vous possédez l'Uri. De plus, cela prend également en charge la sélection d'image de galerie avec de petites modifications.

    Je vois que vous avez également des problèmes d'orientation de périphérique avec la caméra. Cette (malheureusement) doit être traitée dans votre application, vous obtenez l'image dans une étape de post-traitement. J'ai également décrit le code ci-dessous. La plupart du temps, des problèmes d'orientation se sont produits sur les appareils Samsung où la caméra n'a que capturé des images en mode paysage.

    Création d'Uri pour l'image:

     string imageId = "IMG" + System.currentTimeMillis(); Uri attachmentUri = Uri.parse("content://"+ AttachmentContentProvider.AUTHORITY + "/images/" + imageId); // Store this as a member in your activity/fragment as mAttachmentUri 

    Remarque : Il est important que vous mAttachmentUri utilisant des préférences partagées ou un bundle d'activité à l'aide de OnSaveInstanceState () sinon l'Uri peut être perdu lorsque votre application est tuée.

    Obtenir l'intention de la caméra:

     public static Intent getImageCaptureIntent(Context context, Uri outputFileUri) { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); return cameraIntent; } 

    Lecture de l'image:

     @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != Activity.RESULT_OK) { return; } if (requestCode == REQUEST_IMAGE_CAPTURE) { try { Bitmap bitmap = decodeSampledBitmapFromResource(getActivity(), mAttachmentUri, Config.RGB_565); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } public static Bitmap decodeSampledBitmapFromResource(Context context, Uri uri, Config config) { Bitmap bmp = null; InputStream is = null; if (uri != null) { try { is = context.getContentResolver().openInputStream(uri); boolean resize = true; // First decode with inJustDecodeBounds=true to check dimensions BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(is, null, options); mLogger.d("Image Original Width:" + options.outWidth + " Height:" + options.outHeight ); // close and open the stream again is.close(); is = context.getContentResolver().openInputStream(uri); int reqWidth = options.outWidth; int reqHeight = options.outHeight; // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; options.inPreferredConfig = config; bmp = BitmapFactory.decodeStream(is, null, options); if(bmp != null) { bmp = correctImageRotation(context, bmp, uri); } else { mLogger.e("BitmapFactory.decodeStream returned null bitmap , skip correctImageRotation"); } } catch (FileNotFoundException fnfex) { mLogger.e("FileNotFoundException : while decoding inline image bitmap: " + fnfex.getMessage()); } catch (IOException ioex) { mLogger.e("IOException : while decoding inline image bitmap: " + ioex.getMessage()); } catch (OutOfMemoryError e) { mLogger.e("OutOfMemoryError : in decodeSampledBitmapFromResource BitmapFactory.decodeStream . Skip loading Resource"); } finally { try { if (is != null) { is.close(); } } catch (IOException ioex2) { mLogger.e("IOException2 : while decoding inline image bitmap: " + ioex2.getMessage()); } } } return bmp; } // Seemed necessary on a lot of Samsung devices public static Bitmap correctImageRotation( Context context, Bitmap bitmap , Uri inputUri ) throws FileNotFoundException { int orientation = ExifInterface.ORIENTATION_UNDEFINED; try { String appfilesDir = context.getApplicationContext().getFilesDir().getAbsolutePath(); String attachmentDirPath = appfilesDir + ('/') + "images"); String fileName = ContentUris.parseId(uri) + ".jpg"; String absolutePath = attachmentDirPath + ('/') + fileName; ExifInterface exif = new ExifInterface(path); orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); } catch (IOException e) { } return rotateBitmap(bitmap, orientation); } /** * rotate bitmap code reference: * http://stackoverflow.com/questions/20478765/how-to-get-the-correct-orientation-of-the-image-selected-from-the-default-image */ private static Bitmap rotateBitmap(Bitmap bitmap, int orientation) { Matrix matrix = new Matrix(); switch (orientation) { case ExifInterface.ORIENTATION_FLIP_HORIZONTAL: matrix.setScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_180: matrix.setRotate(180); break; case ExifInterface.ORIENTATION_FLIP_VERTICAL: matrix.setRotate(180); matrix.postScale(-1, 1); break; case ExifInterface.ORIENTATION_TRANSPOSE: matrix.setRotate(90); matrix.postScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_90: matrix.setRotate(90); break; case ExifInterface.ORIENTATION_TRANSVERSE: matrix.setRotate(-90); matrix.postScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_270: matrix.setRotate(-90); break; case ExifInterface.ORIENTATION_NORMAL: case ExifInterface.ORIENTATION_UNDEFINED: default: return bitmap; } try { Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); bitmap.recycle(); return bmRotated; } catch (OutOfMemoryError e) { mLogger.e("OutOfMemoryError occured while rotating the image"); return bitmap; } } 

    Fournisseur de contenu:

    Pour la mise en œuvre du fournisseur de contenu, vous pouvez utiliser FileProvider d'un android ou implémenter un fournisseur de contenu comme ci-dessous. Ce fournisseur de contenu ouvrira un fichier dans votre conteneur d'applications pour l'application de caméra à laquelle vous souhaitez écrire.

     public class AttachmentContentProvider extends ContentProvider { public static final String AUTHORITY = "com.yourcompany.yourapp.AttachmentContentProvider"; public static final int ENTITY_ATTACHMENT = 1; public static final int ENTITY_ATTACHMENT_ID = 2; private static final UriMatcher sUriMatcher; static { sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); sUriMatcher.addURI(AUTHORITY, "images", ENTITY_ATTACHMENT); sUriMatcher.addURI(AUTHORITY, "images"+"/#", ENTITY_ATTACHMENT_ID); } @Override public boolean onCreate() { return true; } @Override public int delete(Uri uri, String where, String[] whereArgs) { return 0; } @Override public String getType(Uri uri) { int match = sUriMatcher.match(uri); switch (match) { case ENTITY_ATTACHMENT: case ENTITY_ATTACHMENT_ID: return "image/jpeg"; default: return null; } } @Override public Uri insert(Uri uri, ContentValues initialValues) { return null; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return null; } @Override public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { return 0; } public static File getAttachmentFile(String fileName) { String appfilesDir = context.getApplicationContext().getFilesDir().getAbsolutePath(); String attachmentDirPath = appfilesDir + ('/') + "images"); File newFile = new File(AttachmentHelper.getAttachmentsDir() + File.separator + fileName); newFile.getParentFile().mkdirs(); return newFile; } @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { long id = -1; try { id = ContentUris.parseId(uri); } catch (NumberFormatException e) { m_logger.e("Invalid id for Uri : " + uri ); } String filename = id + ".jpg"; // id will be IMG+current time millis File imageFile = getAttachmentFile(id); return (ParcelFileDescriptor.open(file, parseMode(mode))); } } 

    Pour résumer, ce code devrait fonctionner sur la plupart des appareils testés et effectue une correction sur l'image reçue de la caméra si nécessaire.

    Selon les journaux

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 

    Il indique clairement que vous appelez getScheme() sur un objet nul. Donc avant le traitement, vous devez vérifier les données d'intention nulle.

    Aussi, en commençant par Android M, vous devez demander à l'utilisateur la permission de la caméra. En cas de manque d'autorisation d'appareil photo, l'application va se bloquer.

    Pour savoir comment travailler avec une nouvelle architecture d'autorisation, regardez-la: http://developer.android.com/training/permissions/index.html

    Voici ce que je fais souvent dans mes projets, jetez un coup d'œil. J'espère que cela aide!

    Classe de fragment:

     btnCapturePicture.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { captureImage(); } }); btnSelectPicture.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { selectImage(); } }); ... private void captureImage() { mFileUri = Uri.fromFile(Utils.getOutputMediaFile(MEDIA_TYPE_IMAGE)); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, mFileUri); startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); } private void selectImage() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType(MIME_IMAGE_ALL); startActivityForResult(intent, SELECT_PHOTO_CODE); } ... @Override public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { super.onActivityResult(requestCode, resultCode, imageReturnedIntent); switch (requestCode) { case SELECT_PHOTO_CODE: if (resultCode == Activity.RESULT_OK) { mFileUri = imageReturnedIntent.getData(); if (mFileUri != null) { mFilePath = Utils.getRealPathFromUri(mContext, mFileUri); mFilePath = mFilePath.replace("file://", ""); // do something such as display ImageView... } } break; case CAMERA_CAPTURE_IMAGE_REQUEST_CODE: if (resultCode == Activity.RESULT_OK) { if (mFileUri != null) { mFilePath = mFileUri.toString(); mFilePath = mFilePath.replace("file://", ""); // do something such as display ImageView... } } break; } // refresh phone's folder content if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); mediaScanIntent.setData(mFileUri); getActivity().sendBroadcast(mediaScanIntent); } else { getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); } } 

    Classe Utils:

     //returning image, video public static File getOutputMediaFile(int type) { // External sdcard location File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "DCIM/Camera"); // Create the storage directory if it does not exist if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date()); File mediaFile; if (type == MEDIA_TYPE_IMAGE) { mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); } else if (type == MEDIA_TYPE_VIDEO) { mediaFile = new File(mediaStorageDir.getPath() + File.separator + "VID_" + timeStamp + ".mp4"); } else { return null; } return mediaFile; } //For select picture public static String getRealPathFromUri(Context context, Uri contentUri) { 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(); } } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.