SharedPreferences共享参数
SharedPreferences是Android系统提供的一个通用的数据持久化框架,用于存储和读取key-value类型的原始基本数据类型对,目前支持String、int、long、float、boolean等基本类型的存储,对于自定义的对象数据类型,无法使用SharedPreferences来存储。
SharedPreferences主要用于存储系统的配置信息。例如上次登录的用户名,上次最后设置的配置信息(如:是否打开音效、是否使用振动,小游戏的玩家积分等)。当再次启动程序后依然保持原有设置。SharedPreferences用键值对方式存储,方便写入和读取。
使用步骤:
2、调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。
3、向SharedPreferences.Editor对象中添加数据。
详细过程:
方法:
Context.getSharedPreferences(文件名称,操作模式)
文件名称不存在就会创建一个,操作模式有两种:
MODE_PRIVATE:默认操作模式,直接在把第二个参数写0就是默认使用这种操作模式,这种模式表示只有当前的应用程序才可以对当前这个SharedPreferences文件进行读写。
MODE_MULTI_PRIVATE:用于多个进程共同操作一个SharedPreferences文件。
注:MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE这两种模式已经在Android4.2版本以后废弃了。
文件存储路径:
/data/data/{appPackageName}/files/{filename}
扩展储存:
External Storage外部存储:
1.外部存储不见得总是可用的,例如:SDCard会被移除;
2.外部存储是全局可见的(可读的),存放到外部存储中的文件可以被当前设备中的所有能够操作该文件的app访问;
3.为了更好的管理外部存储,安卓系统进行了更细致的划分: 可划分为公共的外部存储和私有的外部存储
当app程序卸载时,私有外部存储中的文件会随着app的移除而被移除,而公共的外部存储则不移除;
4.如果当前的文件需要分享给手持设备中的其他app访问,或者是文件的安全性能不做具体要求时, 可以存储到公共路径下.
1.获取sdcard状态: String Environment.getExternalStorageState():
Environment.MEDIA_MOUNTED 介质已加载完
Environment.MEDIA_MOUNTED_READ_ONLY 介质已加载完,但是只读状态
Environment.MEDIA_CHECKING 正在检测介质
Environment.MEDIA_UNKNOWN 介质未知
Environment.MEDIA_UNMOUNTED 介质已卸载
获取公共目录: Environment.getExternalStoragePublicDirectory(String type)
Environment.DIRECTORY_MOVIES
Environment.DIRECTORY_MUSIC
Environment.DIRECTORY_DOCUMENTS
Environment.DIRECTORY_DOWNLOADS
Environment.DIRECTORY_PICTURES
Environment.DIRECTORY_RINGTONES
获取根目录:Environment.getExternalStorageDirectory()
获取下载缓存目录:Environment.getDownloadCacheDirectory()
读写SD卡的步骤:
先判断手机是否有sd卡:Environment.getExternalStorageState()
获取sdcard的路径:Environment.getExternalStorageDirectory()
此外还可以获取SDCard可用磁盘空间的大小(借助StatFs类来实现)
获取SDcard总大小
// StatFs用来计算文件系统空间大小的一个类.
// 这个类是对Unix中的statvfs()这个方法的包装类.
StatFs stat = new StatFs(getSDCardPath());
// 得到块的数量
// int blockCount = stat.getBlockCount();
// 得到每块的大小
// int blockSize = stat.getBlockSize();
// return blockCount*blockSize/1024/1024;
long blockCountLong = stat.getBlockCountLong();
long blockSizeLong = stat.getBlockSizeLong();
return blockCountLong * blockSizeLong / 1024 / 1024;
获取可用的Sdcard的存储大小
StatFs stat = new StatFs(getSDCardPath());
// 可用的块数
long availableBlocksLong = stat.getAvailableBlocksLong();
// 每块的大小
long blockSizeLong = stat.getBlockSizeLong();
return availableBlocksLong * blockSizeLong / 1024 / 1024;
清单文件中设置读写sdcard的权限
执行读写操作(基本IO流操作)
相关权限
读权限:android.permission.READ_EXTERNAL_STOARAGE
读写权限:android.permission.WRITE_EXTERNAL_STOARAGE