0
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD) {
        //--incompatible code--
    } else {
        //--compatible code--
    }

この状態は、Gingerbread で互換性のないコードに実行されます。はBuild.VERSION.SDK_INT実際のデバイスのバージョンを表していますか? またはアプリがコンパイルされたSDKバージョン?

4

2 に答える 2

2

これは、アプリが最初に実行されたときに値が割り当てられた静的メンバーです。

public static final int SDK_INT = SystemProperties.getInt("ro.build.version.sdk", 0);

SystemProperties.getInt() メンバー関数はターゲット デバイスで実行され、アプリケーションのコンパイル時には決定されません。

公式ガイドによると、API バージョンを検出するときは > の代わりに >= を使用する必要があります。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

メジャー バージョンの間にマイナー バージョンが存在する可能性があるためです。

于 2012-11-02T07:32:41.953 に答える
1

問題は、GB に 2 つのコードがあることでした。

Build.VERSION_CODES.GINGERBREAD-> API 9

Build.VERSION_CODES.GINGERBREAD_MR1-> API 10

minSdkVersionマニフェストの API として= 10 を使用する必要がありBuild.VERSION_CODES.GINGERBREAD_MR1ました。

于 2012-11-02T07:32:40.830 に答える