2

我编写了大部分应用程序,将最低 API 级别设置为 7。我想从级别 8 调用单个 API。Android 版本较低的用户将在没有这个“额外功能”的情况下生存。

目前我添加了@SuppressLint("NewApi")以便我的代码可以运行;我正在 API 14 上对其进行测试。一切正常。

我想知道该应用程序在 API 7 设备上的行为。这一行会被忽略吗?我的应用程序会崩溃吗?应用程序会被 Google Play 过滤,因此无法安装吗?

我想在较低的设备上忽略这条单行。

4

3 回答 3

11

这一行会被忽略吗?

不。

我的应用程序会崩溃吗?

壮观。:-)

应用程序会被 Google Play 过滤,因此无法安装吗?

不。

我想在较低的设备上忽略这条单行。

你有两个问题:

  1. @SuppressLint("NewApi")是错误的快速修复选择

  2. 您没有添加任何代码来避免在旧设备上使用此行

使用@TargetApi(...)而不是@SuppressLint("NewApi"),其中是您的方法引用的代码...的名称(例如FROYO)或编号(例如)。8

您这样做之前,请将您的违规行包含在检查中,以查看它们是否应该在此设备上执行:

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.FROYO) {
  // then execute your code that requires API Level 8
}
// optional else block if you have some workaround for API Level 7

您的if支票将导致您的线路被避开。您的@TargetApi注释将导致 Lint 停止对您大喊大叫,因为您引用了一个太新的类或方法。

于 2013-04-26T19:32:00.020 回答
3

最好把这个包裹起来

import android.os.Build;

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1) {
    // do what you want
}
于 2013-04-26T19:31:20.970 回答
1

如果您没有用于检查 API 的 if 语句以便在 API == 7 时忽略它,您的应用程序将崩溃。我正在使用 4.0 到 4.2 的设备并使用飞行模式进行了一些测试,在 API 4.1 及以下是在 4.2中找到,Settings.System但在Settings.Global. 如果我尝试调用错误的应用程序会崩溃。

于 2013-04-26T19:26:28.790 回答