美文网首页
获取versionCode

获取versionCode

作者: 主音King | 来源:发表于2019-01-14 10:48 被阅读79次

获取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();
        }
    }

相关文章

网友评论

      本文标题:获取versionCode

      本文链接:https://www.haomeiwen.com/subject/hihddqtx.html