切换意图

时间:2013-09-24 00:35:43

标签: android bluetooth

我有一个将使用2个活动的应用程序。开始或主要活动设置蓝牙连接。当我切换到另一个活动时,我松开了蓝牙连接。切换时可以保持蓝牙连接吗?这是OnResume()和onPause()。当我删除onPause中的btSocket.close()时,连接被maitained但在onResume尝试连接时不会进行通信。

    private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {
  if(Build.VERSION.SDK_INT >= 10){
      try {
          final Method  m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class });
          return (BluetoothSocket) m.invoke(device, MY_UUID);
      } catch (Exception e) {
          Log.e(TAG, "Could not create Insecure RFComm Connection",e);
      }
  }
  return  device.createRfcommSocketToServiceRecord(MY_UUID);
  }

  @Override
  public void onResume() {
  super.onResume();

  Log.d(TAG, "...onResume - try connect...");

  BluetoothDevice device = btAdapter.getRemoteDevice(address);


try {
    btSocket = createBluetoothSocket(device);
} catch (IOException e) {
    errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
}

 btAdapter.cancelDiscovery();

try {
  btSocket.connect();
  Log.d(TAG, "....Connection ok...");
} catch (IOException e) {
  try {
    btSocket.close();
  } catch (IOException e2) {
    errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
  }
}

// Create a data stream so we can talk to server.
Log.d(TAG, "...Create Socket...");

mConnectedThread = new ConnectedThread(btSocket);
mConnectedThread.start();
}

@Override
public void onPause() {
super.onPause();

Log.d(TAG, "...In onPause()...");

try     {
  btSocket.close();
} catch (IOException e2) {
  errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
}
}

1 个答案:

答案 0 :(得分:0)

您应该使您的蓝牙连接独立于您的活动。我建议您将所有蓝牙代码放入从Android Application类派生的“MyApp”类中,或者放入服务中。使用服务会更复杂,但即使在用户关闭活动后,它也会为您提供保持应用程序运行的选项,例如:如果你想完成蓝牙通信。

你会发现很多关于这两个选项的文章,因为它们是构建你的应用程序的常用方法 - 特别是在有某种形式的网络通信时。