Récemment, j’ai développé un plugin pour One Launcher qui permet de sauvegarder les données utilisateurs sur la mémoire externe afin de pouvoir les restaurer plus tard.

La sauvegarde fonctionnait très bien : pas d’erreur et le fichier de sauvegarde visible sur le téléphone. Cependant, en branchant le téléphone en USB sur mon PC, il m’était impossible de voir le fichier nouvellement créé. Pour le voir, il fallait redémarrer le téléphone. Ce qui, vous en conviendrez, n’est pas très pratique !

Android MTP

Après quelques recherches, il s’avère que le driver USB Windows pour les périphériques Android utilise (maintenant ?) le protocole MTP. Or, ce driver utilise (trop bien) un cache. C’est ce cache qui empêche de voir les nouveaux fichiers créés. Heureusement, il existe un Intent qui permet de forcer la mise à jour de ce cache.

Donc, voici le code à appeler après avoir écrit sur l’espace de stockage externe afin que le fichier soit visible sur Windows :

File fileToWriteOnExternalStorage = null;
// écriture du fichier
// ...
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(fileToWriteOnExternalStorage)));

Cette méthode a été testée et validée sur Android 4.0 (Wiko Cink Peax) et Android 4.4 (Nexus 5).