2017-06-08 3 views
-2

Je veux accéder à un fichier: "/mnt/media_rw/72Ab-289A/myFile.mp3" Ce fichier est situé sur ma clé USB sur mon smartphone Android Moto G5 7.Fichiers Android Accès au sticker USB?

Mais ce n'est pas possible ... Je ne peux pas lire le dossier/mnt/media_rw /.

Les autorisations: WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE sont définies, ce n'est donc pas un problème.

Je l'ai essayé pendant 5 heures, avec google, Environment.getExternalStorageDirectory(), ContextCompat.getExternalFilesDirs, File.readFiles, et bien plus encore ... rien ne fonctionne.

Y a-t-il quelqu'un là-bas et qui peut m'aider avec une solution complète?

+0

double possible de [Accédez au périphérique USB de stockage de masse dans Android] (https://stackoverflow.com/questions/24075352/get-access- to-usb-mass-stockage-device-in-android) –

+0

Merci, j'ai lu ce post quelques heures avant, mais ne fonctionne pas. La clé USB n'est pas sur "/ storage/UsbDriveA /" – Kyle

Répondre

0

Il semble que ce soit quelque chose avec les autorisations USB ou Drive. Sur mon ODROID C2 avec Android 6 ça marche bien. Mais avec mon Moto G5 (Android 7) et Asus Zen Tablet (Android 6) ça ne marche pas.

Je peux sélectionner un fichier avec « Intent.ACTION_OPEN_DOCUMENT » Sélecteur de fichiers, et sur tous les périphériques du Chemin du document est le même ... mais, certains des volumes ne sont pas là:

Asus Zen (Android 6)

Volume:/stockage/émulé/0

fichier sélectionné: /storage/7C23-16EA/m_BlueforLabrusca.mp3

. . .

ODROID C2 (6 applications)

Volume:/stockage/émulé/0

Volume:/stockage/interne

Volume:/stockage/7C23-16EA

fichier sélectionné : /storage/7C23-16EA/m_BlueforLabrusca.mp3

StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); 
Class<?> StorageVolume = Class.forName("android.os.storage.StorageVolume"); 
Method getVolumeListMethod = StorageManager.class.getDeclaredMethod("getVolumeList"); 
Method methodGetPath = StorageVolume.getDeclaredMethod("getPath"); 

Object[] storageVolumeList = (Object[]) getVolumeListMethod.invoke(storageManager); 
    final int length = Array.getLength(storageVolumeList); 
      for (int i = 0; i < length; i++) { 

       Object storageVolumeElement = Array.get(storageVolumeList, i); 
       String path = (String) methodGetPath.invoke(storageVolumeElement); 
       path = new File(path).getAbsolutePath(); 

       volumes.add(new File(path)); 

       Log.i("!!!","Volume: " + path); 
      }