我编写了大部分应用程序,将最低 API 级别设置为 7。我想从级别 8 调用单个 API。Android 版本较低的用户将在没有这个“额外功能”的情况下生存。
目前我添加了@SuppressLint("NewApi")
以便我的代码可以运行;我正在 API 14 上对其进行测试。一切正常。
我想知道该应用程序在 API 7 设备上的行为。这一行会被忽略吗?我的应用程序会崩溃吗?应用程序会被 Google Play 过滤,因此无法安装吗?
我想在较低的设备上忽略这条单行。
我编写了大部分应用程序,将最低 API 级别设置为 7。我想从级别 8 调用单个 API。Android 版本较低的用户将在没有这个“额外功能”的情况下生存。
目前我添加了@SuppressLint("NewApi")
以便我的代码可以运行;我正在 API 14 上对其进行测试。一切正常。
我想知道该应用程序在 API 7 设备上的行为。这一行会被忽略吗?我的应用程序会崩溃吗?应用程序会被 Google Play 过滤,因此无法安装吗?
我想在较低的设备上忽略这条单行。
这一行会被忽略吗?
不。
我的应用程序会崩溃吗?
壮观。:-)
应用程序会被 Google Play 过滤,因此无法安装吗?
不。
我想在较低的设备上忽略这条单行。
你有两个问题:
@SuppressLint("NewApi")
是错误的快速修复选择
您没有添加任何代码来避免在旧设备上使用此行
使用@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 停止对您大喊大叫,因为您引用了一个太新的类或方法。
最好把这个包裹起来
import android.os.Build;
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1) {
// do what you want
}
如果您没有用于检查 API 的 if 语句以便在 API == 7 时忽略它,您的应用程序将崩溃。我正在使用 4.0 到 4.2 的设备并使用飞行模式进行了一些测试,在 API 4.1 及以下是在 4.2中找到,Settings.System
但在Settings.Global
. 如果我尝试调用错误的应用程序会崩溃。