android 读写SD问题
昨晚学习android的文件IO,写测试文件,将文本保存在SD卡中,可是搞来搞去,文件总是被保存在手机存储里面了,我很纳闷,一直百度无果,又问群里的朋友,群里人的说法都和百度的结果差不多。大家都认为下面的代码可以得到SD卡的路径。
Environment.getExternalStorageDirectory().getAbsolutePath()
可是文件却总是保存在手机存储中,真是见了鬼。后来多番查阅资料才知道,google狗日的改了API,这样的代码只在android 4.4 API和android 4.4 系统有效。
在 2.x 版本中,Android设备都是单存储,第三方App写文件,必须申请 WRITE_EXTERNAL_STORAGE 权限;
在4.0之后,Android设备开始有了内置闪存,即 primary storage,并且可以外置SD卡,即 secondary external storage device;
WRITE_EXTERNAL_STORAGE 权限变成了仅仅控制 primary storage,同时引入了 WRITE_MEDIA_STORAGE 权限来控制secondary external storage device的操作。
到了Android 4.4 KitKat,WRITE_MEDIA_STORAGE 权限仅提供给系统应用,不再授予第三方App。
关于 secondary external storage device 的写操作也有了新规定。
WRITE_EXTERNAL_STORAGE 权限,仅仅用于授权用户写 primary external storage,除了与自己包名相关的文件夹之外,应用程序不允许写secondary external storage devices。
举例来说,如果应用的包名是com.example.foo,那么外部存储上的Android/data/com.example.foo/文件夹就可随意访问,其他任何地方都不允许写,并且,存储在自己包名相关的文件夹的文件,当该应用被卸载时候也会随之被清除。
那么以后开发程序就要按照google的要求来。
本文参考http://my.oschina.net/liucundong/blog/314520