2012-02-08 8 views
2

私はarduino powered bluetooth LEDマトリックスを制御できるようにSDKデモからbluetoothチャットの例を変更しました。チャットプログラムを使用して、ブルートゥースを介してディスプレイにメッセージを送信できます。私は問題がある。私は2つの画面レイアウト、肖像画と風景をしました。こうすることで、向きにかかわらず、インターフェイスが電話機のスペースを最大限占有できるようになります。Android:スクリーンローテーション、破壊とサービスのコンンダムダム

問題は、電話機を回転させて新しいレイアウト(横向きまたは縦向き)を再読み込みするときに、OnDestroy()が呼び出されることです。それが確立されている場合OnDestroy()ルーチンでは、私はまた、ブルートゥースリンクを破棄:configChanges:ここでの他の記事を読む

public void onDestroy() { 
     super.onDestroy(); 
     // Stop the Bluetooth chat services 
     if (mChatService != null) 
      mChatService.stop(); 
     if (D) 
      Log.e(TAG, "--- ON DESTROY ---"); 
    } 

が、私はあなたが」アンドロイドを加えることによって停止されてからサービスを防止することができることを発見しました= "orientation" "をマニフェストに渡します。これを行うと、画面を回転させると、ディスプレイへのBluetoothのリンクは終了しなくなりましたが、画面はランドスケープモードで再描画されません。

これを修正するには、接続を終了する「if mchatservice ...」セクションを削除することを考えていますが、アプリケーションが最終的に終了したときに実行するコードが必要になります。

接続を終了せずに回転したときに画面を再描画する方法はありますか?もしそうでなければ、私はいつでもサービスコードをOnPause()イベントに移すことができると思うが、アプリがforgroundフォーカスを失うと接続が終了する。

他の方法はありますか?

ありがとうございました。

答えて

9

あなたは「アンドロイド:configChangesは=」追加した場合は破壊され、再作成されてからの活動を防ぐために、あなたのマニフェストへの方向を「」、あなたはメソッドを実装する必要があります

public void onConfigurationChanged(Configuration newConfig) 

このメソッドが実行されますシステム構成が変更されるたびに、つまり電話機を回転させて向きが変更されるたびに、このメソッド内で、あなたの活動のための新しいレイアウトを再適用することができます:あなたはAPIを持つデバイスのために構築している場合は、答えを

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Log.e(TAG, "ORIENTATION_LANDSCAPE"); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Log.e(TAG, "ORIENTATION_PORTRAIT"); 
    } 
} 
+0

素晴らしいです。私はちょうどグーグルで1時間の検索をした後に何か似たものを見つけましたが、あなたの答えはより詳細です(ロギングに役立ちます): 'setContentView(R.layout.main);' ありがとう! –

関連する問題