我的理解是"表现良好" Android应用将在onPause()中取消注册其广播接收器。但是,当您启用蓝牙可发现性时,这很复杂。
让我们说我的表现良好的活动在其onPause()中注销其BLUETOOTH_SCAN_MODE_CHANGED接收器。然后,用户点击应用程序内的按钮以启用可发现性,并运行此代码:
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
startActivity(discoverableIntent);
在我到目前为止遇到的所有情况下,广播意图在调用我的Activity的onResume()方法之前被激活,这意味着它在我的Activity re之前被触发 - 注册其接收器,并且活动不接收蓝牙被发现的广播意图。
我的解决方法是保留广播意图,即不在onPause()中取消注册。
我的问题是:有更好的解决方法吗?让onPause()和onResume()之间注册的广播接收器真的不好吗?谢谢!
答案 0 :(得分:1)
您可以在onResume()中获取当前蓝牙可发现状态,如下所示:
final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
boolean discoverable = adapter.getScanMode() == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE;
这样你就可以继续在onPause()中取消注册你的广播接收器,并在onResume()中重新注册它。
答案 1 :(得分:0)
您可以将蓝牙互动委派给服务。 BroadcastReceiver可以由服务注册/取消注册,该服务存在于Activity的生命周期中。生活在服务的同一过程中,活动可以在恢复后立即连接到它并获得BroadcastReceiver收到的任何内容。