При изменении обнаруживаемости Bluetooth трансляции не отправляются

1

в настоящее время я пытаюсь настроить приложение, чтобы два устройства обменивались данными через Bluetooth.

У меня есть экран, показывающий одну Button. При нажатии этой кнопки устройство должно обнаруживать и отключать кнопку. Когда устройство перестает обнаруживаться, кнопка должна быть включена снова.

Как предложено в руководстве Dev, я регистрирую BroadcastReceiver для получения уведомления о завершении обнаружения.

Проблема:

Иногда я не получаю никакой трансляции, когда устройство больше не может быть обнаружено. С другой стороны, я обычно получаю 2 трансляции, отправленные при входе в открываемость. Обнаружение отлично работает, доказано LogCat и устройствами, которые видят мой телефон (HTC Desire HD) в течение 120 секунд.

Это запись из LogCat, показывающая 2 трансляции, которые принимаются сразу после начала обнаружения:

03-25 23:01:47.557: INFO/System.out(16905): --------broadcast received-------------
03-25 23:01:47.557: DEBUG/MuliplayerServerActivity(16905): current scan mode: 21
03-25 23:01:47.557: DEBUG/MuliplayerServerActivity(16905): previous scan mode: 23
03-25 23:01:47.557: INFO/System.out(16905): --------broadcast received-------------
03-25 23:01:47.557: DEBUG/MuliplayerServerActivity(16905): current scan mode: 23
03-25 23:01:47.557: DEBUG/MuliplayerServerActivity(16905): previous scan mode: 21

Мой код, начинающий обнаружение, следующий:

private void becomeVisible() {

    Intent discoverableIntent = new Intent(
            BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
    startActivityForResult(discoverableIntent,
            CODE_REQUEST_MAKE_DISCOVERABLE);

}

Мой BroadcastReceiver выглядит так:

private final BroadcastReceiver discoverableModeChangedReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        System.out.println("--------broadcast received-------------");
        int scanMode = intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE,
                0);
        int scanModePrevious = intent.getIntExtra(
                BluetoothAdapter.EXTRA_PREVIOUS_SCAN_MODE, 0);
        Log.d(TAG, "current scan mode: " + scanMode);
        Log.d(TAG, "previous scan mode: " + scanModePrevious);

        if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
            // show button
            findViewById(R.id.btn_become_visible).setEnabled(false);
        } else {
            // hide button
            findViewById(R.id.btn_become_visible).setEnabled(true);
        }
    }
};
Теги:
bluetooth

1 ответ

2

Сначала необходимо зарегистрировать действие:

IntentFilter intent = new IntentFilter();
intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
intent.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
intent.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED); 
registerReceiver(discoverableModeChangedReceiver, intent);
  • 0
    получатели зарегистрированы. Знаете ли вы, это может быть проблема только на моем телефоне (желание HD)?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню