Android 使用SD卡的检查

1、检查是否存在SD卡

/**
	 * 检查是否存在SD卡
	 * @return
	 */
	public static boolean isSdcardExist(){
		return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ? true : false;
	}


2、检查是否有SD卡存储与读取权限

/**
	 * 返回SD卡是否由读写权限
	 * @param requireWriteAccess 是否需要写权限
	 * @return
	 */
	public static boolean hasStorage(boolean requireWriteAccess){
		if (isSdcardExist()) {
			if(requireWriteAccess){
				return checkFSWritable();
			}else{
				return true;
			}
		}
		return false;
	}


/**
	 * 检查是否可以读写
	 * @return
	 */
	private static boolean checkFSWritable() {
		String dirName = Constants.APP_DIR;
		File dir = new File(dirName);
		if(!dir.isDirectory() && !dir.mkdirs()) return false;
		return dir.canWrite();
	}


3、检查SD卡控件是否充足

/**
	 * 得到SD卡空余空间大小
	 * @return
	 */
	private static long getAvailableStorage(){
		if(!hasStorage(true)){
			return Constants.NO_STORAGE_ERROR;
		}else{
			StatFs stat = new StatFs(Constants.EXTERNAL_STORAGE_DIR);
			return (long) stat.getAvailableBlocks() * (long) stat.getBlockSize();
		}
	}


4、得到SD卡状态信息

/**
	 * 得到SD卡读取状态编码
	 * 如果没有可用空间  返回没有SD卡
	 * 如果空间小于一定值  返回SD卡空间不足
	 * 如果空间充足  返回OK
	 * @return
	 */
	private static int getStorageStatus(){
		long remaining = getAvailableStorage();
		if(remaining == Constants.NO_STORAGE_ERROR){
			return Constants.STORAGE_STATUS_NONE;
		}
		return remaining < Constants.LOW_STORAGE_THRESHOLD ? Constants.STORAGE_STATUS_LOW : Constants.STORAGE_STATUS_OK;
	}



5、检查是否存在相应目录,如果没有则建立

/**
	 * 查询APP目录是否存在并建立不存在的目录
	 * @return
	 */
	static int checkAppDirsAndMkdirs(){
		int status = getStorageStatus();
		if(status == Constants.STORAGE_STATUS_NONE){
			return Constants.STORAGE_STATUS_NONE;
		}else if(status == Constants.LOW_STORAGE_THRESHOLD){
			return Constants.STORAGE_STATUS_LOW;
		}else{
			String[] appDirs = new String[]{
					Constants.APP_DIR, Constants.ERROR_LOG_DIR
			};
			
			File file = null;
			for (String dir : appDirs) {
				file = new File(dir);
				if (!file.exists() || !file.isDirectory()) {
					file.mkdirs();
				}
			}
			return Constants.STORAGE_STATUS_OK;
		}
	}

6、复制文件或存储文件流

如果是文件流需要修改部分代码

private boolean copyAPPToSD(String strOutFileName,String str) 
    {  		
        InputStream myInput = null;  
        OutputStream myOutput = null;	
	try {
		File target = new File(str);
		if(StorageCheck.checkAppDirsAndMkdirs()==Constants.STORAGE_STATUS_OK
				&&!target.exists()){				
			target.createNewFile();				
		}
		myOutput = new FileOutputStream(strOutFileName);
		myInput = context.getAssets().open(str);  	
		byte[] buffer = new byte[1024];  
		int length = myInput.read(buffer);
		while(length > 0)
		{
		   myOutput.write(buffer, 0, length); 
		   length = myInput.read(buffer);
		}
		myOutput.flush();  
		myInput.close();		
		myOutput.close(); 
	} catch (FileNotFoundException e1) {
		// TODO Auto-generated catch block			
		Log.e("出现错误1:",e1.getMessage());
		return false;
	} catch (IOException e) {
		// TODO Auto-generated catch block
		Log.e("出现错误2:",e.getMessage());
		return false;
	}
	return true; 	
 }


如果只是纯粹检查SD卡的话就调用 4或5 就行了(其他方法要加上方便调用哦)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值