Android の向きの処理に固有の不具合に遭遇したと思います。
私は活動Aを持っています
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
センサーがないということは、アクティビティ A が物理デバイスの回転の影響を受けないことを意味します。
オーバーライドされた onSaveInstanceBundle を持つアクティビティ B もあります
/*Will be called before orientation change*/
@Override
protected void onSaveInstanceState(Bundle currentState) {
super.onSaveInstanceState(currentState);
currentState.putBoolean(ApplicationConstants.Messages.ORIENTATION_CHANGED , true);
currentState.putBoolean("RESTART", true);
currentState.putString(ApplicationConstants.Messages.CURRENT_LANGUAGE,currentLocale);
}
onSaveInstance は、画面の向きが変更されたときに常に呼び出されます。A と同様に、B も onCreate() の下に次のものがあります。
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
ここで難問が発生します。
通常のポートレート モードでデバイスを保持しているときに、B を呼び出すようにプログラムされている A からボタンを押します。onSaveInstance にブレークポイントがアタッチされています
予想どおり、B が呼び出されたときに onSaveInstance は呼び出されません
しかし、ここで奇妙な事実があります。デバイスをランドスケープ モードにしてから B を呼び出すと、B の onSaveInstance が呼び出され、ブレークポイントでプログラムが一時停止されるため、デバイスの画面がランドスケープになっていることがわかります。
したがって、アクティビティにセンサー引数がありませんが、センサーは実際にはまだ機能しています。そして、デバイスをランドスケープで保持している間にアクティビティ スイッチ IF DONE の間に、ターゲット アクティビティがランドスケープで開始されます。ブレークポイントを手放した後、B は縦向きビューに戻ります。
これが私が開発中のプロジェクトに影響を与えている理由については、長い話があります。誰かがこの状況について何か洞察を持っているかどうか知りたいと思いました。
要約すると、私の質問は次のとおりです。
アクティビティの切り替え中、Android システムは指定された向きを無視し、デフォルトでデバイスの物理的な位置を使用するというのは本当ですか? androidManifest で向きを設定できません。マニフェストに向きモードを入れた場合、これは当てはまらないことに注意しました。