8

それぞれ異なる API レベルのいくつかのバージョンでメソッドを作成するにはどうすればよいですか。このようなものだと思いますが、よくわかりません

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

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

これを行う正しい方法は何ですか?前もって感謝します

4

2 に答える 2

9

ここでは、この主題に関する非常に優れたテキストを見つけることができます。

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 のような const 値は Java クラスに静的に配置されるため、コンパイル中に使用できる限り、ユーザーの携帯電話の以前の Android SDK でも使用できます。やりたくないことは、以前の SDK では利用できないメソッドを呼び出すことです。これは 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(){}
}
于 2012-09-23T11:13:18.850 に答える
4

以下を使用できます。

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

于 2012-09-23T10:44:05.320 に答える