2011-09-12 18 views
1

私は、Bluetooth接続を持つアプリケーションを作成しています。私は、接続が失われた/失敗/確立された/等のたびにコールバックを使用するライブラリを作成しました。接続に関するすべてがうまくいきますが、私は向きの変更を処理するのに苦労しています。デバイスの向きが変わったときに接続を開いたままにしておきたい。同時に、ユーザがアプリケーションを閉じたときに接続が閉じられるようにしたい。私がこれを設計しているAPIレベルは、API 5-10です。ここで私が遭遇問題があります:ブルートゥースソケットで方向変更を処理する最善の方法

  1. 私はonDestroy()に私の接続を閉じるとアプリが単に一時停止されたときに、接続は(所望の出力を)アプリが閉じているたびに閉じなくなります。ただし、アプリケーションの方向が変わるたびにonDestroy()が呼び出されます。それは問題#2につながる。

  2. onRetainNonConfigurationInstance()を使用すると、オープンソケットを正常に維持できます。 onDestroy()のソケットを閉じなければ、すべて正常に動作します。ただし、アプリが終了すると(つまり、他の端末からの読み取り中に)ソケットが開いたままになっているようです。

私が現在持っている設定は次のようになります。

BluetoothConnection btConnection; 
@Override 
public void onCreate(Bundle icicle) 
{ 
    /** Activity setup **/ 

    btConnection = (BluetoothConnection) getLastNonConfigurationInstance(); 
    if(btConnection != null) // we already have a connection from a previous state, let's set it up to work with this state 
    { 
     /** Set up the connection since it already exists **/ 
    } 
} 

@Override 
public Object onRetainNonConfigurationInstance() 
{ 
    BluetoothConnection saveConnection = btConnection; 
    return saveConnection; 
} 

@Override 
protected void onDestroy() 
{ 
    super.onDestroy() 
    if(btConnection != null) 
     btConnection.closeConnection(); 
} 

この現在の実装では、ソケットが保存されますが、同時にbecause both onRetainNonConfigurationInstance()は同様onDestroy()と呼ばれる閉じました。

私は二つのことを知りたいと思います:

  1. onRetainNonConfigrationInstance()で始まるように、この問題に対処するための良い方法ですか?
  2. アプリが終了するまで接続を開いたままにするよりエレガントな方法はありますか?私は事を防ぐためにonRetainCalledのようなブール値を作成することを考えましたが、それは私にとっては醜い(おそらく信頼できない)ようです。

答えて

1

これは、Bluetooth接続コードをServiceに入れるのが最適です。これは非常に優れています。何も考えずに複数のアクティビティを開くことができます。

+0

今はとても簡単です。ありがとう。 – DeeV

関連する問題