Android:查找SD卡路径

在Android中找到SD卡路径很容易,对吧? 您所要做的就是使用Environment.getExternalStoreDirectory() ,一切顺利!

好吧,不完全是。

毕竟,这就是StackOverflow所说的。 如果您实际在三星设备上尝试上述方法,那么生活对您而言将不会很有趣。 实际上,大多数三星设备上的Environment.getExternalStoreDirectory()返回的路径都不正确。 这就是我遇到的问题。 事实证明,以上方法实际上并不能保证它会返回SD卡目录。 根据Android的API 文档

“在具有多个“外部”存储目录(例如安全应用程序存储和可挂载的共享存储)的设备中,该目录表示用户将与之交互的“主要”外部存储。”

因此,该呼叫不能保证返回的路径确实指向SD卡。 不过,还有其他几种方法可以在设备上获取可以存储文件的“外部”路径,例如getExternalFilesDir()

还有其他一些技巧可以实际获取SD卡目录的路径。 以下代码适用于大多数Android设备(包括三星)。 不过,这是一个非常骇人听闻的解决方案,谁知道此技巧将实际起作用多长时间( 来源 )。 最好使用以下问题,而不是使用下面的代码:“我真的需要SD卡目录,还是仅要将文件存储到的路径?”

File file = new File("/system/etc/vold.fstab");
     FileReader fr = null;
     BufferedReader br = null;
    
     try {
         fr = new FileReader(file);
     } catch (FileNotFoundException e) {
         e.printStackTrace();
     } 
    
     try {
         if (fr != null) {
             br = new BufferedReader(fr);
             String s = br.readLine();
             while (s != null) {
                 if (s.startsWith("dev_mount")) {
                     String[] tokens = s.split("\\s");
                     path = tokens[2]; //mount_point
                     if (!Environment.getExternalStorageDirectory().getAbsolutePath().equals(path)) {
                         break;
                     }
                 }
                 s = br.readLine();
             }
         }            
     } catch (IOException e) {
         e.printStackTrace();
     } finally {
         try {
             if (fr != null) {
                 fr.close();
             }            
             if (br != null) {
                 br.close();
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
     }

祝您编程愉快,别忘了分享!

参考: Android教程:通过Programming Mobile博客从我们的JCG合作伙伴 Isaac Taylor 查找SD卡路径


翻译自: https://www.javacodegeeks.com/2012/10/android-finding-sd-card-path.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值