您的位置:首页 > 移动开发 > Android开发

android各种获取sdcard状态

2014-11-26 20:17 253 查看
安卓程序在对sdcard操作时,常常需要先获取sdcard的当前状态,常见的sdcard状态获取和判断取有如下方法

<span style="font-size:18px;">/** 获取存储卡路径 */
File sdcardDir=Environment.getExternalStorageDirectory();
/** StatFs 看文件系统空间使用情况 */
StatFs statFs=new StatFs(sdcardDir.getPath());
/** Block 的 size*/
Long blockSize=statFs.getBlockSize();
/** 总 Block 数量 */
Long totalBlocks=statFs.getBlockCount();
/** 已使用的 Block 数量 */
Long availableBlocks=statFs.getAvailableBlocks();
/** 格式化可用大小 */
Formatter.formatFileSize(getApplicationContext(), availableBlocks);</span>


通过广播机制判断当前sdcard的状态

注册sdcard状态广播:



private void initSDCard() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.setPriority(1000);// 设置最高优先级
intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);// sd卡被插入,且已经挂载
intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);// sd卡存在,但还没有挂载
intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);// sd卡被移除
intentFilter.addAction(Intent.ACTION_MEDIA_SHARED);// sd卡作为
// USB大容量存储被共享,挂载被解除
intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);// sd卡已经从sd卡插槽拔出,但是挂载点还没解除
// intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);// 开始扫描
// intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);// 扫描完成
intentFilter.addDataScheme("file");
registerReceiver(sdCardReceiver, intentFilter);// 注册监听函数

}


定义sdcard状态广播:

private final BroadcastReceiver sdCardReceiver = new BroadcastReceiver(){

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("android.intent.action.MEDIA_REMOVED")// 各种未挂载状态
|| action.equals("android.intent.action.MEDIA_UNMOUNTED")
|| action.equals("android.intent.action.MEDIA_BAD_REMOVAL")
|| action.equals("android.intent.action.MEDIA_SHARED")) {
finish();
Toast.makeText(MainContentActivity.this, "SD卡已被拔出,本地数据没法初始化!",
Toast.LENGTH_SHORT).show();
}
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: