Bluetooth для Android: подключить()/отключить()

В настоящее время я разрабатываю приложение, которое должно подключаться к устройству, записывать/читать данные и надежно закрывать соединение. В настоящее время у меня есть сплошная запись/чтение. Мое отключение, а затем повторное подключение ужасно ненадежно и часто приводит к сбою телефона ... а иногда и к Eclipse. Я просматривал многочисленные статьи, пытаясь понять это, и... не повезло...

****ФУНКЦИЯ ПОДКЛЮЧЕНИЯ**

public boolean connect()
{
  ConfigData.getInstance();
  BluetoothSocket tmp = null;
  BluetoothDevice device = ConfigData.m_SharedBluetoothDevice;
  Method m;
  try {

   tmp = device.createRfcommSocketToServiceRecord(MY_UUID);//(BluetoothSocket)
    m.invoke(device, 1);
  } catch (SecurityException e) { 
   e.printStackTrace();
  } catch (IllegalArgumentException e) {  
   e.printStackTrace();
  } 
  catch (IOException e) {
   e.printStackTrace();
  }
        ConfigData.m_SharedBluetoothSocket = tmp;
        try {
   ConfigData.m_SharedBluetoothSocket.connect();
   ConfigData.bIsBTConnected = true;
  } catch (IOException e) {
   try {
    closeSocket();
    m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
    tmp = (BluetoothSocket) m.invoke(device, 1);
   } catch (SecurityException e1) {
    e1.printStackTrace();
   } catch (NoSuchMethodException e1) {
    e1.printStackTrace();
   } catch (IllegalArgumentException e1) {
    e.printStackTrace();
   } catch (IllegalAccessException e1) {
    e.printStackTrace();
   } catch (InvocationTargetException e1) {
    e.printStackTrace();
   }
   ConfigData.m_SharedBluetoothSocket = tmp;
   try {
    ConfigData.m_SharedBluetoothSocket.connect();
    ConfigData.bIsBTConnected = true;
   } catch (IOException e1) {
    ConfigData.m_BluetoothException += e1.toString();
    ConfigData.bIsBTConnected = false;
    return false;

   }
   e.printStackTrace();
   return true;
  }
        return true;
 }

****Функция отключения**

 public void destroySocket()
 {
     try {
      if(m_InStream != null)
      {
       m_InStream.close();
       m_InStream = null;
      }
      if(m_OutStream != null)
      {
       m_OutStream.close();
       m_OutStream  = null;
      }
      if(ConfigData.m_SharedBluetoothSocket != null)
      {
       ConfigData.m_SharedBluetoothSocket.close();
       ConfigData.m_SharedBluetoothSocket = null;
      }
      if(m_InStream == null && m_OutStream == null && ConfigData.m_SharedBluetoothSocket == null)
   {
       ConfigData.bIsBTConnected = false;
   }
  } catch (IOException e1) {
   m_InStream = null;
   m_OutStream  = null;
   ConfigData.m_SharedBluetoothSocket = null;
   e1.printStackTrace();
  }
 }

Таким образом, отключение прошло успешно и возвращает все null. Проблема в том, что когда я повторно подключаюсь, он блокируется при второй попытке подключения и либо просто сидит там, либо полностью зависает телефон, вызывая несколько перезагрузок.

У кого-нибудь есть какие-нибудь советы здесь? Это было крайне неприятно. Любая помощь приветствуется!!

Спасибо и Gig 'Em! ТхАг


person TxAg    schedule 19.08.2010    source источник


Ответы (1)


Какой телефон вы используете? Какая ОС? См. этот ответ: Отключить сокет bluetooth в Android

Закрытие на самом деле не работает должным образом на некоторых телефонах HTC 2.1update1.

person Ovi Tisler    schedule 20.08.2010
comment
Хорошо. Я использую ОС HTC Incredible 2.1update1. Я видел этот пост, но я также видел, что на него ответили, и попробовал эти ответы, но не дал положительного результата. Вы знаете, должен ли/когда Суперсемейка получить Фройо? Спасибо хоть! - person TxAg; 23.08.2010