我想访问一个文件:" /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等等......没有任何工作。
有没有人可以帮助我,有完整的解决方案?
答案 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)。