2016-06-21 3 views
0

Я пытаюсь отправить массив байтов из устройства 6.0.1 android в модуль Bluetooth RN4020. До сих пор я смог обнаружить, связать и подключиться к модулю. Я пытаюсь отправить массив байтов, используя 16-битный UUID для записи без ответа. Когда я использую свой код, я не получаю никаких ошибок, массив байтов просто не отправляется. Что я делаю не так?Как отправить байт [] на устройство BLE без пользовательского UUID

Вот мой код:

namespace Remote 
{ 
    [Activity(Label = "Remote", MainLauncher = true, Icon =  "@drawable/icon")] 
    public class MainActivity : Activity 
    { 
     int count = 1; 
     const string UniversalUUID = "00001101-0000-1000-8000-00805F9B34FB"; 
     const string MAC = "00:1E:C0:22:3D:0E"; 
     ICollection<BluetoothDevice> pairedDevices; 
     BluetoothAdapter adapter; 
     BluetoothDevice device; 
     BluetoothGatt gatt; 
     BluetoothGattCallback callBack; 
     BluetoothManager manager; 

     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      SetContentView(Resource.Layout.Main); 
      Button test = FindViewById<Button>(Resource.Id.Test); 
      EditText MACs = FindViewById<EditText>(Resource.Id.MACs); 

      pairedDevices = getAllPairedDevices(); 

      test.Click += delegate 
      { 
        connected(); 
        byte[] buffer = new byte [] { 124, 079, 044, 048, 052, 044, 048, 052, 013, 010};//stringToByteArray("|O,04,04\r"); 
        BluetoothGattCharacteristic characteristic = new  BluetoothGattCharacteristic(UUID.NameUUIDFromBytes(new byte[] { 0, 4}),  GattProperty.Write, GattPermission.Write); 
        characteristic.SetValue(buffer); 
        gatt.WriteCharacteristic(characteristic); 
      }; 


     private ICollection<BluetoothDevice> getAllPairedDevices() 
     { 
      BluetoothAdapter btAdapter = BluetoothAdapter.DefaultAdapter; 
      return btAdapter.BondedDevices; 
     } 

     private async Task<bool> connected() 
     { 
      manager =  (BluetoothManager)GetSystemService(Context.BluetoothService); 
      adapter = manager.Adapter; 
      device = adapter.GetRemoteDevice(MAC); 
      gatt = device.ConnectGatt(this, false, callBack);  

      return true; 
     } 
    } 
} 

ответ

0

Я не знаю, почему конструктор BluetoothGattCharacteristic является общедоступным. Правильный способ получить BluetoothGattCharacteristic - это сделать обнаружение службы, вызвав gatt.DiscoverServices(). Когда вы получите обратный вызов, что обнаружение службы завершено, вы можете получить все службы и характеристики gatt.GetServices().

В вашем коде вы также не ждете, пока не будете связаны. Метод device.ConnectGatt является асинхронным, что означает, что он запускает попытку подключения. Объект OnConnectionStateChange объекта callback будет вызываться, когда ваше устройство подключится/отключится.

+0

1 Я не знаю, как получить обратный вызов, чтобы начать выполнение метода при успешном событии - пример будет высоко оценен. 2 Кажется, у меня отсутствует gatt.GetServices() метод у меня есть gatt.getService (UUID) –

+0

Я довольно новичок в bluetooth и xamarin в целом и прочесываю интернет в течение недели, t нашел какие-либо примеры xamarin, как это сделать. На данный момент я довольно отчаянный. Так может кто-то, пожалуйста, дайте пример кода, как отправить массив байтов в UUID, включая процедуру подключения. –

+0

Любой пример Java будет работать. Это те же API-интерфейсы на диалекте Хамарин. Например, проверьте https://android.googlesource.com/platform/development/+/cefd49aae65dc85161d08419494071d74ffb982f/samples/BluetoothLeGatt/src/com/example/bluetooth/le/BluetoothLeService.java. – Emil