Appareil photo Android: l'intention des données renvoie null

132

J'ai une application Android qui contient plusieurs activités.

Dans l'un d'eux, j'utilise un bouton qui appellera la caméra de l'appareil:

public void onClick(View view) {
    Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(photoIntent, IMAGE_CAPTURE);
}

Dans la même activité, j'appelle la OnActivityResultméthode pour le résultat de l'image:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == IMAGE_CAPTURE) {
        if (resultCode == RESULT_OK) {
            Bitmap image = (Bitmap) data.getExtras().get("data");
            ImageView imageview = (ImageView) findViewById(R.id.pic);
            imageview.setImageBitmap(image);
        } else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this, "CANCELED ", Toast.LENGTH_LONG).show();
        }
    }
}

Le problème est que l'intention dataest nulle et que la OnActivityResultméthode passe directement à (resultCode == RESULT_CANCELED)et que l'application retourne à l'activité précédente.

Comment puis-je résoudre ce problème et après avoir appelé la caméra, l'application revient à l'activité en cours qui contient un ImageViewqui contient la photo prise?

Merci

soft_developer
la source
jetez un œil sur cette réponse stackoverflow.com/questions/18120775/…
Praveen Sharma

Réponses:

218

L'application de caméra Android par défaut renvoie un intent non nul uniquement lors du renvoi d'une miniature dans l'intention renvoyée. Si vous passez EXTRA_OUTPUTavec un URI sur lequel écrire, il renverra une nullintention et l'image se trouve dans l'URI que vous avez passé.

Vous pouvez le vérifier en regardant le code source de l'application appareil photo sur GitHub:

Je suppose que vous passez d'une EXTRA_OUTPUTmanière ou d'une autre, ou que l'application appareil photo de votre téléphone fonctionne différemment.

Brian Slesinsky
la source
12
comment corriger la fonctionnalité put Extra, qui donne une intention non nulle à huis clos onActivityResult
Abdul Wahab
Réponse vraiment utile J'aurais aimé pouvoir l'accepter pour que d'autres trouvent la solution plus efficacement.
user1160020
1
Impressionnant ! Merci beaucoup pour l'explication :) +100
Muhammad Riyaz
Le lien que vous avez posté n'est plus valide.
4
Pourrions-nous inhiert la classe de caméra et simplement changer cette méthode pour autoriser les deux, ou est-ce plus difficile que cela?
Tanner Summers
16

J'ai trouvé une réponse facile. Ça marche!!

private void openCameraForResult(int requestCode){
    Intent photo = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Uri uri  = Uri.parse("file:///sdcard/photo.jpg");
    photo.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(photo,requestCode);
}

if (requestCode == CAMERA_REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            File file = new File(Environment.getExternalStorageDirectory().getPath(), "photo.jpg");
            Uri uri = Uri.fromFile(file);
            Bitmap bitmap;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                bitmap = cropAndScale(bitmap, 300); // if you mind scaling
                profileImageView.setImageBitmap(bitmap);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

si vous souhaitez recadrer et redimensionner cette image

public static  Bitmap cropAndScale (Bitmap source, int scale){
    int factor = source.getHeight() <= source.getWidth() ? source.getHeight(): source.getWidth();
    int longer = source.getHeight() >= source.getWidth() ? source.getHeight(): source.getWidth();
    int x = source.getHeight() >= source.getWidth() ?0:(longer-factor)/2;
    int y = source.getHeight() <= source.getWidth() ?0:(longer-factor)/2;
    source = Bitmap.createBitmap(source, x, y, factor, factor);
    source = Bitmap.createScaledBitmap(source, scale, scale, false);
    return source;
}
izakos
la source
4
Il donne une version FileUriExposedExceptionmoderne du SDK.
Souradeep Nanda
8

J'ai rencontré ce problème, le intentn'est pas nul mais les informations envoyées via ce intentne sont pas reçues dansonActionActivit()

entrez la description de l'image ici

C'est une meilleure solution en utilisant getContentResolver () :

    private Uri imageUri;
    private ImageView myImageView;
    private Bitmap thumbnail;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

      ...
      ...    
      ...
      myImageview = (ImageView) findViewById(R.id.pic); 

      values = new ContentValues();
      values.put(MediaStore.Images.Media.TITLE, "MyPicture");
      values.put(MediaStore.Images.Media.DESCRIPTION, "Photo taken on " + System.currentTimeMillis());
      imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
      startActivityForResult(intent, PICTURE_RESULT);

  }

