我正在创建一个具有蓝牙连接的应用程序。我创建了一个库,每次连接丢失/失败/建立/等时都使用回调。关于连接的一切都很好,但我很难处理方向变化。我希望连接在设备改变方向时保持打开状态。同时我希望连接在用户关闭应用程序时关闭。我为此设计的 API 级别是 API 5-10。这是我遇到的问题:
如果我在
onDestroy()
上关闭连接,连接将在每次关闭应用程序时关闭,但不会在应用程序简单暂停时关闭(所需输出)。但是,只要应用程序方向发生变化,就会调用onDestroy()
。这导致问题 #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();
}
在当前的实现中,套接字将被保存但同时关闭因为 onRetainNonConfigurationInstance()
和 onDestroy()
都被调用了。
我想我想知道两件事:
onRetainNonConfigrationInstance()
是处理此问题的好方法吗?- 是否有更优雅的方式来保持连接打开直到应用程序关闭?我考虑过创建一个像 onRetainCalled 这样的 bool 值来防止它关闭,但它对我来说似乎很难看(而且可能不可靠)。
最佳答案
最理想的情况是,您应该将蓝牙连接代码放入服务
:我用过这个,它非常好。您完全无需考虑即可打开多个 Activity。
关于android - 使用蓝牙 socket 处理方向变化的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392632/