Android sd卡笔记
1. Environment.getExternalStorageDirectory() 的使用
(1)Environment.getExternalStorageDirectory()在部分手机中获取到的是内部存储路径,而不是sd卡路径,如三星手机等
(2).如果系统设置了优先存储在内置存储中,那么Environment.getExternalStorageDirectory()获取到的也是内部存储路径
(3)Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)在没有sd的部分手机
(1)Environment.getExternalStorageDirectory()在部分手机中获取到的是内部存储路径,而不是sd卡路径,如三星手机等
(2).如果系统设置了优先存储在内置存储中,那么Environment.getExternalStorageDirectory()获取到的也是内部存储路径
(3)Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)在没有sd的部分手机
(Environment.getExternalStorageDirectory()指向内部路径时)上也返回true
那么如何正确获取手机存储位置路径呢,这里附上链接:
http://blog.fidroid.com/post/android/ru-he-zheng-que-huo-de-androidnei-wai-sdqia-lu-jing (sd卡路径获取)
http://www.cnblogs.com/bluestorm/p/3694921.html (/storage/sdcard, /sdcard, /mnt/sdcard 三者的区别)
http://www.cnblogs.com/yejiurui/p/3421314.html (android中的目录结构介绍)
2. 在sd卡根目录下创建目录(部分手机)失败
因为在 Android4.4新版本中,Google针对外卡写权限增加了CTS用例,对外卡的写操作增加了限制,由此导致部分开发者的应用可能存在外卡写权限兼容性问题。
Android4.4对外卡的写操作进行增加了如下两条限制:
(1)通过用户态文件系统fuse对外卡的写权限进行了限制;
注意:随着应用的卸载,Android/data/<package-name>/目录也会被删除
参考:
http://developer.huawei.com/devunion/ui/newsDetail.html?news=/devunion/news/n_00033.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1027/1849.html (Android 外部存储权限分析)
https://developer.android.com/training/articles/scoped-directory-access.html
3. 在sd卡的Android/data/<package-name>/目录下mkdirs()失败(部分手机)
本人经过多次尝试,终于成功了,做法是:
(1)mContext.getExternalFilesDir(null).getAbsolutePath();//要先执行该方法,后面才能创建目录,否则失败
个人猜测是新建了Android/data/<package-name>/目录
(2)然后再调用mkdirs()
4. getExternalFilesDir(null)及getExternalFilesDirs(null)
getExternalFilesDir(null)返回的是SdCard/Android/data/应用包名/files或者内置存储路径/Android/data/应用包名/files
getExternalFilesDirs(null)返回的是内置和sd卡的/Android/data/应用包名/files
测试:
(1)有sd卡
那么如何正确获取手机存储位置路径呢,这里附上链接:
http://blog.fidroid.com/post/android/ru-he-zheng-que-huo-de-androidnei-wai-sdqia-lu-jing (sd卡路径获取)
http://www.cnblogs.com/bluestorm/p/3694921.html (/storage/sdcard, /sdcard, /mnt/sdcard 三者的区别)
http://www.cnblogs.com/yejiurui/p/3421314.html (android中的目录结构介绍)
2. 在sd卡根目录下创建目录(部分手机)失败
因为在 Android4.4新版本中,Google针对外卡写权限增加了CTS用例,对外卡的写操作增加了限制,由此导致部分开发者的应用可能存在外卡写权限兼容性问题。
Android4.4对外卡的写操作进行增加了如下两条限制:
(1)通过用户态文件系统fuse对外卡的写权限进行了限制;
- 用户只能在外卡Android/data/<package-name>/目录下进行写操作。
- 拥有WRITE_MEDIA_STORAGE权限(仅特权用户才能申请这个权限)的用户才能对整个外卡进行写操作。
注意:随着应用的卸载,Android/data/<package-name>/目录也会被删除
参考:
http://developer.huawei.com/devunion/ui/newsDetail.html?news=/devunion/news/n_00033.html
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1027/1849.html (Android 外部存储权限分析)
https://developer.android.com/training/articles/scoped-directory-access.html
3. 在sd卡的Android/data/<package-name>/目录下mkdirs()失败(部分手机)
本人经过多次尝试,终于成功了,做法是:
(1)mContext.getExternalFilesDir(null).getAbsolutePath();//要先执行该方法,后面才能创建目录,否则失败
个人猜测是新建了Android/data/<package-name>/目录
(2)然后再调用mkdirs()
4. getExternalFilesDir(null)及getExternalFilesDirs(null)
getExternalFilesDir(null)返回的是SdCard/Android/data/应用包名/files或者内置存储路径/Android/data/应用包名/files
getExternalFilesDirs(null)返回的是内置和sd卡的/Android/data/应用包名/files
测试:
(1)有sd卡
(2)无sd卡