la onActivityResult()obtenir une image bitmap stockée par getContentResolver () :

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE_TAKE_PHOTO && resultCode == RESULT_OK) {

            Bitmap bitmap;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
                myImageView.setImageBitmap(bitmap);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí

Vérifiez mon exemple dans github:

https://github.com/Jorgesys/TakePicture

Jorgesys
la source
6

Application de caméra de travail simple évitant le problème d'intention nulle

- tous les codes modifiés inclus dans cette réponse; proche du tutoriel android

J'ai passé beaucoup de temps sur ce problème, j'ai donc décidé de créer un compte et de partager mes résultats avec vous.

Le didacticiel Android officiel "Prendre des photos simplement" s'est avéré ne pas tenir tout à fait ce qu'il avait promis. Le code qui y est fourni ne fonctionnait pas sur mon appareil: un Samsung Galaxy S4 Mini GT-I9195 exécutant la version Android 4.4.2 / KitKat / API Level 19.

J'ai compris que le problème principal était la ligne suivante dans la méthode invoquée lors de la capture de la photo ( dispatchTakePictureIntentdans le tutoriel):

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);

Il en a résulté que l'intention a été rattrapée par la suite en onActivityResultétant nulle.

Pour résoudre ce problème, j'ai tiré beaucoup d' inspiration sur les réponses précédentes ici et quelques messages utiles sur GitHub ( la plupart du temps cette un par deepwinter - grand merci à lui, vous pourriez vouloir vérifier sa réponse sur un étroitement lié après aussi).

Suite à ces conseils agréables, j'ai choisi la stratégie de suppression de la putExtraligne mentionnée et de faire la chose correspondante de récupérer la photo prise de la caméra dans la méthode onActivityResult () à la place. Les lignes de code décisives pour récupérer le bitmap associé à l'image sont:

        Uri uri = intent.getData();
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
        } catch (IOException e) {
            e.printStackTrace();
        }

J'ai créé une application exemplaire qui a simplement la capacité de prendre une photo, de la sauvegarder sur la carte SD et de l'afficher. Je pense que cela pourrait être utile pour les personnes dans la même situation que moi lorsque je suis tombé sur ce problème, car les suggestions d'aide actuelles se réfèrent principalement à des publications github assez volumineuses qui font la chose en question mais ne sont pas trop faciles à superviser pour les débutants comme moi. En ce qui concerne le système de fichiers qu'Android Studio crée par défaut lors de la création d'un nouveau projet, j'ai juste eu à changer trois fichiers pour mon objectif:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android.simpleworkingcameraapp.MainActivity">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="takePicAndDisplayIt"
    android:text="Take a pic and display it." />

<ImageView
    android:id="@+id/image1"
    android:layout_width="match_parent"
    android:layout_height="200dp" />

</LinearLayout>

MainActivity.java:

package com.example.android.simpleworkingcameraapp;

import android.content.Intent;
import android.graphics.Bitmap;
import android.media.Image;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

private ImageView image;
static final int REQUEST_TAKE_PHOTO = 1;
String mCurrentPhotoPath;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    image = (ImageView) findViewById(R.id.image1);
}

// copied from the android development pages; just added a Toast to show the storage location
private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmm").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    Toast.makeText(this, mCurrentPhotoPath, Toast.LENGTH_LONG).show();
    return image;
}

public void takePicAndDisplayIt(View view) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        File file = null;
        try {
            file = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
        }

        startActivityForResult(intent, REQUEST_TAKE_PHOTO);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultcode, Intent intent) {
    if (requestCode == REQUEST_TAKE_PHOTO && resultcode == RESULT_OK) {
        Uri uri = intent.getData();
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
        } catch (IOException e) {
            e.printStackTrace();
        }
        image.setImageBitmap(bitmap);
    }
}
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.simpleworkingcameraapp">


<!--only added paragraph-->
<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  <!-- only crucial line to add; for me it still worked without the other lines in this paragraph -->
<uses-permission android:name="android.permission.CAMERA" />


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

Notez que la solution que j'ai trouvée pour le problème a également conduit à une simplification du fichier manifeste android: les changements suggérés par le tutoriel android en termes d'ajout d'un fournisseur ne sont plus nécessaires puisque je n'en utilise aucun dans mon code java. Par conséquent, seules quelques lignes standard - concernant principalement les autorisations - ont dû être ajoutées au fichier manifeste.

