2016-12-26 334 views
1

我試圖讀取和使用this guide從/寫入BLE模塊(HF-BL100-CU)但是當我試圖讓該服務將返回NULL:定製BLE服務沒有發現,mBluetoothGatt.getService(UUID)返回null

在這裏:

BluetoothGattService mCustomService = mBluetoothGatt.getService(UUID.fromString("00002b11-0000-1000-8000-00805f9b34fb")); 
     if(mCustomService == null){ 
      Log.w(TAG, "Custom BLE Service not found on write"); 
      return; 
     } 

這裏:

BluetoothGattService mCustomService = mBluetoothGatt.getService(UUID.fromString("00002b10-0000-1000-8000-00805f9b34fb")); 
     if(mCustomService == null){ 
      Log.w(TAG, "Custom BLE Service not found on read"); 
      return; 
     } 

有人建議here應該有前一個完整的發現服務的,但我很確定我已經這樣做了,我可能是錯的,因爲我是BLE的新手,仍然試圖掌握它的協議(發現的服務的輸出日誌在最後添加)。

從數據片和BLE應用中的UUID進行讀/寫是 - 讀:2B10,寫:2B11

任何幫助將不勝感激。

BluetoothLeService.java:

package com.example.android.bluetoothlegatt; 

import android.app.Service; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothGatt; 
import android.bluetooth.BluetoothGattCallback; 
import android.bluetooth.BluetoothGattCharacteristic; 
import android.bluetooth.BluetoothGattDescriptor; 
import android.bluetooth.BluetoothGattService; 
import android.bluetooth.BluetoothManager; 
import android.bluetooth.BluetoothProfile; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Binder; 
import android.os.IBinder; 
import android.util.Log; 

import java.util.List; 
import java.util.UUID; 

/** 
* Service for managing connection and data communication with a GATT server hosted on a 
* given Bluetooth LE device. 
*/ 
public class BluetoothLeService extends Service { 
    private final static String TAG = BluetoothLeService.class.getSimpleName(); 

    private BluetoothManager mBluetoothManager; 
    private BluetoothAdapter mBluetoothAdapter; 
    private String mBluetoothDeviceAddress; 
    private BluetoothGatt mBluetoothGatt; 
    private int mConnectionState = STATE_DISCONNECTED; 

    private static final int STATE_DISCONNECTED = 0; 
    private static final int STATE_CONNECTING = 1; 
    private static final int STATE_CONNECTED = 2; 

    public final static String ACTION_GATT_CONNECTED = 
      "com.example.bluetooth.le.ACTION_GATT_CONNECTED"; 
    public final static String ACTION_GATT_DISCONNECTED = 
      "com.example.bluetooth.le.ACTION_GATT_DISCONNECTED"; 
    public final static String ACTION_GATT_SERVICES_DISCOVERED = 
      "com.example.bluetooth.le.ACTION_GATT_SERVICES_DISCOVERED"; 
    public final static String ACTION_DATA_AVAILABLE = 
      "com.example.bluetooth.le.ACTION_DATA_AVAILABLE"; 
    public final static String EXTRA_DATA = 
      "com.example.bluetooth.le.EXTRA_DATA"; 

    public final static UUID UUID_HEART_RATE_MEASUREMENT = 
      UUID.fromString(SampleGattAttributes.HEART_RATE_MEASUREMENT); 

