8

カメラ ビューを使用する最小 SDK 7 で SDK 8 をターゲットとするアプリを開発しています。

明らかに、すでにかなりの量の議論があったポートレート用のカメラの回転の問題があります。現在、SDK 7 と 8+ を分離する次の修正があります。

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.FROYO){
    theCamera.setDisplayOrientation(90);
} else {
    parameters.set("orientation", "portrait");
    parameters.set("rotation",90);
}

これは、2.1update1 デバイスと私が持っている SGS2 (ICS を実行している) の両方で動作します。

私の質問は、これらのソリューションがデバイス間でどのような信頼性を持っているかです。「pre-froyo」の状況に対するいくつかの解決策を見てきましたが、この解決策がすべてのデバイスで機能するかどうかは疑わしいです。また、さまざまなデバイスで「setdisplayorientation」がどの程度尊重されているのかも疑問に思っています...

これについて他の人の経験を聞いて本当に感謝しています。


追加情報: Android カメラの向きを適切に設定するには? これは、これらの方法が時々機能することを説明しています。では、setDisplayOrientation が常に機能し始めたのはどの時点 (SDK バージョン) からですか??

4

3 に答える 3

1

奇妙な解決策の1つは、向きがすべてのデバイスで完全に同じになるわけではないということです。これは完全にOEMに依存しており、デバイスごとに異なる可能性があります(私は多くのデバイスで試しました)。簡単に修正することはできません。最初の起動時にカメラ付きアクティビティのプレビューを表示し、提案されたローテーションが希望どおりかどうかをユーザーに尋ね、そうでない場合は変更できるようにします。ユーザーの選択に基づいて、それを処理できます。

于 2012-08-30T12:48:36.483 に答える
0

APIレベルでチェックすることは、この問題に対処する正しい方法ではないと思います。オリエンテーションをロックするには、次のコードを確認してください。

public static void lockRotation(final AndroidActivity activity) {
    Display display = ((WindowManager) activity.getSystemService(activity.WINDOW_SERVICE)).getDefaultDisplay();

    // Lock the rotation effect
    // For every 90 degrees we have an other orientation (not only landscape & portrait)
    if (Surface.ROTATION_0 == display.getOrientation()) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    } else if (Surface.ROTATION_270 == display.getOrientation()) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    } else if (Surface.ROTATION_90 == display.getOrientation()) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
    } else if (Surface.ROTATION_180 == display.getOrientation()) {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
    }
}
于 2012-08-30T12:37:39.573 に答える
0

あなたの方法はうまくいくと思います。アプリがデバイスに依存しないと感じた場合にできることは、APKのさまざまなバージョンをビルドすることだけです。

于 2012-08-28T16:22:38.913 に答える