我正在尝试通过单击按钮获取连接的蓝牙设备的当前rssi值。但是它只返回-32768始终!不知道怎么了!然而,我能得到正确的rssi,第一次连接。

private Button.OnClickListener buttonRSSIOnClickListener = new Button.OnClickListener(){
  @Override
  public void onClick(View arg0) {
   // TODO Auto-generated method stub
   Intent intent = new Intent(BluetoothDevice.ACTION_FOUND);
   short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
   Toast.makeText(getApplicationContext(),"  RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show();

  }};

有人能帮我吗?

最佳答案

这不是你使用意图的方式。您得到的是-32768,因为rssi不是您刚才创建的意图,并且您指定的默认结果是short.min_value(-32768)。
您需要将BroadcastReceiver子类化,并创建一个intentFilter(或使用清单),以便接收BluetoothDevice.action找到intent。
你将无法做到这一点“在一个按钮的点击,”你将只能得到它时,Android生成的行动发现。
这里有点接近。我自己也没做过。
在oncreate()中:

registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));

其他地方:
private final BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        if(BluetoothDevice.ACTION_FOUND.equals(action)) {
            short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
            Toast.makeText(getApplicationContext(),"  RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show();
        }
    }
};

编辑:实际上,如果从onclick()中调用BluetoothAdapter上的startDiscovery(),则可以按需执行此操作。这将触发它发现的每个设备的操作。

10-07 22:27