1

私はAndroidライブラリを構築していて、デバイスに関する情報を取得する方法があります。私たちの目標は2.2以降をサポートすることですが、それ以降のバージョン(2.3のデバイスシリアルなど)で導入された情報を収集し、アプリケーションをバージョン2.2に設定してコンパイルする方法があるかどうか疑問に思っていました。

周りを検索した後、次のようなコードを使用している人を見つけました。

private static String getHardwareSerial() {
    try {  
        return Build.SERIAL;
    } catch (VerifyError e) {
        //Android 8 and previous did not have this information
        return Build.UNKNOWN;  
    }
}

ただし、このコードが存在する場合、ビルドターゲットを8に設定すると、ライブラリを使用するサンプルアプリケーションのビルドに失敗します。この情報を取得するには、クライアントがターゲットを9に設定している場合、何か提案がありますか?

4

1 に答える 1

1

リフレクションを通じてそれを行うことができます:

public static String getHardwareSerial() {
    try {
        Field serialField = Build.class.getDeclaredField("SERIAL");
        return (String)serialField.get(null);
    }
    catch (NoSuchFieldException nsf) {
    } 
    catch (IllegalAccessException ia) {
    }
    return Build.UNKNOWN;
}

フィールドが見つからない場合 (以前のバージョンの OS では)、無視される例外がスローされ、失敗して Build.UNKNOWN が返されます。

于 2011-10-17T20:53:41.460 に答える