2014-03-03 61 views
1

我遇到藍牙LE Cadence和速度傳感器(Wahoo SC)的問題。我正在使用Android BluetoothGattLe示例應用程序,該應用程序適用於Cadence和速度傳感器。Bluetooth LE Cadence和速度傳感器未在Android上發送通知

它適用於心率監測器。相關代碼如下。心臟監測器每秒鐘都會隨着心率的變化而發生性行爲改變。但是,當我連接Cadence和Speed傳感器時,沒有任何反應。這個回調似乎沒有被觸發 - 雖然我知道onConnectionStateChange在連接時被觸發。

有什麼想法?

/** 
* 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); 
    public final static UUID UUID_CSC_MEASUREMENT = 
      UUID.fromString(SampleGattAttributes.CSC_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); 
     } 
    }; 

回答

1

沒有設置通知或指示爲true,如果是,則檢查是否setCharacteristicNotification()的返回值。並檢查您是否有權讀取特徵。也請打印onDescripterWrite回調方法的狀態值。

for notification 
http://developer.android.com/guide/topics/connectivity/bluetooth-le.html#notification 

descriptor call back method javadoc 

http://developer.android.com/reference/android/bluetooth/BluetoothGattCallback.html#onDescriptorWrite%28android.bluetooth.BluetoothGatt,%20android.bluetooth.BluetoothGattDescriptor,%20int%29