Android bluetooth ACTION_DISCOVERY_FINISHED не работает

#android #bluetooth

#Android #bluetooth

Вопрос:

Я написал свое первое приложение для Android, и все работает очень хорошо, except…in приведенная ниже процедура ACTION_DISCOVERY_FINISHED, похоже, никогда не вызывается (или транслируется, или принимается, или что-то еще). Независимо от того, какой блок кода в этом «еще, если» не работает.

Я тестировал только на своем Motorola Atrix, поэтому мне интересно, проблема ли это. Поскольку я тестирую функциональность Bluetooth, я не думаю, что смогу использовать эмулятор Android для эффективного тестирования.

Мысли?

 private BluetoothAdapter mBtAdapter;
mBtAdapter.startDiscovery();

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        // When discovery finds a device
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
        //do something
        }

        else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
            //do something else
        }
    }
}
  

Ответ №1:

2 возможных решения:

  1. Вместо создания анонимного приемника, подкласс BroadcastReceiver с точно такой же реализацией, затем объявите его в манифесте вашего проекта (не забудьте объявить, что ваш приемник получает эти действия, которые вы хотите).

  2. Динамически регистрируйте его из своей активности / службы таким образом:

     IntentFilter filter = new IntentFilter();
    filter.addAction(BluetoothDevice.ACTION_FOUND);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    this.registerReceiver(mReceiver, filter);
      

Я не уверен, нужно ли вам отменять регистрацию при регистрации в activity / service (я знаю, что вы должны это делать при регистрации из контекста приложения), поэтому проверьте это.

Комментарии:

1. Я попробовал # 1. Это не улучшило ситуацию. У меня такое чувство, что «что-то происходит», как будто это действие не происходит на моем телефоне. Тем не менее, дикое предположение.

2. Проверьте уровень API для этих действий, я уверен, что его 3, что означает android 1.5, который у вас наверняка есть. Попробуйте номер 2.

3. Добавил это, чтобы завершить его iFilterBluetooth.addAction(BluetoothAdapter. ACTION_DISCOVERY_STARTED);

Ответ №2:

Вам нужно добавить строку

 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  

в ваш манифест