2011-09-12 47 views
1

我正在創建一個具有藍牙連接的應用程序。我創建了一個庫,每次連接丟失/失敗/建立/等時都會使用回調。關於連接的一切工作都很好,但我很難處理方向更改。我希望連接在設備更改方向時保持打開狀態。同時,我希望在用戶關閉應用程序時連接關閉。我設計的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

最好是,你應該把你的藍牙連接代碼放到Service:我用這個,它非常好。您可以打開多個活動,而不必考慮它。

+0

現在看起來很簡單。謝謝。 – DeeV