2

SDK デモの Bluetooth チャットの例を変更して、arduino を搭載した Bluetooth LED マトリックスを制御できるようにしました。チャット プログラムを使用して、Bluetooth 経由でディスプレイにメッセージを送信できます。でも問題があります。縦向きと横向きの 2 つの画面レイアウトを作成しました。このようにして、向きに関係なく、インターフェイスが電話のほとんどのスペースを占めるようにすることができます。

問題は、電話が回転している場合、OnDestroy() が呼び出されて、新しいレイアウト (横向きまたは縦向き) をリロードすることです。OnDestroy() ルーチンでは、Bluetooth リンクが確立されている場合は破棄します。

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

ここの他の投稿を読んで、「android:configChanges="orientation"」をマニフェストに追加することで、サービスが停止するのを防ぐことができることがわかりました。これを行うと、画面を回転させたときに、ディスプレイへの Bluetooth リンクが終了しなくなりましたが、画面が横向きモードで再描画されなくなりました。

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

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

他の方法はありますか?

ありがとう。

4

3 に答える 3

9

「android:configChanges="orientation"」をマニフェストに追加して、アクティビティが破棄されて再作成されるのを防ぐ場合は、次のメソッドを実装することをお勧めします。

public void onConfigurationChanged(Configuration newConfig)

このメソッドは、システム構成が変更されるたびに実行されます。つまり、電話機を回転させて向きを変更したときです。このメソッド内で、アクティビティに新しいレイアウトを再適用できます。

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");
    }
}
于 2012-02-08T02:07:59.383 に答える
0

これを行うための推奨される方法は、TaskFragment でロジックを処理し、アクティビティへのいくつかのコールバックを UI と同期させることです。

より詳細な説明については、次のサイトを参照してください。 http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

于 2015-09-14T18:32:51.690 に答える
0

@alex.veprix に要点を追加する (そして、私が言及しなければならない正しい) 回答を追加するには、API レベル 13 以降のデバイス用に構築している場合は、次の方法で ScreenSize 属性を追加することを忘れないでください。android:configChanges="orientation|screenSize"

詳細はこちら: http://developer.android.com/guide/topics/manifest/activity-element.html

于 2015-09-14T17:45:42.507 に答える