#android #bluetooth #android-bluetooth
#Android #bluetooth #android-bluetooth
Вопрос:
Я почти уверен, что по крайней мере два устройства отключены от Bluetooth, но мое приложение просто показывает мне сопряженное. Я уже дал разрешение Bluetooth, и я не понимаю, в чем проблема. Вы можете ее найти?
//Scan Function
void startScan(){
adapter.clear(); //List View cleared
deviceList = btAdapter.getBondedDevices(); //Paired Device
for (BluetoothDevice bd : deviceList) //Adding Paired Device
adapter.add(bd.getName() "n" bd.getAddress() "t (Paired)");
//Init of Broadcast Receiver
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(action)){ //Device Found
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); //Extractind Device Info
adapter.add(device.getName() "t" device.getAddress()); //Adding Device to List View
}
}
};
//Broadcast Receiver Registration
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(receiver,filter);
btAdapter.startDiscovery(); //Scan start
}
Комментарии:
1. и с чего вы начинаете обнаружение устройств Bluetooth? использование
btAdapter.startDiscovery();
?2. да, это должно работать таким образом
3. Используете ли вы marshmallow? Для запуска обнаружения устройств требуются разрешения на определение местоположения и включенные службы определения местоположения.
Ответ №1:
Если я не ошибаюсь, вы получаете только подключенное устройство. Ваш код должен быть примерно таким, как показано ниже.
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
void startScan(){
adapter.clear(); //List View cleared
deviceList = btAdapter.getBondedDevices(); //Paired Device
for (BluetoothDevice bd : deviceList) //Adding Paired Device
adapter.add(bd.getName() "n" bd.getAddress() "t (Paired)");
//Broadcast Receiver Registration
Проверьте, включен ли Bluetooth
(!btAdapter.isEnabled()) {
Intent BtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(BtIntent, 0);
Toast.makeText(BluetoothScannerActivity.this, "Turning on Bluetooth", Toast.LENGTH_LONG).show();
}
else{
registerReceiver(receiver,filter);
btAdapter.startDiscovery(); //Scan start
}
}
Ваша трансляция должна быть нерабочей, ее лучше разделить
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(action)){ //Device Found
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); //Extractind Device Info
adapter.add(device.getName() "t" device.getAddress()); //Adding Device to List View
}
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == BtIntent amp;amp; resultCode == RESULT_OK) {
registerReceiver(receiver,filter);
btAdapter.startDiscovery();
}
}
Комментарии:
1. моя функция является внешней по отношению к потоку программы, я готов выполнить проверку состояния Bluetooth (и она работает, поэтому я уверен, что включена). Однако, что должно измениться по сравнению с моей и вашей реализацией? Кажется, они делают то же самое, так в чем проблема у меня?