J'essaie de créer quelque chose comme un explorateur de fichiers via des périphériques USB connectés (via les ports OTG ou USB sur Android TV). Tout ce dont j'ai besoin pour cela est un chemin quelque chose comme "/ storage/sda4" et l'identifiant de l'appareil, puis je peux travailler avec le périphérique via simle android class File. Cela semble simple mais je ne trouve aucune information à ce sujet, mais tous les explorateurs de fichiers peuvent le faire (par exemple ESExplorer). Ok, je trouve un moyen simple d'obtenir tous les périphériques USB connectés avec identifiantComment puis-je lire des fichiers à partir d'un périphérique USB sur Android?
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
usbManager.getDeviceList();
mais comment puis-je obtenir une information sur le chemin path? deviceName contient quelque chose comme ceci "/ dev/bus/usb/00x" mais il ne peut pas m'aider, j'ai besoin d'un simple chemin android émulé ("/ storage/sda4"). Cette page https://developer.android.com/guide/topics/connectivity/usb/host.html dit que j'ai besoin d'obtenir UsbInterfaces et de rendre UsbConnection au transfert en vrac et à d'autres conneries, j'ai tout fait mais je n'ai pas trouvé de chemin vers le périphérique ou d'autres informations sur la liste de fichiers usb.
Ok, je trouve une autre façon d'obtenir (qui ne nécessite pas l'autorisation!) Pour obtenir le chemin à tous les appareils connectés
StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
Method getVolumeListMethod = StorageManager.class.getDeclaredMethod("getVolumeList");
Object[] storageVolumeList = (Object[]) getVolumeListMethod.invoke(storageManager);
et il fonctionne, mais je dois identifier un dispositif (parce que je veux fichiers cache de différents stockages USB) mais tout ce que je peux obtenir à partir de l'objet volume est mStorageId, mDescriptionId, mPrimary, mRemovable, mEmulated, mMtpReserveSpace, mAllowMassStorage, mMaxFileSize, mOwner, mUuid, mUserLabel, mState, mSubSystem. Rien de cela ne peut pas identifier le périphérique: mDescriptionId et mStorageId sont unique pour le port usb, mUuid est nul, mUserLabel n'est pas unique.
Environment.getExternalFilesDirs() n'aidera pas, il ne fournit aucun identifiant de périphérique et ne fonctionne qu'avec un périphérique.
Je trouve une question similaire ici, mais elle n'a pas de bonne réponse Android list files from USB Drive.
Eh bien, est un moyen simple d'obtenir la liste des périphériques USB avec chemin et identifiant existe?
Jetez un oeil à 'getExternalFilesDirs()'. La troisième entrée serait le lecteur OTG USB. – greenapps
Je viens de modifier la question, j'ai mentionné getExternalStorageDirectory au lieu de getExternalFilesDirs. Il ne fournit aucun identifiant d'appareil – LamaUltramarine
Pour quoi avez-vous besoin d'un identifiant d'appareil si vous voulez faire un explorateur de fichiers? Vous avez seulement besoin d'un chemin. Et getExternalFilesDirs() vous le donnera. Ne dites pas que ce n'est pas le cas! – greenapps