2012-01-26 1 views
0

Я вытягиваю свои волосы на этом. Я искал по всему Интернету рабочий пример и не смог его найти.BluetoothSocket.Connect Timeout

Я пытаюсь подключиться к устройству Bluetooth. Исходный код работает в версии Java.

Все работает до тех пор, пока не вызывается Connect(), а затем все просто зависает. Мне нужно иметь возможность отправлять и получать данные на устройство bluetooth, и я понимаю, что сначала нужно вызвать Connect().

Код:

// first, check that blue tooth is available 
using (BluetoothAdapter btAdapter = BluetoothAdapter.DefaultAdapter) 
{ 
    // if no adapter, then exit 
    if (btAdapter == null) 
    { 
    // show toast message 
    Toast.MakeText(m_Context, "Bluetooth is not turned on", ToastLength.Long).Show(); 

    // exit 
    return false; 
    } 

    // we found an adapter, now get the list of attached devices 
    foreach (BluetoothDevice device in btAdapter.BondedDevices) 
    { 
    // skip if not a P25 
    if (!device.Name.ToLower().Contains("p25")) 
     continue; 

    BluetoothDevice mdevice = btAdapter.GetRemoteDevice(device.Address); 

    IntPtr createRfcommSocket = JNIEnv.GetMethodID(
      mdevice.Class.Handle, 
      "createRfcommSocket", 
      "(I)Landroid/bluetooth/BluetoothSocket;"); 
    IntPtr socket = JNIEnv.CallObjectMethod(
     mdevice.Handle, 
     createRfcommSocket, 
     new JValue(1)); 

    // we found the device, confirm it's actually paired and turned on 
    using (BluetoothSocket NewSocket = new Java.Lang.Object(socket).JavaCast<BluetoothSocket>()) 
    { 
     try 
     { 
     // skip if nothing created 
     if (NewSocket == null) 
      continue; 

     // connect 
     NewSocket.Connect(); 

     // get the output stream 
     NewSocket.OutputStream.Close(); 

     // close the socket 
     NewSocket.Close(); 
     } 

     catch (Exception excep) 
     { 
     Log.Error("DeviceLink", excep.Message); 
     continue; 
     } 
    } 
    } 
} 

ответ

0

Hy, извините мой плохой английский, я полагаю, вы развиваете, что используйте с BlueBamboo, у меня также есть много проблем, чтобы напечатать в Bluebamboo PM25 с помощью Monodroid, решить этот вопрос, создать новый класс с тремя глобалами:

  public BluetoothAdapter Adapter; 
      public BluetoothDevice RemoteDevice; 
      public BluetoothSocket Socket; 

Сейчас в construtor класса

  Adapter = BluetoothAdapter.DefaultAdapter; 

      if (Adapter == null) throw new NotSupportedException("Dispositivo sem suporte a bluetooth"); 
      if (!Adapter.IsEnabled) Adapter.Enable(); 

      foreach (var device in Adapter.BondedDevices) 
      { 
       if (!device.Name.ToLower().Contains("p25")) continue; 

       RemoteDevice = Adapter.GetRemoteDevice(device.Address); 
       Socket = RemoteDevice.CreateRfcommSocketToServiceRecord(UUID.FromString("00001101-0000-1000-8000-00805F9B34FB")); 

       if (Socket == null) continue; 

       Socket.Connect(); 
       break; 


      } 

Instance только время этот класс в вашей деятельности, после использования, только закрыть SOCKET или реализует IDisposable в своем классе.

  public void Dispose() 
     { 
       Socket.Close(); 
     } 

Будьте счастливы !!!!

0

Я знаю, что это сообщение устарело, и я нашел здесь что-то другое, но я столкнулся с этой проблемой, чтобы решить проблему «зависания» для меня, была запущена часть подключения в другом потоке, чем поток пользовательского интерфейса, а затем обновите поток пользовательского интерфейса с результатами. Это то, что работает для меня .. (BTW им с помощью Monodroid для C#)

private void connectBTwThread() 
    { 
     new Thread(new ThreadStart(() => 
     { 
      TextView txtList = FindViewById<TextView>(Resource.Id.devicesList); 

      #region Connect routine 

      BluetoothSocket btSockets = bth.BondedDevices.Where(d => d.Name.ToUpper().Contains("JVC")).Single() 
       .CreateRfcommSocketToServiceRecord(_uuid); 

      try 
      { 
       RunOnUiThread(() => 
       { 
        txtList.Text += System.Environment.NewLine; 
        txtList.Text += "Attempting to Connect to " + btSockets.RemoteDevice.Name 
         + System.Environment.NewLine; 
       }); 

       btSockets.Connect(); 

       if (btSockets.IsConnected) 
        RunOnUiThread(() => { txtList.Text += "Connected to " + btSockets.RemoteDevice.Name; }); 

       btSockets.Close(); 
      } 
      catch (IOException e) 
      { 
       RunOnUiThread(() => { txtList.Text += "BT Connect Failed: " + e.Message + System.Environment.NewLine; }); 
       try 
       { 
        btSockets.Close(); 
       } 
       catch (IOException closeException) 
       { 
        return; 
       } 
      } 
      #endregion 

     })).Start(); 
    } 

Я отправляю это, чтобы вернуть SO сообщества и, надеюсь, кто-то от этого выиграет ...

 Смежные вопросы

  • Нет связанных вопросов^_^