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

posted @ 2015-10-07 00:14  水墨沙场  阅读(262)  评论(0编辑  收藏  举报