    // Implements callback methods for GATT events that the app cares about. For example, 
    // connection change and services discovered. 
    private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { 
     @Override 
     public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { 
      String intentAction; 
      if (newState == BluetoothProfile.STATE_CONNECTED) { 
       intentAction = ACTION_GATT_CONNECTED; 
       mConnectionState = STATE_CONNECTED; 
       broadcastUpdate(intentAction); 
       Log.i(TAG, "Connected to GATT server."); 
       // Attempts to discover services after successful connection. 
       Log.i(TAG, "Attempting to start service discovery:" + 
         mBluetoothGatt.discoverServices()); 

      } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { 
       intentAction = ACTION_GATT_DISCONNECTED; 
       mConnectionState = STATE_DISCONNECTED; 
       Log.i(TAG, "Disconnected from GATT server."); 
       broadcastUpdate(intentAction); 
      } 
     } 

     @Override 
     public void onServicesDiscovered(BluetoothGatt gatt, int status) { 
      if (status == BluetoothGatt.GATT_SUCCESS) { 
       broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED); 
      } else { 
       Log.w(TAG, "onServicesDiscovered received: " + status); 
      } 
     } 

     @Override 
     public void onCharacteristicRead(BluetoothGatt gatt, 
             BluetoothGattCharacteristic characteristic, 
             int status) { 
      if (status == BluetoothGatt.GATT_SUCCESS) { 
       broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic); 
      } 
     } 

     @Override 
     public void onCharacteristicChanged(BluetoothGatt gatt, 
              BluetoothGattCharacteristic characteristic) { 
      broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic); 
     } 
    }; 

    private void broadcastUpdate(final String action) { 
     final Intent intent = new Intent(action); 
     sendBroadcast(intent); 
    } 

    private void broadcastUpdate(final String action, 
           final BluetoothGattCharacteristic characteristic) { 
     final Intent intent = new Intent(action); 

     // This is special handling for the Heart Rate Measurement profile. Data parsing is 
     // carried out as per profile specifications: 
     // http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml 
     if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) { 
      int flag = characteristic.getProperties(); 
      int format = -1; 
      if ((flag & 0x01) != 0) { 
       format = BluetoothGattCharacteristic.FORMAT_UINT16; 
       Log.d(TAG, "Heart rate format UINT16."); 
      } else { 
       format = BluetoothGattCharacteristic.FORMAT_UINT8; 
       Log.d(TAG, "Heart rate format UINT8."); 
      } 
      final int heartRate = characteristic.getIntValue(format, 1); 
      Log.d(TAG, String.format("Received heart rate: %d", heartRate)); 
      intent.putExtra(EXTRA_DATA, String.valueOf(heartRate)); 
     } else { 
      // For all other profiles, writes the data formatted in HEX. 
      final byte[] data = characteristic.getValue(); 
      if (data != null && data.length > 0) { 
       final StringBuilder stringBuilder = new StringBuilder(data.length); 
       for(byte byteChar : data) 
        stringBuilder.append(String.format("%02X ", byteChar)); 
       intent.putExtra(EXTRA_DATA, new String(data) + "\n" + stringBuilder.toString()); 
      } 
     } 
     sendBroadcast(intent); 
    } 

    public class LocalBinder extends Binder { 
     BluetoothLeService getService() { 
      return BluetoothLeService.this; 
     } 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return mBinder; 
    } 

    @Override 
    public boolean onUnbind(Intent intent) { 
     // After using a given device, you should make sure that BluetoothGatt.close() is called 
     // such that resources are cleaned up properly. In this particular example, close() is 
     // invoked when the UI is disconnected from the Service. 
     close(); 
     return super.onUnbind(intent); 
    } 

    private final IBinder mBinder = new LocalBinder(); 

    /** 
    * Initializes a reference to the local Bluetooth adapter. 
    * 
    * @return Return true if the initialization is successful. 
    */ 
    public boolean initialize() { 
     // For API level 18 and above, get a reference to BluetoothAdapter through 
     // BluetoothManager. 
     if (mBluetoothManager == null) { 
      mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); 
      if (mBluetoothManager == null) { 
       Log.e(TAG, "Unable to initialize BluetoothManager."); 
       return false; 
      } 
     } 

     mBluetoothAdapter = mBluetoothManager.getAdapter(); 
     if (mBluetoothAdapter == null) { 
      Log.e(TAG, "Unable to obtain a BluetoothAdapter."); 
      return false; 
     } 

     return true; 
    } 

    /** 
    * Connects to the GATT server hosted on the Bluetooth LE device. 
    * 
    * @param address The device address of the destination device. 
    * 
    * @return Return true if the connection is initiated successfully. The connection result 
    *   is reported asynchronously through the 
    *   {@code BluetoothGattCallback#onConnectionStateChange(android.bluetooth.BluetoothGatt, int, int)} 
    *   callback. 
    */ 
    public boolean connect(final String address) { 
     if (mBluetoothAdapter == null || address == null) { 
      Log.w(TAG, "BluetoothAdapter not initialized or unspecified address."); 
      return false; 
     } 

     // Previously connected device. Try to reconnect. 
     if (mBluetoothDeviceAddress != null && address.equals(mBluetoothDeviceAddress) 
       && mBluetoothGatt != null) { 
      Log.d(TAG, "Trying to use an existing mBluetoothGatt for connection."); 
      if (mBluetoothGatt.connect()) { 
       mConnectionState = STATE_CONNECTING; 
       return true; 
      } else { 
       return false; 
      } 
     } 

     final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); 
     if (device == null) { 
      Log.w(TAG, "Device not found. Unable to connect."); 
      return false; 
     } 
     // We want to directly connect to the device, so we are setting the autoConnect 
     // parameter to false. 
     mBluetoothGatt = device.connectGatt(this, false, mGattCallback); 
     Log.d(TAG, "Trying to create a new connection."); 
     mBluetoothDeviceAddress = address; 
     mConnectionState = STATE_CONNECTING; 
     return true; 
    } 

    /** 
    * Disconnects an existing connection or cancel a pending connection. The disconnection result 
    * is reported asynchronously through the 
    * {@code BluetoothGattCallback#onConnectionStateChange(android.bluetooth.BluetoothGatt, int, int)} 
    * callback. 
    */ 
    public void disconnect() { 
     if (mBluetoothAdapter == null || mBluetoothGatt == null) { 
      Log.w(TAG, "BluetoothAdapter not initialized"); 
      return; 
     } 
     mBluetoothGatt.disconnect(); 
    } 

    /** 
    * After using a given BLE device, the app must call this method to ensure resources are 
    * released properly. 
    */ 
    public void close() { 
     if (mBluetoothGatt == null) { 
      return; 
     } 
     mBluetoothGatt.close(); 
     mBluetoothGatt = null; 
    } 

    /** 
    * Request a read on a given {@code BluetoothGattCharacteristic}. The read result is reported 
    * asynchronously through the {@code BluetoothGattCallback#onCharacteristicRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int)} 
    * callback. 
    * 
    * @param characteristic The characteristic to read from. 
    */ 
    public void readCharacteristic(BluetoothGattCharacteristic characteristic) { 
     if (mBluetoothAdapter == null || mBluetoothGatt == null) { 
      Log.w(TAG, "BluetoothAdapter not initialized"); 
      return; 
     } 
     mBluetoothGatt.readCharacteristic(characteristic); 
    } 

    /** 
    * Enables or disables notification on a give characteristic. 
    * 
    * @param characteristic Characteristic to act on. 
    * @param enabled If true, enable notification. False otherwise. 
    */ 
    public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic, 
               boolean enabled) { 
     if (mBluetoothAdapter == null || mBluetoothGatt == null) { 
      Log.w(TAG, "BluetoothAdapter not initialized"); 
      return; 
     } 
     mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); 

     // This is specific to Heart Rate Measurement. 
     if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) { 
      BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
        UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG)); 
      descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); 
      mBluetoothGatt.writeDescriptor(descriptor); 
     } 
    } 

    /** 
    * Retrieves a list of supported GATT services on the connected device. This should be 
    * invoked only after {@code BluetoothGatt#discoverServices()} completes successfully. 
    * 
    * @return A {@code List} of supported services. 
    */ 
    public List<BluetoothGattService> getSupportedGattServices() { 
     if (mBluetoothGatt == null) return null; 

     return mBluetoothGatt.getServices(); 
    } 

    public void readCustomCharacteristic() { 
     if (mBluetoothAdapter == null || mBluetoothGatt == null) { 
      Log.w(TAG, "BluetoothAdapter not initialized"); 
      return; 
     } 



     /*check if the service is available on the device*/ 
     BluetoothGattService mCustomService = mBluetoothGatt.getService(UUID.fromString("00002b10-0000-1000-8000-00805f9b34fb")); 
     if(mCustomService == null){ 
      Log.w(TAG, "Custom BLE Service not found on read"); 
      return; 
     } 
     /*get the read characteristic from the service*/ 
     BluetoothGattCharacteristic mReadCharacteristic = mCustomService.getCharacteristic(UUID.fromString("00002b10-0000-1000-8000-00805f9b34fb")); 
     if(mBluetoothGatt.readCharacteristic(mReadCharacteristic) == false){ 
      Log.w(TAG, "Failed to read characteristic"); 
     } 
    } 

    public void writeCustomCharacteristic(int value) { 
     if (mBluetoothAdapter == null || mBluetoothGatt == null) { 
      Log.w(TAG, "BluetoothAdapter not initialized"); 
      return; 
     } 
     /*check if the service is available on the device*/ 
     BluetoothGattService mCustomService = mBluetoothGatt.getService(UUID.fromString("00002b11-0000-1000-8000-00805f9b34fb")); 
     if(mCustomService == null){ 
      Log.w(TAG, "Custom BLE Service not found on write"); 
      return; 
     } 
     /*get the read characteristic from the service*/ 
     BluetoothGattCharacteristic mWriteCharacteristic = mCustomService.getCharacteristic(UUID.fromString("00002b11-0000-1000-8000-00805f9b34fb")); 

     mWriteCharacteristic.setValue(value,android.bluetooth.BluetoothGattCharacteristic.FORMAT_UINT8,0); 
     if(mBluetoothGatt.writeCharacteristic(mWriteCharacteristic) == false){ 
      Log.w(TAG, "Failed to write characteristic"); 
     } 
    } 


} 

