从比最低要求更高的API级别调用API

时间:2013-04-26 19:22:16

标签: android

我写的大部分应用程序都很好,最小API级别设置为7.我想从8级调用单个API。具有较低版本的android的用户将在没有这个“额外功能”的情况下继续存在。

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

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

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

3 个答案:

答案 0 :(得分:11)

  

这一行会被忽略吗?

没有

  

我的应用会崩溃吗?

Spectactularly。 : - )

  

Google Play是否会对应用进行过滤,以便他们无法安装?

没有

  

我希望在较低的设备上忽略此单行。

你有两个问题:

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

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

  3. 使用@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停止向您大吼大叫,引用一个过于新的类或方法。

答案 1 :(得分:3)

最好将其包裹起来

import android.os.Build;

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1) {
    // do what you want
}

答案 2 :(得分:1)

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