Android蓝牙可发现性和意图

时间:2014-05-17 20:29:03

标签: android android-intent bluetooth

我的理解是"表现良好" Android应用将在onPause()中取消注册其广播接收器。但是,当您启用蓝牙可发现性时,这很复杂。

让我们说我的表现良好的活动在其onPause()中注销其BLUETOOTH_SCAN_MODE_CHANGED接收器。然后,用户点击应用程序内的按钮以启用可发现性,并运行此代码:

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

在我到目前为止遇到的所有情况下,广播意图在调用我的Activity的onResume()方法之前被激活,这意味着它在我的Activity re之前被触发 - 注册其接收器,并且活动不接收蓝牙被发现的广播意图。

我的解决方法是保留广播意图,即不在onPause()中取消注册。

我的问题是:有更好的解决方法吗?让onPause()和onResume()之间注册的广播接收器真的不好吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以在onResume()中获取当前蓝牙可发现状态,如下所示:

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

这样你就可以继续在onPause()中取消注册你的广播接收器,并在onResume()中重新注册它。

答案 1 :(得分:0)

您可以将蓝牙互动委派给服务。 BroadcastReceiver可以由服务注册/取消注册,该服务存在于Activity的生命周期中。生活在服务的同一过程中,活动可以在恢复后立即连接到它并获得BroadcastReceiver收到的任何内容。