AssetManager中的路径参数不能包含"assets/"
2015-09-23 10:25
585 查看
String path = “music/bg.mp3”; //正确的参数 //String path = “assets/music/bg.mp3”; //错误的参数 //String path = “file:///android_asset/music/bg.mp3”; //错误的参数 //String path = “/music/bg.mp3”; //错误的参数 AssetFileDescriptor assetFileDescritor = mContext.getAssets().openFd(path); mediaPlayer.setDataSource(assetFileDescritor.getFileDescriptor(), assetFileDescritor.getStartOffset(), assetFileDescritor.getLength()); assetFileDescritor.close();
1. java代码中AssetManager的路径参数不能包含"assets/",
2. 但是在NDK编程中C代码里面如果采用zip方式访问assets的文件,必须包含"assets/"
//ReadAssets fileName = assets/rabbit/img/banana_skin.png off_t readFileFromAsset(const char* fileName, char ** buffer) { logd("ReadAssets fileName = %s", fileNmae); struct zip* apkArchive=zip_open(assetPath, 0, NULL); struct zip_stat fstat; struct zip_file* file = zip_fopen(apkArchive, fileName, 0); if (!file) { loge("Error opening %s from APK", fileName); return -1; } zip_stat(apkArchive,fileName,0,&fstat); off_t bfsize = fstat.size; *buffer=(char *)malloc(bfsize+1); memset(*buffer, 0x0, bfsize+1); int numBytesRead = zip_fread(file, *buffer,bfsize);; zip_fclose(file); return bfsize; }
上述代码中assetPath是在java层传过来的,通过调用String assetPath = context.getPackageResourcePath(),传递到c++层调用
const char* assetPath = env->GetStringUTFChars(jassetPath, false);
env->ReleaseStringUTFChars(jassetPath, assetPath);
得到。
3. 在C++层使用AAssetManager也是一样必须以"assets/"开头。
AAsset* asset = AAssetManager_open(assetMgr, realPath, AASSET_MODE_UNKNOWN); off_t bufferSize = AAsset_getLength(asset); char* buffer=(char*)malloc(bufferSize+1); memset(buffer, 0, bufferSize); buffer[bufferSize]=0; int numBytesRead = AAsset_read(asset, buffer, bufferSize); AAsset_close(asset);
相关文章推荐
- iOS9开发之新增通知行为详解
- 设置表格隔行变色,以及鼠标悬浮变色效果
- Xshell乱码解决方法设置
- Linux下搭建DNS 服务器
- WmiPrvSE.exe内存占用异常
- OC学习Runtime之Method swizzling
- iClap助力移动互联网企业高效实现规范化管理
- 第一行代码笔记1
- 安卓的手机抓包
- iOS 9:你需要知道的10件事
- 百度云推送消息(范例)
- js浏览器下载总结(ios、and、微信、qq)
- 验证Xcode真伪的方法,来自苹果官网
- 解决 python用 xlsxwrite 向excel 中写入中文字符串变量 报错
- tree命令
- 关于 hashCode() 你需要了解的 3 件事
- JAB2完成Java bean到xml的相互转换
- 报表性能优化方案之数据集缓存与共享
- Metrics.NET report to Zabbix
- window.location.href无效/不跳转的原因分析