0

2 つのアクティビティを使用するアプリケーションがあります。start または main アクティビティは、Bluetooth 接続をセットアップします。別のアクティビティに切り替えると、Bluetooth 接続が失われます。切り替え時にBluetooth接続を維持できますか? これが OnResume() と onPause() です。onPause で btSocket.close() を削除すると、接続は維持されますが、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() + ".");
}
}
4

1 に答える 1

0

Bluetooth 接続をアクティビティから独立させる必要があります。すべての Bluetooth コードを、Android アプリケーション クラスから派生した「MyApp」クラス、またはサービスに配置することをお勧めします。サービスの使用はより複雑になりますが、Bluetooth 通信を終了したい場合など、ユーザーがアクティビティを閉じた後でもアプリを実行し続けるオプションが提供されます。

どちらのオプションもアプリを構成する一般的な方法であるため、特にネットワーク通信の形式がある場合は、両方のオプションについて多くのことが書かれています。

于 2013-09-24T01:52:40.360 に答える