Android文件USB Stick访问?

时间:2017-06-08 04:13:31

标签: android usb

我想访问一个文件:" /mnt/media_rw/72Ab-289A/myFile.mp3" 此文件位于我的Moto G5 Android 7智能手机上的USB记忆棒上。

但它不可能......我无法读取/ mnt / media_rw /文件夹。

权限:WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE已设置,所以这不是问题。

我已经尝试了5个小时,使用google,Environment.getExternalStorageDirectory(),ContextCompat.getExternalFilesDirs,File.readFiles等等......没有任何工作。

有没有人可以帮助我,有完整的解决方案?

3 个答案:

答案 0 :(得分:1)

它似乎与USB或驱动器权限有关。在Android 6的ODROID C2上,它运行正常。但是使用我的Moto G5(Android 7)和华硕Zen平板电脑(Android 6),它无法正常工作。

我可以用" Intent.ACTION_OPEN_DOCUMENT"选择一个文件。文件选择器,在所有设备上,文档路径是相同的......但是,有些卷不在那里:

华硕禅(Android 6)

卷:/ storage / emulated / 0

所选文件:/storage/7C23-16EA/m_BlueforLabrusca.mp3

。 。

ODroid C2(Android 6)

卷:/ storage / emulated / 0

卷:/ storage / internal

卷:/ storage / 7C23-16EA

所选文件:/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);
            }

答案 1 :(得分:0)

好的,发现了。

它无法使用正常的文件/存储命令。

唯一的方法是使用Documents Framework: https://developer.android.com/guide/topics/providers/document-provider.html

答案 2 :(得分:0)

尝试使用Storage Access Framework(SAF)。