2

2 つの別々の API レベルで Android の Camera.open() メソッドを使用しようとしています。1 つ目は 2.1 以降の API レベル 7 で、2 つ目は API レベル 9 の 2.3.3 & 2.3.4 です。

API レベル 7 および 8 では、Camera.open メソッドは引数を取りません。API レベル 9 以降では、カメラは、使用する cameraId を提供する整数引数を取ります。

同じコードで両方の API レベルをターゲットにするにはどうすればよいですか? この疑似コードに似たもの:

Camera lCamera;
if (Platform.APILevel < 7){
  lCamera.open();
}else { 
  lCamera.open(0);
}
4

3 に答える 3

7

反射検出をよく行います。何かのようなもの:

    public Camera getCamera() {
        try {
            Method method = Camera.class.getMethod("open", Integer.TYPE);
            return (Camera) method.invoke(null, 0);
        } catch (Exception e) {
                // Yes, I really want to handle all exceptions here!!!!
                Log.d(TAG,"Error when trying to invoke Camera.open(int), reverting to open()",e);
                return Camera.open();
        }
    }
于 2011-06-28T21:34:51.897 に答える
2

一般的に言って、あなたはあなたが逃げることができる最低のAPIレベルをターゲットにするだけです。APIレベル7用に構築されたものはすべて、APIレベル8、9、10などで機能します。この場合、呼び出すだけでlCamera.open();、最初に見つかった背面カメラが選択されます。フロントカメラを使用する場合は、より高いレベルのAPIレベル9を使用する必要があります。

于 2011-06-28T21:32:13.543 に答える
2

final static整数を読み取ることでAPIレベルを取得できますandroid.os.Build.VERSION.SDK_INT

マニフェストで、必ずandroid:minSdkVersionANDを設定してくださいandroid:targetSdkVersion

于 2011-06-28T21:35:36.577 に答える