一、概述
所有Android设备都支持可以保存文件的共享外部存储器,这个外部存储器可以是可移动存储器(如SD卡),也可以是内置在设备中的外部存储器(不可移动)。外部存储器上的文件时全部可读的,当设备通过USB连接电脑和电脑互传文件时,外部存储器上的文件不可修改。
当外部存储器被挂载到电脑上或被移除,文件对android设备就不可见了,且此时外部存储器上的文件是没有安全保障的。所有程序都可以读写外部存储器上的文件,用户也可以删除这些文件。
在模拟器中使用SDCard,你需要先创建一张SDCard卡(当然不是真的SDCard,只是镜像文件)。创建SDCard可以在Eclipse创建模拟器时随同创建,也可以使用DOS命令进行创建,如下:在Dos窗口中进入androidSDK安装路径的tools目录,输入以下命令创建一张容量为2G的SDCard,文件后缀可以随便取,建议使用.img:
mksdcard 2048M D:\AndroidTool\sdcard.img
警告:里面的这些外部文件是会消失不可见的——如果用户把外部存储器挂在到一台电脑上或移除该媒介(SD卡),同时你储存在外部储存器上的文件没有强制的安全保证。
所有应用程式都可以读写这些文件并且用户也可以删除它们。
二、应用
1.(公有)访问外部存储中的文件
如果不希望创建的文件在应用卸载后被删除,可以使用下面的方法,因为目录和文件不会随着应用程序的卸载而被删除;
目录和文件位于外部存储(SD卡)的根目录中:Musics/、Pictures/、Movies/等;
API8及以上:
getExternalStoragePublicDirectory(String type),打开一个外部存储目录,参数type指定子目录类型(DIRECTORY_MUSIC、DIRECTORY_PICTURES等);
public class Environment {
public static StringDIRECTORY_MUSIC = "Music"; //音频文件
public static StringDIRECTORY_PODCASTS = "Podcasts"; //广播
public static StringDIRECTORY_RINGTONES = "Ringtones"; //铃声
public static StringDIRECTORY_ALARMS = "Alarms"; //警报
public static StringDIRECTORY_NOTIFICATIONS = "Notifications"; //通知
public static StringDIRECTORY_PICTURES = "Pictures"; //图片
public static StringDIRECTORY_MOVIES = "Movies"; //电影
public static StringDIRECTORY_DOWNLOADS = "Download"; //下载
public static StringDIRECTORY_DCIM = "DCIM"; //照片
//...不完整的Environment类内容
}
API7及以下:
getExternalStorageDirectory(),返回外部存储的根目录的File对象。然后将文件存储在:
Music/- 媒体扫描仪划分为用户的音乐在这里发现的所有媒体。
Podcasts/- 媒体扫描仪的分类在这里找到一个podcast的所有媒体。
Ringtones/ - 媒体扫描器分类作为铃声,在这里发现所有的媒体。
Alarms/- 媒体扫描仪发出报警声,这里发现的所有媒体分类。
Notifications/- 媒体扫描仪的分类作为通知的声音在这里发现的所有媒体。
Pictures/- 所有照片(不包括那些用相机拍摄)。
Movies/- 所有电影(不包括用摄像机拍摄的)。
Download/- 杂项下载。
2.(私有)访问外部存储中的文件
应用程序被卸载,目录和内容随之被卸载;
目录结构:/Android/data/<package_name>/files;
API8及以上:
getExternalStoragePublicDirectory(String type),打开一个外部存储目录,参数type指定子目录类型(DIRECTORY_MUSIC、DIRECTORY_PICTURES等,Null则为根目录);
API7及以下: