Android:在运行时获取TargetSDKVersion

13

我能在运行时获取已使用的TargetSDKVersion吗?

这是因为Android API 19以上版本的WebView与之前的版本处理像素方式不同。

由于这是用于库的,因此我不希望开发人员手动输入。

我的评论: 我正在使用我的Nexus 5 API 21 Lollipop。更改TargetSDKVersion会改变html中javascript读取宽度的方式,以屏幕密度的倍数进行计算。我刚刚将其更改为14,然后更改为19,并进行了确认。

5个回答

37

在我的情况下,我已经完成了这个

int targetSdkVersion = getApplicationContext().getApplicationInfo().targetSdkVersion;

这比被接受答案简单得多,很可能效率更高。谢谢。 - 3c71

9

1
这将返回设备的API版本。 - zed
看起来这是一个很好的解决方案。我会测试它,并在确认后设置为答案。 - zed
2
但是,什么是AppGlobals? - Cheok Yan Cheng

7

这是另一种在运行时获取我的应用程序的targetSdkVersion的方法,使用Android Studio

try {
            PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
            int targetSdkVersion = packageInfo.applicationInfo.targetSdkVersion;

        }
        catch (PackageManager.NameNotFoundException e) {
            Log.e(TAG, e.getMessage());
        }

targetSDKVersion 的值被定义在我的 build.gradle 文件中。

   defaultConfig {
        applicationId "com.tuna.hello.androidstudioapplication"
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 12
        versionName "1.0"
    }

2
实际上,这正是与@Kirill相同的方法。 - zed

3
在Android Marshmallow(API 23)手机中具有以下配置:
defaultConfig {
      applicationId "com.mytestapp"
      minSdkVersion 9
      targetSdkVersion 22
      versionCode 1
      versionName "1.0.0"
}

另一种获取实际运行应用程序targetSdkVersion的直接方法是:
Context mContext = getApplicationContext();
int targetSdkVersion = mContext.getApplicationInfo().targetSdkVersion; // Outputs 22
int mobileSdkVersion = Build.VERSION.SDK_INT; // Outputs 23

0

你甚至可以在运行时设置它:

        applicationInfo.targetSdkVersion = 32

如果某些外部API(例如我的WebView)在不同的应用程序目标API上工作方式不同,并且您需要在早期平台上恢复先前的行为,则此方法可能有效(在这种情况下,请不要忘记使用if (Build.VERSION.SDK_INT <= xxx)包装它)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接