本文将介绍Android真机环境下如何获取内置和外置SD卡路径。

测试环境:三星Note3,其他手机待测试。。。

所需权限(AndroidManifest.xml文件里)

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

获取路径代码(MainActivity.java文件)

  1. package com.example.androidtest;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import android.os.Bundle;
  9. import android.os.Environment;
  10. import android.app.Activity;
  11. import android.view.Menu;
  12. public class MainActivity extends Activity {
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. StringBuilder log = new StringBuilder();
  18. String inPath = getInnerSDCardPath();
  19. log.append("内置SD卡路径:" + inPath + "\r\n");
  20. List<String> extPaths = getExtSDCardPath();
  21. for (String path : extPaths) {
  22. log.append("外置SD卡路径:" + path + "\r\n");
  23. }
  24. System.out.println(log.toString());
  25. }
  26. /**
  27. * 获取内置SD卡路径
  28. * @return
  29. */
  30. public String getInnerSDCardPath() {
  31. return Environment.getExternalStorageDirectory().getPath();
  32. }
  33. /**
  34. * 获取外置SD卡路径
  35. * @return  应该就一条记录或空
  36. */
  37. public List<String> getExtSDCardPath()
  38. {
  39. List<String> lResult = new ArrayList<String>();
  40. try {
  41. Runtime rt = Runtime.getRuntime();
  42. Process proc = rt.exec("mount");
  43. InputStream is = proc.getInputStream();
  44. InputStreamReader isr = new InputStreamReader(is);
  45. BufferedReader br = new BufferedReader(isr);
  46. String line;
  47. while ((line = br.readLine()) != null) {
  48. if (line.contains("extSdCard"))
  49. {
  50. String [] arr = line.split(" ");
  51. String path = arr[1];
  52. File file = new File(path);
  53. if (file.isDirectory())
  54. {
  55. lResult.add(path);
  56. }
  57. }
  58. }
  59. isr.close();
  60. } catch (Exception e) {
  61. }
  62. return lResult;
  63. }
  64. @Override
  65. public boolean onCreateOptionsMenu(Menu menu) {
  66. // Inflate the menu; this adds items to the action bar if it is present.
  67. getMenuInflater().inflate(R.menu.activity_main, menu);
  68. return true;
  69. }
  70. }

其中,line.contains("extSdCard")判断部分有待进一步验证!

打印结果:

1. 插入一张外置SD卡后

  1. 内置SD卡路径:/storage/emulated/0
  2. 外置SD卡路径:/storage/extSdCard

2. 取出外置SD卡后

    1. 内置SD卡路径:/storage/emulated/0

android获取内置和外置SD卡路径 - z的更多相关文章

  1. Android内置和外置SD卡的位置获取

    public class StorageUtils { private static String TAG="123"; // 获取主存储卡路径 内置内存卡路径 public st ...

  2. Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...

  3. Android 5.1.1在外置SD卡中创建文件夹

    Android 4.4之后WRITE_MEDIA_STORAGE 权限仅提供给系统应用,不再授予第三方App,WRITE_EXTERNAL_STORAGE 权限,仅仅用于授权用户写 primary e ...

  4. 获取不同机型外置SD卡路径

    /** * 运行挂载命令.返回挂载的地址.然后将地址解析 */ private void getExtSDCardPath() { try { Runtime runtime = Runtime.ge ...

  5. Android开发获取多个存储空间的路径(内置SD卡以及外置SD卡)

    Android开发中经常会遇到多存储空间的问题,包括内置存储路径以及外置SD卡,而且有的时候会有多张外置SD卡,此时就需要获取不同的SD卡路径,然后根据需要来写入或者读出文件. 此处给出常用的SD卡工 ...

  6. 关于手机的内置SD卡与外置SD卡

    对于安卓2.3的系统来说,Environment.getExternalStorageDirectory()获取的目录是内置SD卡还是外置SD卡是无法保证的, 和手机厂商的修改有关,只能通过Envir ...

  7. android4.0 中关于内外置sd卡的获取及读写权限问题

    from://http://blog.chinaunix.net/uid-26727976-id-3146895.html 在2.x的版本中,在manifest中配置的权限android.permis ...

  8. Android手机外置SD卡(TF卡)的获取方法

    Android手机上的外置SD卡,起初的时候,即在Android出世的前几年,那时手机的存储是十分有限的,不像现在到处可见16G.32G和64G的存储,因而那时候的手机有的厂商允许插入外置的SD卡,此 ...

  9. Android获取SD卡路径/内存的几种方法

    Android获取SD卡路径 本篇将会带领大家学习如何获取android路径的几种常见用法,但在我开始bb之前需要大家清楚android中内存和外存之间的区别,下面进行简短介绍:android中的内存 ...

随机推荐

  1. 自定义多选框(checkbox)和单选框(radio)css样式

    直接上代码: input[type="radio"],input[type="checkbox"]{ -webkit-appearance: none; out ...

  2. 关于Web中列表页面的加载问题

    2017年5月23日,天气晴朗.尽管昨晚睡的不踏实,好在今天心情还不是很糟糕,近来事情颇多,尤其是对于TA的改变,至少目前还是没有习惯,但时间将会解决一切,这点深有体会.此时此刻,又想起了苏东坡的那首 ...

  3. input radio单选框样式优化

    HTML代码: <form> <div> <input id="item1" type="radio" name="it ...

  4. [Android] Service服务详解以及如何使service服务不被杀死

    排版上的细节有些不好看,主要是我用的MarkDown编辑器预览和这里的不一样,在那个上面的样式很舒服.这里要改的地方太多就不想改了,将就看吧.下次写的时候注意.还有看到错误给我提啊. 本文链接:htt ...

  5. fiddler常见的应用场景

    在移动互联网时代,作为软件测试工程师,fiddler绝对是值得掌握并添加进技术栈里的工具之一. 那么,fiddler在日常的测试工作中,一般都有哪些常见的应用场景呢? 根据以往工作经验,大概有如下4类 ...

  6. 使用Eclipse Debug的一些说明

    目录 Debug视图 线程堆栈视图 变量视图 断点视图 表达式视图 代码视图 远程Debug 异常断点 条件断点 表达式 Debug定位第三方插件的问题 Debug一些经验   Debug视图 认识d ...

  7. 在阿里云Windows Server 上部署ASP .NET CORE2.0项目

    近期使用ASP.NET Core2.0对博客进行了重写,在部署到服务器时遇到了一些问题,来记录一下留用. 配置环境 安装 .Net Framework3.5 在IIS管理器上直接开启,这里总是失败,上 ...

  8. Arcgis for Js之加载wms服务

    概述:本节讲述Arcgis for Js加载ArcgisServer和GeoServer发布的wms服务. 1.定义resourceInfo var resourceInfo = { extent: ...

  9. Swift 实践篇之链式 UI 代码

    https://blog.nswebfrog.com/2017/10/20/swift-practice-ui-chaining-code/

  10. Netty入门(三)构成部分

    该节主要讲解 Netty 的构成部分. 一.Channel 它代表一个用于连接到实体如硬件设备.文件.网络套接字或程序组件,能够执行一个或多个不同的 I/O 操作的开放连接.可以比作传入和传出数据的传 ...