Android获取外置SD卡读写路径
16lz
2022-06-21
1. 外置SD卡的一些问题
1.1 关于外置SD卡上的读写路径
Android 4.4
及以上版本,应用的外置SD卡读写路径被限定在固定路径上(外置SD卡根路径/Android/data/包名/files
)。
Android4.4
以下版本,申请了外置SD卡读写权限的应用在整个外置SD卡上都有读写权限。
1.2 关于外置SD卡路径
另外Android没有提供获取外置SD卡路径的API(getExternalStorageDirectory()
获取的实际是内置SD卡路径)。
2. 获取应用在外置SD卡读写根路径
在Android 4.4
以下版本,获取的应该是外置SD卡的根目录(类似/storage/sdcard1
)。在Android 4.4
及以上版本,获取的是应用在SD卡上的限定目录(外置SD卡根路径/Android/data/包名/files/file
)
代码如下:
public static String getExternalSDPath(Context aContext) { String root = null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { root = getExternalSDPathKITKAT(aContext); File f = new File(root); if (!f.exists()) { try { f.mkdirs(); } catch (Exception e) { e.printStackTrace(); } if (!f.exists()) { root = null; } } } else { root = getExternalSDCardPath(aContext); } return root; } // Android 4.4及以上版本,获取软件在外置SD卡上的保存路径 public static String getExternalSDPathKITKAT(Context aContext) { String rootPath = getStoragePath(aContext, true); if (TextUtils.isEmpty(rootPath)) { return null; } File f = new File(rootPath, "Android/data/" + aContext.getPackageName() + "/files/file"); String fpath = f.getAbsolutePath(); return fpath; } // Android 4.4 以下版本获取外置SD卡根目录 public static String getExternalSDCardPath(Context aContext) { HashSet paths = getExternalMounts(); File defaultPathFile = aContext.getExternalFilesDir(null); String defaultPath; if (defaultPathFile == null) { return null; } else { defaultPath = defaultPathFile.getAbsolutePath(); } String prefered = null; for (Iterator it = paths.iterator(); it.hasNext();) { String path = (String) (it.next()); if (prefered == null && !defaultPath.startsWith(path)) { prefered = path; } } return prefered; }
更多相关文章
- Android多点触控开发原理
- android 蓝牙开发
- Kernel.org 被黑,获取 Android(安卓)源码方法一则
- android 获取汉字拼音
- Android(安卓)操作系统 获取Root权限 原理解析
- Android仿人人客户端(v5.7.1)——个人主页(一)
- Android中获取文本宽度和高度
- Android中的URI 和Uri
- Pycharm安装PyQt5的详细教程