我正在尝试通过单击按钮获取连接的蓝牙设备的当前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(),则可以按需执行此操作。这将触发它发现的每个设备的操作。