2013-10-14 225 views
3

我无法弄清楚如何获得'onReadRemoteRssi'回调工作。Android蓝牙低功耗readRemoteRssi

我的代码是非常简单的:

final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); 
    BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter(); 
    BluetoothGatt gatt; 

    mBluetoothAdapter.startLeScan(new LeScanCallback() { 

     @Override 
     public void onLeScan(BluetoothDevice device, int rssi, byte[] record) { 
      gatt = device.connectGatt(getApplicationContext(), false, new BluetoothGattCallback() { 
       @Override 
       public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) { 
        super.onReadRemoteRssi(gatt, rssi, status); 
        Log.d(TAG, "rssi is : " + rssi); 
       } 
      }); 
     } 
    }); 

    gatt.readRemoteRssi(); //returns true 

回调永远不会被调用。 有没有人有任何想法?

谢谢!

+0

你解决这个问题? – phcaze

回答

0
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(deviceAddress); 
BluetoothGatt bluetoothGatt = getBluetoothGatt(device); 

if (bluetoothGatt == null) { 
    return false; 
} 
boolean rdRemoteRssi = bluetoothGatt.readRemoteRssi(); 
Log.d(FTAG, "BluetoothGatt readRemoteRssi : " + rdRemoteRssi); 
return true; 

它将调用

参考onReadRemoteRssi拨打电话back.Need此API之前进行连接。

+0

这是什么getBluetoothGatt()方法,哪个类有这个? – AAnkit

4

将readRemoteRssi()放入BluetoothGattCallback的回调函数onConnectionStateChange()中。

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; 
      boolean rssiStatus = mBluetoothGatt.readRemoteRssi(); 
      broadcastUpdate(intentAction); 
      // Attempts to discover services after successful connection. 
      Log.i(TAG, "Attempting to start service discovery:" + 
        mBluetoothGatt.discoverServices()); 
     } 
    } 
}; 

而且也把onReadRemoteRssi在BluetoothGattCallback功能

@Override 
public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status){ 
    if (status == BluetoothGatt.GATT_SUCCESS) { 
     Log.d(TAG, String.format("BluetoothGatt ReadRssi[%d]", rssi)); 
    } 
} 
+0

通过以上解决方案仍然没有获取onreadRemoteRssi回调来获取rssi值。请建议解决方案。 – Aman