0

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

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

4

1 回答 1

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];
}
于 2015-01-27T18:40:16.680 回答