android - 使用蓝牙 socket 处理方向变化的最佳方法

标签 android bluetooth android-orientation

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

  1. 如果我在 onDestroy() 上关闭连接,连接将在每次​​关闭应用程序时关闭,但不会在应用程序简单暂停时关闭(所需输出)。但是,只要应用程序方向发生变化,就会调用 onDestroy()。这导致问题 #2。

  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() 都被调用了。

我想我想知道两件事:

  1. onRetainNonConfigrationInstance() 是处理此问题的好方法吗?
  2. 是否有更优雅的方式来保持连接打开直到应用程序关闭?我考虑过创建一个像 onRetainCalled 这样的 bool 值来防止它关闭,但它对我来说似乎很难看(而且可能不可靠)。

最佳答案

最理想的情况是,您应该将蓝牙连接代码放入服务:我用过这个,它非常好。您完全无需考虑即可打开多个 Activity。

关于android - 使用蓝牙 socket 处理方向变化的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392632/

相关文章:

android - process_begin:CreateProcess(NULL, “”,…)失败

android - "...must supply a layout_height..."但它在我的风格资源中?

java - 在 Android 中使用蓝牙在 2 个设备之间发送数据

android - Android 中的蓝牙信号强度

android - 如何在运行时将 fragment 的屏幕方向锁定为横向

java - 防止倾斜调用 onCreate,以及 Activity 运行的时间测量。

javascript - 为什么 JavaScript 警报在 Phonegap Android 应用程序中显示空字符串,而代码在浏览器上运行良好?

ios - 无法找到 BLE 外设

android - android中 Activity 方向变化的奇怪行为

android - 如何使用 "repo"克隆最小的 android 源?