【问题标题】:Understanding Android API Levels了解 Android API 级别
【发布时间】:2012-07-05 07:56:18
【问题描述】:

Jelly Bean 已经问世,它们有一些非常不错的功能。我的问题是,我想针对尽可能多的设备,但同时拥有一个可以使用最高 API 级别的所有功能的应用。

比如说我有这个

<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="16"/>

我在 API 16 上构建了我的应用程序。有没有办法限制代码的某些部分只在您运行能够运行它的设备时运行?例如,如果我想要 NFC,那么只有姜饼及以上设备才能使用该功能,否则 froyo down 甚至看不到该功能。

【问题讨论】:

    标签: android android-api-levels


    【解决方案1】:

    基本上,您可以使用从 Android 3.0 引入的许多新 API(例如 Fragment 引擎),包括 Android Support v4 as Referenced Library。

    你可以在这里找到一些参考:

    http://developer.android.com/reference/android/support/v4/app/package-summary.html

    这里:

    http://developer.android.com/tools/extras/support-library.html

    另一方面,如果你想使用 NFC 功能,你可以声明这个使用功能:

     <uses-feature android:name="android.hardware.nfc" android:required="true" />
    

    或者,如果您想为不支持此功能的设备提供代码替代,您可以执行以下操作:

     if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) {
            //code for devices with NFC support
     } else {
          //code for others devices
     }
    

    【讨论】:

    • 比如说我正在使用 api 16 级构建,包括 v4,如果我的设备正在运行 api 9 姜饼,那么我可以获得运行姜饼的设备的片段吗?所以 v4 api 将覆盖 api 级别 16 包含的内容并编译它以便姜珠理解?
    【解决方案2】:

    从 ADT r16 开始,我们可以使用 Lint 扫描并检查项目是否有所有新 API,详情请查看我的回答 here

    NewApi:查找对并非所有目标 API 版本都支持的 API 的 API 访问。

    或者,您也可以按 API 级别对代码进行条件分支,而不是按功能(Stefano 的回答)对代码进行条件分支:

    if (android.os.Build.VERSION.SDK_INT >= 9) {
      // do NFC stuff
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      相关资源
      最近更新 更多