Il peut également être utile de souligner que l'importation automatique d'Android Studio peut ne pas être capable de gérer java.text.SimpleDateFormatet java.util.Date. J'ai dû les importer tous les deux manuellement.

HGM
la source
cette solution nécessite une autorisation de STOCKAGE, ce qui n'est pas une très bonne approche.
shanraisshan
4
La question indique clairement que le paramètre Intent nommé "data" passé à onActivityResult () est nul, alors que votre solution continue et essaie de l'utiliser.
Maks
2

Probablement parce que vous aviez quelque chose comme ça?

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                        
Uri fileUri =  CommonUtilities.getTBCameraOutputMediaFileUri();                  
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);                        
startActivityForResult(takePictureIntent, 2);

Cependant, vous ne devez pas placer la sortie supplémentaire dans l'intention, car les données vont dans l'URI au lieu de la variable de données. Pour cette raison, vous devez prendre les deux lignes au milieu, pour avoir

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, 2);

C'est ce qui a causé le problème pour moi, j'espère que cela a aidé.

Marius Hilarant
la source
12
Cette réponse est trompeuse. Vous obtiendrez une miniature au lieu d'une photo en taille réelle sans mettre MediaStore.EXTRA_OUTPUT. Il est mis en évidence dans la documentation et dans d'autres réponses.
user2417480
2
Cette réponse est absolument trompeuse.
IndexOutOfDevelopersException
c'est une réponse trompeuse.
Abdulla Thanseeh
0

Le code suivant fonctionne pour moi:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 2);

