Continuons le tour du système Android avec un quatrième billet dans la série sur Au coeur du système Android.

Introduction

Aujourd’hui, nous allons nous pencher sur l’enregistrement des pièces jointes des MMS. Encore une fois, l’accès à ces fichiers n’est pas très documenté.

Solution

En partant du principe que nous savons lister les MMS et récupérer la liste des identifiants des pièces jointes pour un MMS, je vous propose le code à utiliser pour enregistrer ces fameuses pièces jointes (sur la carte mémoire par exemple).

try {
	//Récupère le flux de données de la pièce jointe à partir de son identifiant "partId"
	Uri partURI = Uri.parse("content://mms/part/" + partId);
	InputStream is = context.getContentResolver().openInputStream(partURI);
	//Génère le flux d'écriture de la pièce jointe
	OutputStream out = new FileOutputStream(new File(Environment.getExternalStorageDirectory()+"/"+partId));
	byte[] buffer = new byte[512];
	int len = is.read(buffer);
	while (len >= 0) {
		out.write(buffer, 0, len);
		len = is.read(buffer);
	}
	out.close();
	is.close();
} catch (IOException e) {
	e.printStackTrace();
}

Il existe différentes façon de lister les SMS/MMS et donc de récupérer leur identifiant. Ceci est vrai également pour les pièces jointes d’un MMS. C’est pourquoi, je n’ai pas traité cette partie qui est suffisamment documentée dans la documentation officielle.

Conclusion

En résolvant ce problème, je me suis rendu-compte que les colonnes des fournisseurs de contenu dont le nom est “_data” sont des flux de données et doivent donc être récupérées de la même façon que les pièces jointes des MMS. Vous êtes donc paré pour affronter les méandres des fournisseurs de contenu et enregistrer tout un tas d’information comme les pièces jointes des MMS.