我正在使用afilechooser模块从用户的设备中选择一个文件。该设备具有内部存储和外部存储。当我从内部存储器中选择一个文件时,路径会正确返回,uri看起来像这样:
Uri =content://com.android.externalstorage.documents/document/primary%3Amyfile.txt
然而,当我从外部SD卡中选择一个文件并且URI看起来像这样时,afilechooser失败了:
Uri = content://com.android.externalstorage.documents/document/3935-6562%3Amyfile.txt
所以我正在查看afilechooser getPath方法中的代码,它有这样的条件:
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
现在我可以看到它没有得到路径,因为它不包含主要包含“3935-6562”现在我可以写另一个条件来测试这个,但我想知道。在这个设备上它是“3935-6562”但是在不同的设备上它仍然是相同的数字?如果它们因设备而异,我该如何制作呢?它会起作用?另外如果“3935-6562”在所有设备上都是相同的,我将如何获得它的路径,因为Environment.getExternalStorageDirectory()似乎返回内部sd路径,而不是外部
提前致谢。 我还在学习这些东西,所以请尽可能简单。
答案 0 :(得分:0)
我发现这是一个解决方案,不确定它是否是最好的方法..任何输入都将不胜感激
if ("primary".equalsIgnoreCase(type)) {
Log.i ("PRIMARY", Environment.getExternalStorageDirectory() + "/" + split[1]);
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
else {
String sdpath=null;
if(new File("/storage/extSdCard/").exists()){
sdpath="/storage/extSdCard/";
Log.i("Sd Cardext Path",sdpath);
}
if(new File("/storage/sdcard1/").exists()){
sdpath="/storage/sdcard1/";
Log.i("Sd Card1 Path",sdpath);
}
Log.i ("EXT", sdpath + split[1]);
return sdpath + split[1];
}