Detect Android N version code

后端 未结 4 1779
既然无缘
既然无缘 2021-02-06 03:12

Is it possible to detect if an user is running Android N?

I have a Nexus 6 with the Android N Developer Preview. If I try to get the build version with Build.VERSI

4条回答
  •  孤城傲影
    2021-02-06 03:28

    I found that the behaviour of Build.VERSION.RELEASE and Build.VERSION.CODENAME is quite different depending on whether it's a full production release of Android OS or a developer preview. We went with the following mechanism. You can't rely on just one value if you want to account for more than one scenario.

    This is what I found was the case for a Galaxy S7 running a production release of Nougat and a Nexus 5X running O DP1.

    Galaxy S7 Nougat Build.VERSION.BASE_OS: Build.VERSION.CODENAME: REL Build.VERSION.INCREMENTAL: G930FXXU1DQB3 Build.VERSION.PREVIEW_SDK_INT: 0 Build.VERSION.RELEASE: 7.0 Build.VERSION.SDK_INT: 24 Build.VERSION.SECURITY_PATCH: 2017-01-01

    Nexus 5X O Build.VERSION.BASE_OS: Build.VERSION.CODENAME: O Build.VERSION.INCREMENTAL: 3793265 Build.VERSION.PREVIEW_SDK_INT: 1 Build.VERSION.RELEASE: O Build.VERSION.SDK_INT: 25 Build.VERSION.SECURITY_PATCH: 2017-03-05

    // release builds of Android (i.e. not developer previews) have a CODENAME value of "REL"
        // check this. if it's REL then you can rely on value of SDK_INT (SDK_INT is inaccurate for DPs
        // since it has the same value as the previous version of Android)
        // if it's not REL, check its value. it will have a letter denoting the Android version (N for Nougat, O for... er... O and so on)
    
        boolean laterThanNougat = false;
    
        if(Build.VERSION.CODENAME.equals("REL")) {
            Log.i(TAG, "This is a release build");
    
            // since this is a release build, we can rely on value of SDK_INT
            if (android.os.Build.VERSION.SDK_INT > 25) {
                Log.i(TAG, "This is later than Nougat");
                laterThanNougat = true;
            } else {
                Log.i(TAG, "This is Nougat or before");
            }
        } else {
            Log.i(TAG, "This is NOT a release build");
    
            // since this is not a release build, we can't rely on value of SDK_INT. must check codename again
            if(Build.VERSION.CODENAME.compareTo("N") > 0) {
                Log.i(TAG, "This is later than Nougat");
                laterThanNougat = true;
            } else {
                Log.i(TAG, "This is Nougat or before");
            }
        }
    

提交回复
热议问题