android各种获取sdcard状态

来源:互联网 发布:淘宝手机优惠券 编辑:程序博客网 时间:2024/05/16 05:48

安卓程序在对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(){@Overridepublic 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();}}};



1 0