获取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();
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读