2014-05-17 130 views
0

我的理解是,「行爲良好」的Android應用程序將在onPause()中註銷其廣播接收器。但是,當您啓用藍牙可發現性時,這很複雜。Android藍牙可發現性和意圖

假設我的行爲良好的Activity在其onPause()中取消註冊它的BLUETOOTH_SCAN_MODE_CHANGED接收器。然後,用戶點擊應用程序內的按鈕,使可發現並運行這些代碼:

Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
startActivity(discoverableIntent); 

在我遇到到目前爲止,廣播意圖之前我活動的的onResume解僱所有情況下()方法這意味着它在我的活動重新註冊其接收器之前被觸發,並且該活動沒有收到藍牙被發現的廣播意圖。

我的解決方法是隻保留廣播意圖,即不要在onPause()中註銷它。

我的問題是:是否有更好的解決方法?在onPause()和onResume()之間註冊廣播接收者實際上是不好的?謝謝!

回答

0

您可以將藍牙交互委託給服務。 BroadcastReceiver可以由服務註冊/註銷,該服務遍佈整個Activity的生命週期。生活在服務的同一過程中,活動可以在恢復後立即連接到它,並獲得廣播接收器收到的任何內容。

1

你可以得到的onResume當前藍牙偵測狀態()這樣的:

final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); 
boolean discoverable = adapter.getScanMode() == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE; 

這樣,你可以繼續註銷你的廣播接收器中的onPause()和的onResume重新註冊它()。