我尝试挂载一个(未加密的)obb文件(APK扩展文件)。
下面的代码在Android 4.4.4的Nexus 4上运行良好。obb文件被挂载,OnObbStateChangeListener也被输入,我可以在日志中看到日志行。
然而,在三星银河Tab 2(与Android 4.1.2)它不工作。"Start mount"正在被记录,但是OnObbStateChangeListener从未被输入,而且,没有错误或任何其他相关信息显示在日志中。
final StorageManager sm = (StorageManager) getApplicationContext().getSystemService(STORAGE_SERVICE);
Log.d(TAG, "Start mounting " );
sm.mountObb(
new File(Environment.getExternalStorageDirectory(),"Android/obb/com.matheapp.www.matheapp2/main.2.com.matheapp.www.matheapp2.obb").getAbsolutePath(),
new OnObbStateChangeListener() {
@Override
public void onObbStateChange(String path, int state) {
super.onObbStateChange(path, state);
Log.d(TAG, "onObbStateChange: Path: " + path);
Log.d(TAG, "onObbStateChange: State: " + state);
}
});
我们一直在这方面工作,我们没有找到任何解决方案,所以我们使用重命名为。obb的zip文件,而不是使用jobb
创建的正常obb。这一解决方案适用于我们目前测试过的所有设备,甚至包括搭载Android 4.1.2的Galaxy Tab。
我自己在一些设备上遇到过这个问题;这也可能是由于android的一个bug:
https://code.google.com/p/android/issues/detail?id=61881似乎唯一要做的就是开始使用assetfiledescriptor和偏移量(用于音频/视频)或输入流。在我的情况下,我不能使用任何这些,因为我需要一个字符串/文件路径,所以我想我将被迫在某处解压缩扩展文件。