登錄:

12-26 17:40:46.394 6751-6869/com.example.android.bluetoothlegatt D/Surface: Surface::setBuffersDimensions(this=0x7f75a0d400,w=720,h=1280) 
12-26 17:40:46.400 6751-6869/com.example.android.bluetoothlegatt W/MALI: glDrawArrays:714: [MALI] glDrawArrays takes more than 5ms here. Total elapse time(us): 5591 
12-26 17:40:51.840 6751-6751/com.example.android.bluetoothlegatt D/BluetoothLeService: Trying to use an existing mBluetoothGatt for connection. 
12-26 17:40:51.840 6751-6751/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.844 6751-6751/com.example.android.bluetoothlegatt D/ActivityThread: ACT-AM_ON_RESUME_CALLED ActivityRecord{38f72c65 [email protected] {com.example.android.bluetoothlegatt/com.example.android.bluetoothlegatt.DeviceControlActivity}} 
12-26 17:40:51.844 6751-6751/com.example.android.bluetoothlegatt D/DeviceControlActivity: Connect request result=true 
12-26 17:40:51.845 6751-6751/com.example.android.bluetoothlegatt D/FeatureProxyBase: FeatureProxyBase class constructor 
12-26 17:40:51.845 6751-6751/com.example.android.bluetoothlegatt D/FeatureProxyBase: getService(), serviceName = multiwindow_service_v1 
12-26 17:40:51.845 6751-6826/com.example.android.bluetoothlegatt D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=1 device=BB:A0:50:00:00:10 
12-26 17:40:51.845 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.858 6751-6751/com.example.android.bluetoothlegatt D/ActivityThread: ACT-RESUME_ACTIVITY handled : 1/[email protected] 
12-26 17:40:51.860 6751-6826/com.example.android.bluetoothlegatt I/BluetoothLeService: Connected to GATT server. 
12-26 17:40:51.860 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.860 6751-6826/com.example.android.bluetoothlegatt D/BluetoothGatt: discoverServices() - device: BB:A0:50:00:00:10 
12-26 17:40:51.860 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.862 6751-6826/com.example.android.bluetoothlegatt I/BluetoothLeService: Attempting to start service discovery:true 
12-26 17:40:51.864 6751-6769/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetService() - Device=BB:A0:50:00:00:10 UUID=00001800-0000-1000-8000-00805f9b34fb 
12-26 17:40:51.864 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.873 6751-6826/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetService() - Device=BB:A0:50:00:00:10 UUID=00001801-0000-1000-8000-00805f9b34fb 
12-26 17:40:51.873 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.873 6751-6826/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetService() - Device=BB:A0:50:00:00:10 UUID=00002b00-0000-1000-8000-00805f9b34fb 
12-26 17:40:51.873 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.889 6751-6826/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetCharacteristic() - Device=BB:A0:50:00:00:10 UUID=00002a00-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0 charProps=2 
12-26 17:40:51.889 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.889 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.904 6751-6769/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetCharacteristic() - Device=BB:A0:50:00:00:10 UUID=00002a01-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0 charProps=2 
12-26 17:40:51.904 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.904 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.912 6751-6826/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetCharacteristic() - Device=BB:A0:50:00:00:10 UUID=00002a04-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0 charProps=2 
12-26 17:40:51.912 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.912 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.952 6751-6771/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetCharacteristic() - Device=BB:A0:50:00:00:10 UUID=00002a05-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0 charProps=34 
12-26 17:40:51.952 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.952 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.952 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.969 6751-6769/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetCharacteristic() - Device=BB:A0:50:00:00:10 UUID=00002b10-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0 charProps=20 
12-26 17:40:51.969 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.969 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.969 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.969 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.978 6751-6826/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetCharacteristic() - Device=BB:A0:50:00:00:10 UUID=00002b11-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0 charProps=6 
12-26 17:40:51.978 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.978 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.978 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.978 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.980 6751-6771/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetCharacteristic() - Device=BB:A0:50:00:00:10 UUID=00002b12-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0 charProps=4 
12-26 17:40:51.980 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.980 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.980 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.980 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.985 6751-6769/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetCharacteristic() - Device=BB:A0:50:00:00:10 UUID=00002b13-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0 charProps=24 
12-26 17:40:51.985 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.985 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.985 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:51.985 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.042 6751-6826/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetDescriptor() - Device=BB:A0:50:00:00:10 UUID=00002902-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0descrInstId=0 
12-26 17:40:52.042 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.042 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.042 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.054 6751-6771/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetDescriptor() - Device=BB:A0:50:00:00:10 UUID=00002902-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0descrInstId=0 
12-26 17:40:52.054 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.054 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.054 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.054 6751-6771/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.088 6751-6769/com.example.android.bluetoothlegatt D/BluetoothGatt: onGetDescriptor() - Device=BB:A0:50:00:00:10 UUID=00002902-0000-1000-8000-00805f9b34fb srvcType=0 srvcInstId=0 charInstId=0descrInstId=0 
12-26 17:40:52.088 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.088 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.088 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.088 6751-6769/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.100 6751-6826/com.example.android.bluetoothlegatt D/BluetoothGatt: onSearchComplete() = Device=BB:A0:50:00:00:10 Status=0 
12-26 17:40:52.100 6751-6826/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:40:52.807 6751-6869/com.example.android.bluetoothlegatt D/Surface: Surface::setBuffersDimensions(this=0x7f75a0d400,w=720,h=1280) 
12-26 17:41:00.457 6751-6751/com.example.android.bluetoothlegatt D/FeatureProxyBase: FeatureProxyBase class constructor 
12-26 17:41:00.458 6751-6751/com.example.android.bluetoothlegatt D/FeatureProxyBase: getService(), serviceName = multiwindow_service_v1 
12-26 17:41:00.472 6751-6869/com.example.android.bluetoothlegatt D/Surface: Surface::setBuffersDimensions(this=0x7f75a0d400,w=720,h=1280) 
12-26 17:41:00.548 6751-6751/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:41:00.548 6751-6751/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:41:00.548 6751-6751/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:41:00.548 6751-6751/com.example.android.bluetoothlegatt W/BluetoothLeService: Custom BLE Service not found on write 
12-26 17:41:00.554 6751-6869/com.example.android.bluetoothlegatt D/Surface: Surface::setBuffersDimensions(this=0x7f75a0d400,w=720,h=1280) 
12-26 17:41:01.385 6751-6751/com.example.android.bluetoothlegatt D/FeatureProxyBase: FeatureProxyBase class constructor 
12-26 17:41:01.385 6751-6751/com.example.android.bluetoothlegatt D/FeatureProxyBase: getService(), serviceName = multiwindow_service_v1 
12-26 17:41:01.405 6751-6869/com.example.android.bluetoothlegatt D/Surface: Surface::setBuffersDimensions(this=0x7f75a0d400,w=720,h=1280) 
12-26 17:41:01.511 6751-6751/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:41:01.511 6751-6751/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:41:01.511 6751-6751/com.example.android.bluetoothlegatt D/BluetoothDevice: mAddress: BB:A0:50:00:00:10 
12-26 17:41:01.512 6751-6751/com.example.android.bluetoothlegatt W/BluetoothLeService: Custom BLE Service not found on read 
12-26 17:41:01.528 6751-6869/com.example.android.bluetoothlegatt D/Surface: Surface::setBuffersDimensions(this=0x7f75a0d400,w=720,h=1280) 
+0

