2016-10-24 2 views
1

Activityのフロントカメラの動画を記録するActivityがあります。ユーザーが最初に画面に入った場合、これは正常に動作しますAndroidアクティビティはonActivityResultの後に回転します

<activity 
      android:name=".activity.SomeVideoActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="Video Activity" 
      android:screenOrientation="portrait" /> 

:オリエンテーションは、次のコードを経由してAndroidManifest.xmlファイルでポートレートにロックされています。ただし、このアクティビティを終了してから戻ってきたら、明らかにランドスケープモードが再び有効になります。

私は、次のコードブロック経由での向きを強制することで、状況を救済するために管理:

@Override 
protected void onResume() { 
    super.onResume(); 
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

だから私はこれが唯一のこの1つのだけの活動に起こる理由として、単に興味があります。私はonActivityResultのために他の活動をチェックしました、そして、彼らは全く向き設定を台​​無しにしません。

UPDATE

私の唯一の目的は肖像画や風景無効回転に活動をロックすることであるとして、実際にはこの問題はthis.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);を使用することによって解決されます。私はちょうどを理解しますAndroidManifestで縦向きを持つと宣言されていても、別のアクティビティから返された後に、SomeVideoActivityで回転が再び有効にされるのはなぜですか。

+0

注意:構成変更を処理するためにアクティビティを宣言するときは、代替案を提供する要素をリセットする必要があります。オリエンテーションの変更を処理するためにアクティビティを宣言し、画像を横から縦に変更する必要がある場合は、 [onConfigurationChanged()。](https://developer.android)の各リソースに各リソースを再割り当てする必要があります。 –

+0

@EmdadHossain、私は実際にマニフェストから 'android:configChanges =" orientation "'を取り除こうとしましたが、それは何もしませんでした。差。実際、すべての自分の活動はマニフェストと同じ設定になっています。このビデオ録画活動は、別のアクティビティから戻った後のローテーションの問題です。 – rach

+0

はちょうど確かに **変更** アンドロイド:configChanges = "オリエンテーション| keyboardHidden |画面サイズ" ** ** Androidに:configChangesは= "オリエンテーション|画面サイズは" 私に知らせて任意のアップデートの場合..! ! –

答えて

0

あなたのアクティビティタグにマニフェストを追加します。android:screenOrientation = "portrait"これは、あなたのアクティビティが回転しないようにします。

+0

これはすでにマニフェストで宣言されています。ここでの問題は、別のアクティビティから戻ったときに、ランドスケープモードが再び有効になり、アクティビティが回転可能になることです。 – rach

0

この投稿は少し古いですが、私は同じ問題(またはそれに類するもの)がありました。デバイスがランドスケープモードで保持されている場合、アクティビティを終了すると、画面はランドスケープに、次にポートレートに戻って表示されます(マニフェストで強制されます)。

このシナリオで

  • アクティビティAは、結果のアクティビティBを開始します。
  • アクティビティBはその作業を行い、結果を設定します。
  • アクティビティBが終了します。
  • アクティビティAが結果を受信して​​終了します。

setRequestedOrientationは私にとっては機能しませんでした。私が行った小さな変化は、結果を受け取った直後にアクティビティAを終了するのではなく、のpostDelayedを呼び出すことによって50msで遅延することでした。これはうまくいった。

new Handler().postDelayed(this::finish, 50); 

まだ少し奇妙です。 Androidのバグであると思われますまたは、カメラAPIを使用しているときは、競合状態になっている可能性があります。とにかく、誰かが同じ問題に直面した場合に備えて、私はここにこれを掲示しています。

関連する問題