【发布时间】:2021-09-10 12:30:54
【问题描述】:
我正在尝试发现蓝牙设备并将结果附加到 TableLayout。
基本上,我正在尝试启动发现并将 deviceName 和 rssi 打印到表格布局。
这是我的代码:
public class DatabaseActivity extends AppCompatActivity {
public BluetoothAdapter bluetoothAdapter;
private final BroadcastReceiver receiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String deviceName = device.getName();
String deviceHardwareAddress = device.getAddress();
int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
// Append to tableBLE
TableLayout tl = findViewById(R.id.tableBLE);
appendTableFront(tl, deviceName + "_" + rssi);
Log.d("PBK_Test - Detected", deviceName + "_" + rssi);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_database);
// Bluetooth
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter == null) {
// Device doesn't support Bluetooth
}
if (!bluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 0);
}
// Start Discovery
bluetoothAdapter.startDiscovery();
// Register for broadcasts when a device is discovered.
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(receiver, filter);
// Make discoverable
if (bluetoothAdapter.getScanMode() !=
BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
}
}
public void appendTableFront(TableLayout tl, String msg) {
TableRow newRow = new TableRow(this);
newRow.setBackgroundColor(Color.GRAY);
newRow.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
TextView label_id = new TextView(this);
label_id.setText(msg);
label_id.setTextColor(Color.WHITE);
label_id.setPadding(5, 5, 5, 5);
newRow.addView(label_id);
tl.addView(newRow);
}
}
我可以被发现,但无法检测到其他设备。
我尝试了内置的蓝牙发现,它工作正常。
编辑:
我在onReceive 中添加了Log.d("PBK_Test - Detected", deviceName + "_" + rssi);,但它也没有显示出来。
【问题讨论】:
-
为什么不尝试使用交错布局管理器的 recyclerview。获取蓝牙设备将此设备添加到列表并将该列表传递给 recylerview 适配器。下面是链接,例如github.com/thoughtbot/expandable-recycler-view
-
@Raza 谢谢你的建议。我知道这里的 UI 会有更好的方法,但是
appendTable和tableLayout在本课程的其他部分工作得很好。我也试过appendTable(findViewById(R.id.tableBLE), "DebugDevice" + "_" + "DebugRSSI");,它按预期工作。您的意思是在onReceive中使用带有表格布局的appendTable是结果未显示的原因吗?
标签: android bluetooth android-bluetooth