我沒有看到onServicesDiscovered的任何回調。您應該在onConnectionStateChange的回調函數中調用gatt.discoverServices()以獲取所有服務。 –

+0

@TomerPetel感謝您的重播,不是嗎? '私人最終BluetoothGattCallback mGattCallback =新BluetoothGattCallback(){ @Override 公共無效onConnectionStateChange(BluetoothGatt關貿總協定,INT狀態,INT newState){ 字符串intentAction; if(newState == BluetoothProfile.STATE_CONNECTED){intellAction = ACTION_GATT_CONNECTED; mConnectionState = STATE_CONNECTED; broadcastUpdate(intentAction);' – Voly

+0

不知道_broadcastUpdate(intentAction)_在做什麼,但它沒有發現服務。嘗試在_broadcastUpdate(intentAction)_之後調用_mBluetoothGatt.discoverServices()_並查看是否能夠發現服務。 –

回答

1

我沒有意識到有不同的UUID對服務和胡萍,後仔細一看,我發現我只用特性的UUID(讀寫)。 將服務的UUID從2b10/2b11更改爲2b00解決了此問題。

+0

我正在使用與您相同的教程,並且具有相同的問題。如何解決它?我正在使用RangeFinder作爲我從中獲取信息的設備。 –

+1

就像我在回答中寫的那樣,服務有一個UUID,每個字符(即讀和寫)都有不同的字符,總共有3個不同的數字。 您需要獲取服務UUID,並將其設置爲服務,併爲服務中的每個特徵設置它自己的UUID。 Basicly: 寫服務 - 2b00,寫charctristic(或讀不記得) - 2B10 // 閱讀服務 - 2b00,讀charctristic(或寫) - 2B11 – Voly

+0

你看,我有這樣的事情: 定製服務UUID = 0000ffe0-0000-1000-8000-00805f9b34fb(主服務) CUSTOM特性UUID = 0000ffe1-0000-1000-8000-00805f9b34fb(讀,寫和通知) 客戶charactersitic配置UUID = 0x2902 特性用戶描述UUID = 0x2901 那該怎麼辦?請幫忙。 –