【问题标题】:Different Java methods for different API Levels针对不同 API 级别的不同 Java 方法
【发布时间】:2012-09-23 10:39:18
【问题描述】:

如何为不同的 API 级别创建具有某些版本的方法。我认为是这样的,但我不确定

@apilevel("11")
private void getR()
{
...
}

@apilevel("4")
private void getR()
{
...
}

这样做的正确方法是什么?提前致谢

【问题讨论】:

    标签: android api methods


    【解决方案1】:

    在这里你会找到关于这个主题的非常好的文字:

    http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html

    你基本上应该使用如下代码:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        Log.i(LOG_TAG, "At least ICS version");
    }
    else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        Log.i(LOG_TAG, "At least HoneyComb version");
    }
    else {
        Log.i(LOG_TAG, "legacy");
    }
    

    像 ICE_CREAM_SANDWICH 这样的常量值是静态放入 java 类的,所以只要它们在编译期间可用,它们在用户手机上的以前的 android sdk-s 上也可以使用。你不想做的是调用以前sdk-s上不可用的方法,这将以VFY异常结束。

    但是编写这样的代码可能很乏味,这就是为什么最好为每个 android 版本创建单独的实现并访问它的基本接口:

    interface ImplBase {
    void myFunc();
    };
    
    class ICSImp implements ImplBase {
    public void myFunc(){}
    }
    
    class HoneyCombImp implements ImplBase {
    public void myFunc(){}
    }
    
    class LegaceImp implements ImplBase {
    public void myFunc(){}
    }
    

    【讨论】:

      【解决方案2】:

      你可以使用:

      Integer.valueOf(android.os.Build.VERSION.SDK);
      

      您可以在这里查看参考:http://developer.android.com/reference/android/os/Build.VERSION.html#SDK

      对于关卡本身,这里是列表:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html

      【讨论】:

      • 现在已弃用,我已使用 android.os.Build.VERSION.SDK_INT 代替,但非常感谢
      猜你喜欢
      • 2013-09-27
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      相关资源
      最近更新 更多