使用蓝牙插座处理方向变化的最佳方法

时间:2011-09-12 19:00:57

标签: android bluetooth android-orientation

我正在创建一个具有蓝牙连接的应用。我创建了一个每次连接丢失/失败/建立/等时使用回调的库。有关连接的一切工作正常,但我很难处理方向更改。我希望在设备更改方向时连接保持打开状态。同时,我希望在用户关闭应用程序时关闭连接。我正在设计的API级别是API 5-10。这是我遇到的问题:

  1. 如果我在onDestroy()关闭我的连接,则每次应用关闭时连接都会关闭,但只有暂停应用时才会关闭(所需的输出)。但是,只要应用程序方向发生更改,就会调用onDestroy()。这导致问题#2。

  2. 如果我使用onRetainNonConfigurationInstance(),我可以成功保持打开的套接字。如果我不关闭onDestroy()中的套接字,那么一切正常。但是,当应用程序关闭时,套接字似乎保持打开状态(即其他设备仍在从中读取)。

  3. 我目前的设置看起来与此相似:

    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();
    }
    

    使用此当前实现,套接字将被保存,但在调用because both onRetainNonConfigurationInstance()onDestroy()的同时关闭。

    我想我想知道两件事:

    1. onRetainNonConfigrationInstance()是开始处理此问题的好方法吗?
    2. 在应用关闭之前,是否有一种更优雅的方式可以保持连接打开?我想过创建像onRetainCalled这样的布尔值来防止事情结束,但它对我来说似乎很难看(并且可能不可靠)。

1 个答案:

答案 0 :(得分:1)

最理想的是,您应该将蓝牙连接代码放入Service:我使用它并且它非常出色。您可以打开多个活动而无需考虑它。

相关问题