afilechooser没有为具有外部和内部存储的设备返回路径

时间:2015-01-27 17:20:17

标签: android android-afilechooser

我正在使用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路径,而不是外部

提前致谢。 我还在学习这些东西,所以请尽可能简单。

1 个答案:

答案 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];
}