Проблема в обнаружении Bluetooth Android

#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 (и она работает, поэтому я уверен, что включена). Однако, что должно измениться по сравнению с моей и вашей реализацией? Кажется, они делают то же самое, так в чем проблема у меня?