我还是一名Android学生,我开发了一个超过100Mb的应用程序,因此我需要使用扩展文件。
我已经阅读了数千份文件,但我很困惑。
我需要在那种“扩展文件”中压缩许多mp3文件,以便只上传apk代码而不是整个app + mp3文件。
我认为如果我使用所有那些mp3生成一个'.obb'文件,那么Google Play需要超过50MB。
我知道'.obb'文件也必须在我设备的scard / Android / obb文件夹中。
目前我的代码从mp3文件获取'int'资源来操作它是这样的:
intMyResource = R.raw.name_of_my_music_file;
但是,正如我所说,目前文件的路径是'R.raw'。
我的问题:如何更换
的最佳方法intMyResource = R.raw.name_of_my_music_file;
到我的'.obb'文件所在的实际路径/名称?
谢谢大家。
莫罗
答案 0 :(得分:0)
您应该使用此zip命令创建扩展文件:
zip -r -9 -n ".mp3" main-expansion-file.zip *
使用-n选项对于不压缩媒体文件至关重要,因为如果媒体文件被压缩,则无法在Android应用程序中使用它。 将名称zip更改为'main.VERSIONCODE.YOURPACKAGENAME.obb并将此.obb文件复制到scard / Android / obb文件夹设备中。
使用Google ZipFile Library轻松读取zip扩展文件的文件(在pathAndroidSDK / extras / google / play_apk_expansion / zip_file中可用)
通过调用此方法替换 R.raw.name_music_file :
public static AssetFileDescriptor getFileDescriptor(Context ctx, String path) {
AssetFileDescriptor descriptor = null;
try {
ZipResourceFile zip = APKExpansionSupport.getAPKExpansionZipFile(ctx, 1, -1);
descriptor = zip.getAssetFileDescriptor(path);
} catch (IOException e) {
Log.e("APKExpansionSupport", "ERROR: " + e.getMessage(), e);
e.printStackTrace();
}
return descriptor;
}
使用MediaPlayer从扩展文件播放音乐的示例代码:
AssetFileDescriptor descriptor = null;
try {
descriptor = getFileDescriptor(this, "name_music_file.mp3"));
MediaPlayer reproductor = new MediaPlayer();
reproductor.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
reproductor.setOnCompletionListener(this);
reproductor.prepare();
reproductor.start();
} catch (Exception e) {
Log.e("Play mp3", "ERROR: " + e.getMessage(), e);
} finally {
if (descriptor != null)
try{descriptor.close();} catch (IOException e) {}
}
希望这对你有帮助!