從API級別9開始,您可以使用jobb tool打包資源並使用StorageManager來掛載/卸載OBB文件。如果需要,您也可以使用此工具對資產進行加密。
OBB是一種提供大量二進制資源的好方法,無需將它們打包到APK中,因爲它們的大小可能爲幾GB。但是,由於它們的大小,它們很可能存儲在可從所有程序訪問的共享存儲池中。
...
的OBB將繼續安裝,只要在StorageManager參考由應用程序舉行。一旦此參考文獻丟失,正在使用的OBB將被卸載。通過此調用註冊的OnObbStateChangeListener將收到此操作的成功或失敗。
我猜想一個掛載的OBB文件可以在任何意外的時間下載(例如,當用戶打開USB大容量存儲器時),因此請特別注意您的OnObbStateChangeListener
。從this question
例子:
storage = (StorageManager) getSystemService(STORAGE_SERVICE);
storage.mountObb(obbFilepath, "optional_encryption_key", myListener);
您可以使用obbContentPath
讀取文件,就像他們會在磁盤上。
private final OnObbStateChangeListener myListener = new OnObbStateChangeListener() {
@Override
public void onObbStateChange(String path, int state) {
super.onObbStateChange(path, state);
d(path + " changed to state " + state);
switch (state) {
case ERROR_ALREADY_MOUNTED:
case ERROR_COULD_NOT_MOUNT:
case ERROR_COULD_NOT_UNMOUNT:
case ERROR_INTERNAL:
case ERROR_NOT_MOUNTED:
case ERROR_PERMISSION_DENIED:
case UNMOUNTED:
//TODO
break;
case MOUNTED:
String assetsPath = mStorageManager.getMountedObbPath(mPathToObb);
if (assetsPath == null) throw new NullPointerException("Could not get path to mounted OBB path");
d("Checking if " + assetsPath + "/path/to/file exists");
File f = new File(assetsPath + "/path/to/file");
d("" + f.exists());
break;
default:
break;
}
}
};