发现蓝牙设备并附加到 TableLayout
Discover bluetooth device and append to TableLayout
我正在尝试发现蓝牙设备并将结果附加到 TableLayout。
基本上,我正在尝试开始发现并将 deviceName 和 rssi 打印到 table 布局。
这是我的代码:
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);
}
}
我可以被发现,但检测不到其他设备。
我尝试了内置的蓝牙发现,它工作正常。
编辑:
我将 Log.d("PBK_Test - Detected", deviceName + "_" + rssi);
添加到 onReceive
,但它也没有显示。
newRow
可能是 null
,因为没有 final
关键字并且您更改了范围。
删除这条指令:runOnUiThread()
...因为它不在后台运行。
我自己想出来了。
问题不在代码中--
您必须进入设置 -> 应用程序 -> -> 权限,以手动授予您的应用程序权限,即使您已在 MANIFEST 中声明它们。
我正在尝试发现蓝牙设备并将结果附加到 TableLayout。
基本上,我正在尝试开始发现并将 deviceName 和 rssi 打印到 table 布局。
这是我的代码:
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);
}
}
我可以被发现,但检测不到其他设备。
我尝试了内置的蓝牙发现,它工作正常。
编辑:
我将 Log.d("PBK_Test - Detected", deviceName + "_" + rssi);
添加到 onReceive
,但它也没有显示。
newRow
可能是 null
,因为没有 final
关键字并且您更改了范围。
删除这条指令:runOnUiThread()
...因为它不在后台运行。
我自己想出来了。
问题不在代码中--
您必须进入设置 -> 应用程序 ->