2012-01-08 9 views
2

MonoDroidを使用していますが、それに相当するJavaの回答が引き続き役立ちます。OnPause()の画面の向きの変化を検出します。

私はポートレートレイアウトとランドスケープレイアウトを使用していますので、可能であれば、Android画面の向きを使用して自動的にアクティビティを作成/作成したいと考えています。

私のアプリではTextToSpeechが使用されていますので、アクティビティのOnPause()を停止しています。これは、ホームキーを押すか、着信があったときにうまくいきます。しかし私は、ユーザーからの画面の向きの変更についてTextToSpeechを停止したくない。

TextToSpeechが中断されないようにこの変更を検出する簡単な方法はありますか?

私の活動のOnStop()コード:

protected override void OnPause() 
{ 
    // I need this for Home key, intercepting phone calls, etc. 
    // But how can I prevent this for a screen orientation change? 
    // Need to enable screen orientation to get my portrait/landscape views 
    if(Text2Speech.IsTextToSpeechInitialised && Text2Speech.TextToSpeech != null) 
     Text2Speech.TextToSpeech.Stop(); 

    base.OnPause(); 
} 
+3

あなたは 'アンドロイドを使用して見てきました現れますか?これは、向きの変更を自分で処理することを指定します。あなたの 'Activity'で' onConfigurationChanged'をオーバーライドし、あなたがする必要があるかもしれないこと(レイアウトの変更など)を行います。 – Squonk

+0

私はそれを見ました。それは私が行かなければならないアプローチかもしれません。可能であれば、私はポートレートの活動を破壊する/私の風景の活動を作成するときにアンドロイドにすべての世話をしてもらいたいと思います。 OnPause()の間にオリエンテーションの変化を検出する簡単な方法があるかどうか疑問に思っていただけです。 –

+1

いいえ簡単に知る方法はありません。 「アクティビティ」ライフサイクルは、さまざまなもの(例えば、着信電話など)の影響を受けます。 「活動」(休止、破壊破壊)の「アウト」フェーズでは、なぜ「なぜ」起こっているのかを説明するためのシステムメカニズムはありません。あなたが持っている最高のものは、自分で変更を処理することです。 'onConfigurationChanged(...)'に渡された 'Configuration'オブジェクトは、少なくともあなたが正しいレイアウトで' setContentView(...) 'を使わなければならない方向変更であることを確認するのに役立ちます。それはあまりにも悪いことではありません。 – Squonk

答えて

3

他は質問のコメントで述べたように、私はあなたが設定は、ここで自分を変える処理したいと思います。 other configuration changesがあり、デバイスのハードウェアキーボードの表示など、アクティビティの再開を引き起こす可能性があります。あなたはあなたが自分で処理したいこれらのかを指定することができますAndroidのためのモノラル

ActivityAttribute:で、あなたの `Activity`ため` configChanges =「方向」:

[Activity(ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden)] 
public class MainActivity : Activity 
+1

ありがとうございました。これは単純な方法ではないことが確認されましたが、オリエンテーションの変更を自分自身で処理することは、最高のものになるでしょう –

+0

この問題を処理するすべてのJavaの方法を変換しました。 AndroidはRotationでActivityを再作成するため、前のコンテキストを参照するとクラッシュする可能性があります。私はすべてのJavaソリューションを試してみましたが、主に2つのGCがあるため、Android用のMonoではうまく機能しませんでした。あなたがあなたのOnDestroyであなたのリソースを掃除することに非常に勤勉である限り、これを行うための最善の方法は、少なくともMono for Androidでは、この方法です。あなたは100%OKでなければなりません! – emalamisura

+0

@Greg、ありがとうございます。 API 13以上に必要なscreenSizeに相当するConfigurationChangesの内容を知っていますか? 2番目の質問で参照されている[リンク](http://stackoverflow.com/questions/5620033/onconfigurationchanged-notgetting-called)? – TChadwick

関連する問題