実行中のアクティビティに WindowManager を使用してカメラ オーバーレイを追加します。カメラを起動して WindowManager を呼び出すと、WindowManager.LayoutParams に適切な縦向きタグを割り当てたにもかかわらず、画面が縦向きから横向きに変わります。Google経由で解決策を見つけることができませんでした。
サービスのメソッドで実行されている WindowManager コードは次のとおりです。
inflater = (LayoutInflater) mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
View view;
view = inflater.inflate(R.layout.camera, null, false);
p = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
p.gravity = Gravity.TOP | Gravity.CENTER;
p.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
windowManager.addView(view,p);
レイアウト R.layout.camera は、カメラを追加する単なる FrameLayout ビューです。カメラは正常に動作しています。下で実行されている私のアクティビティは、WindowManager インスタンスが横向きに戻すまで、縦向き (本来あるべき姿) です。はい、マニフェストにポートレート タグがあります。
編集:さらに調査すると、ウィンドウマネージャーは実行中のアクティビティを破棄して再作成しています。これにより、すべてがランドスケープモードに戻ります。アクティビティの onCreate で方向を動的に設定しようとしましたが、それもうまくいきませんでした。上記の windowmanager コードをすべて使用してサービスを停止すると、アクティビティが縦向きモードに戻ります。