78 votes

Nexus 4 n'affiche pas les fichiers via MTP

J'essaie d'écrire simplement un simple fichier XML sur la carte SD et j'ai remarqué que mon Nexus 4 écrit bien le fichier, mais qu'il n'est pas visualisable via le protocole MTP sous Windows 7.

code :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    CustomerQueryRqType customerQueryRequest = new CustomerQueryRqType();
    Serializer serializer = new Persister();
    File myFile = new File(Environment.getExternalStorageDirectory() + "/customerQueryRequest.xml");

    try {
        boolean created = myFile.createNewFile();
        serializer.write(customerQueryRequest, myFile);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Je peux voir le fichier sur le téléphone lui-même avec Astro File Manager :

Screenshot

mais Windows ne le voit pas... :

Screenshot

adb shell sur le répertoire montre :

ls -l
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Alarms
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Android
drwxrwxr-x root     sdcard_rw          2012-11-21 19:30 DCIM
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Download
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Movies
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Music
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Notifications
drwxrwxr-x root     sdcard_rw          2012-11-19 12:06 Pictures
drwxrwxr-x root     sdcard_rw          1970-01-16 20:51 Podcasts
drwxrwxr-x root     sdcard_rw          2012-11-19 13:22 Ringtones
drwxrwxr-x root     sdcard_rw          2012-11-19 14:33 bluetooth
-rw-rw-r-- root     sdcard_rw       79 2012-12-05 22:26 customerQueryRequest.xml
drwxrwxr-x root     sdcard_rw          2012-11-20 02:50 data
-rw-rw-r-- root     sdcard_rw    11394 2012-11-19 13:54 eightpen_custom_gestures
drwxrwxr-x root     sdcard_rw          2012-11-19 13:17 media

Qu'est-ce qui se passe avec mon Nexus 4 ? Pourquoi cache-t-il mes affaires à Windows ?

71voto

Kevin Panko Points 4481

Il semble qu'il s'agisse d'un problème connu affectant l'accès aux fichiers USB Android via MTP . Le cache MTP n'est plus à jour jusqu'au redémarrage du téléphone.

A solution de contournement est :

  • Effacez les données de l'application "Media Storage".
  • Utilisez le SDrescan ou le Scanner SD (fonctionne également sur Android 4.4/5, disponible sur F-Droid ) pour forcer une mise à jour

Ou alors, évitez tout simplement d'utiliser l'USB. Le problème n'affecte pas les autres méthodes d'accès aux fichiers. Par exemple, essayez AirDroid pour transférer des fichiers.


Note : Cela ne fonctionne pas pour Android 5.0.2 : Après avoir effacé "Media Storage" et utilisé un SD Rescanner, les dossiers apparaissent dans Windows 7 comme des fichiers 4K non ouvrables. La seule solution à ce stade est d'effacer une fois de plus Media Storage et de redémarrer l'appareil.

44voto

Sathesh Points 467

Vous pouvez utiliser le code suivant après la fermeture du fichier

MediaScannerConnection.scanFile(this, new String[] { file.getAbsolutePath() }, null, null);

Source : https://code.google.com/p/Android/issues/detail?id=38282

3voto

marcin_j Points 12237

Sur Xperia Z le code ci-dessous a fonctionné parfaitement :

  String screenShotFile = "....";
  activity.sendBroadcast(new Intent(
        Intent.ACTION_MEDIA_MOUNTED, Uri
                .fromFile(screenShotFile)));

pour une utilisation en 4.4+ :

activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                                Uri.fromFile(screenShotFile)));

(malheureusement, je ne me souviens pas si je l'ai testé suffisamment bien).

http://commonsware.com/blog/2013/11/06/Android-4p4-permission-regressions.html

2voto

Adam Weld Points 29

Avis /stockage/émulation. Android 4.2 a quelques trucs bizarres d'accès émulé par application/utilisateur, par exemple un /sdcard/ séparé pour chaque utilisateur. Essayez de déplacer le fichier vers /sdcard/ au lieu de l'émulé sdcard qui est affiché.

2voto

stephan Points 116

Le code simple proposé à la question Comment rafraîchir MediaStore sur Android ? fait la mise à jour nécessaire de MediaStore, si elle est appelée après que j'ai mis un fichier sur le stockage externe. Le contenu de mon Nexus 4 est actualisé instantanément dans l'explorateur de fichiers de Window 7.

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