Простое руководство по использованию Bluetooth - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть приложение, которое требует использования Bluetooth для отправки данных, таких как 4-5 цифр и 2-3 текста, между устройствами, но я новичок в java, и мне сложно понять руководство со страницы разработчиков Google.

Чтобы всем, кто хочет помочь мне, было легче, я буду поэтапно записывать, что я сделал до сих пор.

1 . Я попросил разрешения в манифесте:

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

2 . Я получил адаптер по умолчанию в моей деятельности:

 final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

3 . Я создал кнопку, которая при нажатии сканирует устройство на другие устройства:

bt_scan.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //first checks if bluettoth is enabled
            if (!mBluetoothAdapter.isEnabled()) {
                //if not it enables it 
                Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
            }
             // Register for broadcasts when a device is discovered.
            IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
            registerReceiver(mReceiver, filter);
        }
    });

4 . Когда устройство найдено, получите информацию об устройстве:

// Create a BroadcastReceiver for ACTION_FOUND.
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Discovery has found a device. Get the BluetoothDevice
            // object and its info from the Intent.
            BluetoothDevice device = 
 intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            String deviceName = device.getName();
            String deviceHardwareAddress = device.getAddress(); // MAC address
        }
    }
};

5 . При уничтожении отмените регистрацию получателя ACTION_FOUND:

@Override
protected void onDestroy() {
    super.onDestroy();
    // Don't forget to unregister the *ACTION_FOUND* receiver.
    unregisterReceiver(mReceiver);
}

6 . Я создал вторую кнопку, которая при нажатии активирует обнаружение (которую нужно сначала нажать на устройстве A , чтобы кнопка scan на устройстве B , обнаружила устройство A ):

bt_enable.setOnClickListener(new View.OnClickListener() {
     @Override
      public void onClick(View v) {
        Intent discoverableIntent = new 
        Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);      
        discoverableIntent.putExtra( BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300);
        startActivity(discoverableIntent);

        }
});

Вопросы:

A. На шаге 3 для чего REQUEST_ENABLE_BT для?

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

C. Если я хочу подключить более двух устройств, могу ли я добавить еще что-нибудь?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Я хотел бы ответить Вопрос A

A. На шаге 3 для чего нужен REQUEST_ENABLE_BT?

private static final int REQUEST_ENABLE_BT = 1;

REQUEST_ENABLE_BT - это просто целочисленное значение, которое идентифицирует ваш запрос. Когда вы получаете результат Intent, обратный вызов onActivityResult(int requestCode, int resultCode, Intent data) предоставляет вам тот же код запроса. Таким образом, вы можете обрабатывать результаты других активностей

Предположим, у вас есть Задание A , откуда вы запросили включение Bluetooth

Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

Когда включается Bluetooth устройства, метод onActivityResult(int requestCode, int resultCode, Intent data) будет вызываться для Activity A . Этот метод onActivityResult() является методом обратного вызова. Этот метод передаст код запроса в вызывающую активность ( Activity A ), как только Bluetooth включится. Вы должны переопределить этот метод в Задании A для обработки результатов.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode == REQUEST_ENABLE_BT)
        Log.d("BLUETOOTH", "Successfully enabled");

}
0 голосов
/ 02 мая 2018

Q. Для чего REQUEST_ENABLE_BT?

Позвольте мне попытаться прокомментировать код

// If bluetooth is not switched on
if ( ! mBluetoothAdapter.isEnabled() ) {
    // Create a system request to enable bluetooth
    Intent enableBtIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE );
    // Queue the request to pops the bluetooth dialogue
    startActivityForResult( enableBtIntent, REQUEST_ENABLE_BT );
}
// Standby for device found, Bluetooth may still be disabled at this point
IntentFilter filter = new IntentFilter( BluetoothDevice.ACTION_FOUND );
registerReceiver( mReceiver, filter );
// Now that we are done, bluetooth dialogue will popup
// When it's done Android calls our onActivityResult
// (because we queued it with startActivityForResult).

Q. Это все, что мне нужно для установления соединения?

Я думаю, вам нужно сделать еще два шага:

A. Найдите устройство между шагами 3 и 4.

Простое включение Bluetooth не означает, что оно автоматически сканирует близлежащие устройства, поскольку сканирование обходится дороже и ухудшает существующие соединения. Но с разрешением BLUETOOTH_ADMIN ваше приложение может запускать и останавливать сканирование. Вы также можете получить ранее сопряженное устройство без сканирования.

  • Начать сканирование: BluetoothAdapter.startDiscovery ()
    Это вызовет ACTION_FOUND для каждого найденного устройства, которое соответствует вашему коду.
  • Список сопряженных устройств: BluetoothAdapter.getBondedDevices ()
    Ранее подключенные Bluetooth-устройства можно найти в этом Set без сканирования или BLUETOOTH_ADMIN и могут быть подключены напрямую.
    Пока неизвестно, действительно ли устройство подключено к сети, пока оно не будет успешным или неисправным.

B. Установите соединение для передачи данных между 4 и 5.

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

Похоже, вы хотите создать приложение для обмена сообщениями M2M, поэтому я пропустил Bluetooth Low Energy (BLE).


Q. Если я хочу подключить более двух устройств, это все?

Что касается части «множественное соединение», нет, вам не нужно делать ничего особенного, чтобы подключаться к нескольким устройствам одновременно.

«Управление», пожалуй, самая сложная часть. Например, вы обычно хотите сохранить список устройств и иметь пользовательский интерфейс, позволяющий пользователю выборочно отключать устройство, которое должно реагировать на неожиданные отключения или отключение Bluetooth (пользователем, другим приложением или система, такая как режим низкого энергопотребления).

Зависит от того, что вы на самом деле хотите делать с устройствами Bluetooth, вам может понадобиться код, чтобы запомнить также состояние каждого из них. Снова с обработкой ошибок.

Итак, ожидайте, что окончательный код будет немного более развитым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...