获取versionCode
2019-01-14 本文已影响79人
主音King
获取app的versionCode在api28(9.0)中提示
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo(getPackageName(), PackageManager.GET_ACTIVITIES);
int versionCode = pi.versionCode;
Log.d(TAG,"longVersionCode:"+pi.getLongVersionCode());
} catch (Exception e) {
e.printStackTrace();
}
会发现pi.versionCode废弃了,提供新的:pi.getLongVersionCode()
然而在api24(7.0)会包错。发现Exception没有捕获到直接crash了
Process: com.george.fullscreen, PID: 27506
java.lang.NoSuchMethodError: No virtual method getLongVersionCode()J in class Landroid/content/pm/PackageInfo; or its super classes (declaration of 'android.content.pm.PackageInfo' appears in /system/framework/framework.jar)
at com.george.fullscreen.MainActivity.onCreate(MainActivity.java:24)
发现: java.lang.NoSuchMethodError:来自于Error。
族谱:
Throwable
---Error(NoSuchMethodError)
---Exception
---Violation
它们三个子类是平级的。当然Exception捕获不到NoSuchMethodError了。
解决办法:
PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo(getPackageName(), PackageManager.GET_ACTIVITIES);
int versionCode = pi.versionCode;
Log.d(TAG,"longVersionCode:"+pi.getLongVersionCode());
} catch (Exception e) {
e.printStackTrace();
} catch (NoSuchMethodError e){
e.printStackTrace();
}
}