2 votes

Android Comment obtenir le chemin de l'image d'une photo de contact ?

J'ai besoin de télécharger l'image d'un contact sur le serveur mais je n'arrive pas à obtenir le chemin réel. S'il vous plaît, que quelqu'un m'aide.

J'obtiens l'uri ci-dessous.

URI : content://com.Android.contacts/display_photo/2,

2voto

Magesh Pandian Points 2061

Obtenez d'abord l'InputStream de Contact, écrivez l'Inpustream dans un fichier et sauvegardez-le en tant que fichier image. Enfin, téléchargez le chemin d'accès à l'image sur le serveur. Après le succès, supprimez simplement le fichier image. Voir le code ci-dessous.

D'abord, je récupère l'InputStream du contact en utilisant l'Id du contact.

getContactInputStream("58");//58 is my contact id.

 public void getContactInputStream(String contactId)
{
    Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId));
    InputStream stream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(), uri);
    saveContactImage(stream);
}

Après avoir obtenu l'InputStream, écrire comme un fichier dans le stockage interne.

public void saveContactImage(InputStream inputStream) {
    try {
        File file = new File(Environment.getExternalStorageDirectory().getPath(), "contactImage.png");
        OutputStream output = new FileOutputStream(file);
        try {
            try {
                byte[] buffer = new byte[4 * 1024]; // or other buffer size
                int read;

                while ((read = inputStream.read(buffer)) != -1) {
                    output.write(buffer, 0, read);
                }
                output.flush();
            } finally {
                output.close();
            }
        } catch (Exception e) {
            e.printStackTrace(); // handle exception, define IOException and others
        }
        Log.d(TAG," Contact Image Path ===>"+file.getAbsolutePath());
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

Après avoir réussi à écrire le fichier, utilisez l'URL du fichier pour le télécharger.

file.getAbsolutePath()// Output : /storage/emulated/0/contactImage.png

Les permissions suivantes sont requises pour la tâche ci-dessus :

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

Une autre façon d'éviter de sauvegarder le fichier image dans le stockage interne est de télécharger inputStream comme FileInputStream en utilisant la classe TypeFile dans Retrofit. Pour plus d'informations, voir le lien TypeFile dans Retrofit pour télécharger un fichier comme InputStream

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X