我的apk版本代碼是版本3.使用它我使用的主擴展文件已加載apk版本代碼1(文件名與main.1.ex.etc.eg.obb類似)。擴展文件在設備上正常下載。如果擴展文件版本與apk版本代碼不同,訪問帶有URI的APK擴展文件會導致崩潰
擴展文件包含媒體文件,因此我使用Google Zip擴展庫中的APEZProvider
與VideoView
一起播放。
調用VideoView.start()
會導致Nullpointer異常。
我迄今發現: 在APEZProvider.initIfNecessary()
返回主擴展文件版本3,而不是1。因此試圖打開ZipResourceFile
(mAPKExtensionFile)返回null。 APEZProvider.openAssetFile()
導致NullPointerException
爲mAPKExtensionFile
爲null
。
APEZProvider
類在谷歌郵編擴展庫
相關代碼:
private boolean initIfNecessary() {
if (!mInit) {
Context ctx = getContext();
PackageManager pm = ctx.getPackageManager();
ProviderInfo pi = pm.resolveContentProvider(getAuthority(), PackageManager.GET_META_DATA);
PackageInfo packInfo;
try {
packInfo = pm.getPackageInfo(ctx.getPackageName(), 0);
} catch (NameNotFoundException e1) {
e1.printStackTrace();
return false;
}
int patchFileVersion;
int mainFileVersion;
int appVersionCode = packInfo.versionCode;
if (null != pi.metaData) {
mainFileVersion = pi.metaData.getInt("mainVersion", appVersionCode);
patchFileVersion = pi.metaData.getInt("patchVersion", appVersionCode);
} else {
mainFileVersion = patchFileVersion = appVersionCode;
}
try {
mAPKExtensionFile = APKExpansionSupport.getAPKExpansionZipFile(ctx, mainFileVersion, patchFileVersion);
return true;
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
@Override
public AssetFileDescriptor openAssetFile(Uri uri, String mode)
throws FileNotFoundException {
initIfNecessary();
String path = uri.getEncodedPath();
if (path.startsWith("/")) {
path = path.substring(1);
}
return mAPKExtensionFile.getAssetFileDescriptor(path);
}
我不知道這行代碼在上面:ProviderInfo pi = pm.resolveContentProvider(getAuthority(), PackageManager.GET_META_DATA);
這是正確的嗎?
從PackageManager.resolveContentProvider()的Android參考。
公共抽象ProviderInfo resolveContentProvider(字符串名稱,INT標誌)
自:API等級1 查找其基本路徑名的單個內容提供商。 參數
name:要查找的提供程序的名稱。
flags:其他選項標誌。目前應該始終爲0.
有人可以確認如果我做錯了什麼或它是一個錯誤。
編輯:當我第一次上傳我的應用程序時,一切都按預期工作 - 它只有當我更新apk導致發生此問題的不同版本代碼時。
作品!謝謝。這不應該更清楚地記錄或我錯過了明顯的東西?同樣對於pm.resolveContentProvider(),文檔說標誌應該是零,但是在APEZProvider類中不是這樣。對此有何澄清? – user1318455 2012-06-10 11:30:31