Cocos2.2.3在线下载——sd卡容量判定

Cocos2.2.3在线下载——sd卡容量判定,第1张

概述文介绍的是在线下载时如何判断sd卡的容量是否足够,分为三步:1.getPackageSize()——获取URL包的大小 2.getSdcardSize()——获取sd的剩余容量3.isSizeEnough()——判断sd的容量是否足够#include <curl/curl.h>#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#incl
文介绍的是在线下载时如何判断sd卡的容量是否足够,分为三步:1.getPackageSize()——获取URL包的大小  2.getSdcardSize()——获取sd的剩余容量3.isSizeEnough()——判断sd的容量是否足够#include <curl/curl.h>#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#include "JniHelper.h"#endif//在线下载时,获取要下载的包的大小//引用自http://www.cnblogs.com/JD85/p/3914949.HTMLfloat DLManager::getPackageSize(){	//获取资源包大小——单位为MB	float packageSize = 0;	double zipsize = 0;	CURL *handle = curl_easy_init();	curl_easy_setopt(handle,CURLOPT_URL,_packageUrl.c_str());	curl_easy_setopt(handle,CURLOPT_header,1);   //只需要header头	curl_easy_setopt(handle,CURLOPT_NOBODY,1);   //不需要body	if (curl_easy_perform(handle) == CURLE_OK)	{		curl_easy_getinfo(handle,CURliNFO_CONTENT_LENGTH_DOWNLOAD,&zipsize);		float packageBytesTotal = (zipsize / 1024.f / 1024.f);		cclog("Package Size: %.2f MB",packageBytesTotal);		packageSize = packageBytesTotal;	}	curl_easy_cleanup(handle);	return packageSize;}//获取sd卡容量————C++//通过jni来获取sd卡剩余容量float DLManager::getSdcardSize(){	std::string m_mainActivityname = XtcUtils::xtcGetMainActivityname();#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)	JniMethodInfo methodInfo;	jfloat ret = 0.f;	if (JniHelper::getStaticmethodInfo(methodInfo,m_mainActivityname.c_str(),"readSDCard","()F"))	{		ret = methodInfo.env->CallStaticfloatMethod(methodInfo.classID,methodInfo.methodID);		return ret;	}		return 0;#endif	//win32下直接返回一个大容量	return 5096;}//获取sd卡容量————AndroID//将下列代码贴入proj.androID\src\com\xtc\xx\xx.java//引用自http://blog.csdn.net/zhaoweixing1989/article/details/7364362public static float readSDCard() { 	float ret = 0.f;    String state = Environment.getExternalStorageState();     if(Environment.MEDIA_MOUNTED.equals(state)) {         file sdcardDir = Environment.getExternalStorageDirectory();         StatFs sf = new StatFs(sdcardDir.getPath());         long blockSize = sf.getBlockSize();         long blockCount = sf.getBlockCount();         long availCount = sf.getAvailableBlocks();         Log.d("","block大小:"+ blockSize+",block数目:"+ blockCount+",总大小:"+blockSize*blockCount/1024+"KB");         Log.d("","可用的block数目::"+ availCount+",剩余空间:"+ availCount*blockSize/1024+"KB");        		//单位为MB        ret = availCount*blockSize/1024/1024;    }        return ret;}//判断sd卡是否有足够容量存储在线下载的包bool DLManager::isSizeEnough(){	bool bRet = false;	float sdcardSize = getSdcardSize();	float packageSize = getPackageSize();	//判断文件类型	string suffix;	int pos = getPackageUrl().find_last_of(".");	//getPackageUrl()为服务器上包的路径,ex.http://192.168.100.11/AssociativeVIDeo/A.zip	suffix = getPackageUrl().substr(pos,getPackageUrl().length() - 1);	if(suffix.compare(".zip") == 0)	{//若为zip文件,需将包大小设置为解压时的最大大小		packageSize = packageSize * 2 + 0.5f;	}	if(sdcardSize > packageSize)	{		bRet = true;	}	else	{		cclog("sdcardSize : %f MB < packageSize : %f MB",sdcardSize/1024.f,packageSize/1024.f);	}	return bRet;}
总结

以上是内存溢出为你收集整理的Cocos2.2.3在线下载——sd卡容量判定全部内容,希望文章能够帮你解决Cocos2.2.3在线下载——sd卡容量判定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1077867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存