2014-05-17 2 views
0

"잘 동작하는"Android 앱은 onPause()에서 브로드 캐스트 리시버를 등록 취소합니다. 그러나 블루투스 검색 기능을 사용하도록 설정하면이 작업이 복잡해집니다.Android 블루투스 검색 기능 및 인 텐트

잘 작동하는 활동이 onPause()에서 BLUETOOTH_SCAN_MODE_CHANGED 수신기의 등록을 취소했다고 가정 해 보겠습니다.() 메소드 지금까지, 방송 의도가 내 활동의 onResume 전에 를 해고가 발생했습니다 모든 경우에

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

: 그런 다음, 사용자의 인앱 버튼은 검색 기능을 사용하려면 탭이 코드가 실행됩니다 가 호출됩니다. 즉, 내 액티비티가 수신기를 다시 등록하기 전에 해당 액티비티가 시작되고 해당 액티비티는 블루투스를 검색 가능하게 만든 브로드 캐스트 인 텐트를받지 못합니다.

제 제안은 방송 의도를 그대로 남겨 두는 것입니다. 즉, onPause()에서 등록을 취소하지 않는 것입니다.

내 질문은 : 더 나은 해결 방법이 있습니까? onPause()와 onResume() 사이에 등록 된 브로드 캐스트 리시버를 두는 것이 좋지 않습니까? 감사!

답변

0

Bluetooth 상호 작용을 서비스에 위임 할 수 있습니다. BroadcastReceiver는 활동의 라이프 사이클 전반에 걸쳐 존재하는 서비스에 등록/등록 취소 될 수 있습니다. 서비스의 동일한 프로세스에서 살면 활동은 재개되는대로 바로 연결할 수 있으며 BroadcastReceiver가받은 모든 것을 얻을 수 있습니다.

1

당신은이 같은 onResume에서 현재 블루투스 검색 가능 상태() 얻을 수 있습니다 : 당신이 onPause에 방송 수신기의 등록을 취소()와 onResume에 다시 등록을 계속할 수

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

그 방법을().