Et voici le résultat:

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent)
{ 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    if(resultCode == RESULT_OK)
    {
        Uri selectedImage = imageReturnedIntent.getData();
        ImageView photo = (ImageView) findViewById(R.id.add_contact_label_photo);
        Bitmap mBitmap = null;
        try
        {
            mBitmap = Media.getBitmap(this.getContentResolver(), selectedImage);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}
Manitoba
la source
Je l'ai testé mais c'est le même problème :(
soft_developer
1
j'obtiens la imageReturnedIntent.getData()valeur nulle. Je crée une intention identique à la vôtre. Ne met pas de paramètres supplémentaires.
Jaydip Kalkani du
0

Code Kotlin qui fonctionne pour moi:

 private fun takePhotoFromCamera() {
          val intent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
        startActivityForResult(intent, PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA)
      }

Et obtenez le résultat:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
 if (requestCode == PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA) {
         if (resultCode == Activity.RESULT_OK) {
           val photo: Bitmap? =  MediaStore.Images.Media.getBitmap(this.contentResolver, Uri.parse( data!!.dataString)   )
            // Do something here : set image to an ImageView or save it ..   
              imgV_pic.imageBitmap = photo 
        } else if (resultCode == Activity.RESULT_CANCELED) {
            Log.i(TAG, "Camera  , RESULT_CANCELED ")
        }

    }

}

et n'oubliez pas de déclarer le code de requête:

companion object {
 const val PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA = 300
  }
Hamed Jaliliani
la source
0

Après de nombreux essais et études, j'ai pu le comprendre. Tout d'abord, les données variables de Intent seront toujours nulles, par conséquent, la vérification !nullplantera votre application tant que vous passerez un URI à startActivityForResult. Suivez l'exemple ci-dessous. J'utiliserai Kotlin.

  1. Ouvrez l'intention de la caméra

    fun addBathroomPhoto(){
    addbathroomphoto.setOnClickListener{
    
        request_capture_image=2
    
        var takePictureIntent:Intent?
        takePictureIntent =Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        if(takePictureIntent.resolveActivity(activity?.getPackageManager()) != null){
    
            val photoFile: File? = try {
                createImageFile()
            } catch (ex: IOException) {
                // Error occurred while creating the File
    
                null
            }
    
            if (photoFile != null) {
                val photoURI: Uri = FileProvider.getUriForFile(
                    activity!!,
                    "ogavenue.ng.hotelroomkeeping.fileprovider",photoFile)
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                    photoURI);
                startActivityForResult(takePictureIntent,
                    request_capture_image);
            }
    
    
        }
    
    }

    } `

  2. Créez le createImageFile (). Mais vous DEVEZ rendre la variable imageFilePath globale. Un exemple sur la façon de le créer est sur la documentation officielle Android et assez simple

  3. Obtenez l'intention

     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    
    if (requestCode == 1 && resultCode == RESULT_OK) {
        add_room_photo_txt.text=""
        var myBitmap=BitmapFactory.decodeFile(imageFilePath)
        addroomphoto.setImageBitmap(myBitmap)
        var file=File(imageFilePath)
        var fis=FileInputStream(file)
        var bm = BitmapFactory.decodeStream(fis);
        roomphoto=getBytesFromBitmap(bm) }}
  4. La méthode getBytesFromBitmap

      fun getBytesFromBitmap(bitmap:Bitmap):ByteArray{
    
      var stream=ByteArrayOutputStream()
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
      return stream.toByteArray();
      }

J'espère que ça aide.

Gstuntz
la source
0

Lorsque nous capturerons l'image de la caméra dans Android, Uri ou data.getdata()devient nul. nous avons deux solutions pour résoudre ce problème.

  1. Nous pouvons obtenir le chemin Uri de l'image Bitmap
  2. Nous pouvons obtenir le chemin Uri du curseur.

Je vais mettre en œuvre toutes les méthodes ici, veuillez regarder attentivement et lire celles-ci: -

Tout d'abord, je vais dire comment obtenir Uri à partir de l'image Bitmap: le code complet est:

Tout d'abord, nous capturerons l'image via Intent qui sera la même pour les deux méthodes, donc ce code je n'écrirai qu'une seule fois ici:

// Capture Image
captureImg.setOnClickListener(new View.OnClickListener(){
    @Override public void onClick(View view){
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if(intent.resolveActivity(getPackageManager())!=null){
            startActivityForResult(intent,reqcode);
        }

    }
});  

Maintenant, nous allons implémenter OnActivityResult :-( Ce sera la même chose pour les deux méthodes ci-dessus 2): -

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == reqcode && resultCode == RESULT_OK)
    {

        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ImageView.setImageBitmap(photo);

        // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
        Uri tempUri = getImageUri(getApplicationContext(), photo);

        //Show Uri path based on Image
        Toast.makeText(LiveImage.this, "Here " + tempUri, Toast.LENGTH_LONG).show();

        //Show Uri path based on Cursor Content Resolver
        Toast.makeText(this, "Real path for URI : " + getRealPathFromURI(tempUri), Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(this, "Failed To Capture Image", Toast.LENGTH_SHORT).show();
    }
}     

Nous allons maintenant créer toutes les méthodes ci-dessus pour créer des Uri à partir des méthodes Image et Cursor via des classes:

Maintenant le chemin URI de l'image Bitmap

private Uri getImageUri(Context applicationContext, Bitmap photo)
{
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(LiveImage.this.getContentResolver(), photo, "Title", null);
    return Uri.parse(path);
}

\ Uri du chemin réel de l'image enregistrée

public String getRealPathFromURI(Uri uri)
{
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    return cursor.getString(idx);
}
Pradeep Kumar
la source
-1

Lorsque nous capturons l'image de l'appareil photo sous Android, Uriou data.getdata()devient nul. Nous avons deux solutions pour résoudre ce problème.

  1. Récupérer le chemin Uri de l'image Bitmap
  2. Récupérez le chemin Uri du curseur.

Voici comment récupérer l'URI de l'image bitmap. Première capture d'image via Intent qui sera la même pour les deux méthodes:

// Capture Image
captureImg.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(intent, reqcode);
        }
    }
});

Maintenant, implémentez OnActivityResult, qui sera le même pour les deux méthodes:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode==reqcode && resultCode==RESULT_OK)
    {
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ImageView.setImageBitmap(photo);

        // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
        Uri tempUri = getImageUri(getApplicationContext(), photo);

        // Show Uri path based on Image
        Toast.makeText(LiveImage.this,"Here "+ tempUri, Toast.LENGTH_LONG).show();

        // Show Uri path based on Cursor Content Resolver
        Toast.makeText(this, "Real path for URI : "+getRealPathFromURI(tempUri), Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(this, "Failed To Capture Image", Toast.LENGTH_SHORT).show();
    }
}

Maintenant, créez toutes les méthodes ci-dessus pour créer l'URI à partir des méthodes Image et Cursor:

Chemin Uri de l'image Bitmap:

private Uri getImageUri(Context applicationContext, Bitmap photo) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(LiveImage.this.getContentResolver(), photo, "Title", null);
    return Uri.parse(path);
}

Uri du chemin réel de l'image enregistrée:

public String getRealPathFromURI(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    return cursor.getString(idx);
}
Pradeep Sheoran
la source
Quelqu'un a-t-il pu résoudre ce problème? Veuillez publier votre solution. Android doc n'a évidemment pas été en mesure de résoudre ce problème
Gstuntz