Как обнаружить устройства Bluetooth в плагине Unity для Android?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как обнаружить устройства Bluetooth в плагине Unity для Android?

Сообщение Anonymous »

Я разрабатываю игру Unity для Android, в которой используется плагин Android, позволяющий отправлять данные через Bluetooth во время игры. Отправка данных и установление соединения с сопряженным устройством работают нормально.
Однако я не могу заставить работать обнаружение новых устройств Bluetooth.

В моем классе плагина (который также обрабатывает отправку данных и т. д., что работает нормально):

Код: Выделить всё

 public void startBluetoothDeviceDiscovery(){

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
currentActivity.registerReceiver(receiver, filter);

if (bluetoothAdapter.isDiscovering()){
bluetoothAdapter.cancelDiscovery();
}
bluetoothAdapter.startDiscovery();

}
Метод startBluetoothDeviceDiscovery вызывается обязательно (срабатывает по кнопке), а bluetoothAdapter уже установлен и не равен нулю. Bluetooth на устройстве всегда был включен.

Также внутри класса плагинов:

Код: Выделить всё

 BroadcastReceiver receiver = new MyBroadcastReceiver();

public class MyBroadcastReceiver extends BroadcastReceiver {

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

String action = intent.getAction();

if (BluetoothDevice.ACTION_FOUND.equals(action)) {

// a device was found, do stuff

}
}
}
В принципе, то, что предлагает документация Android, при обнаружении новых устройств.
https://developer.android.com/guide/top ... verDevices

Я подумал, может быть, вокруг просто нет устройств, поэтому я хотел, чтобы приемник уже срабатывал при запуске обнаружения, поэтому я попытался поискать BluetoothAdapter.ACTION_DISCOVERY_STARTED:

Код: Выделить всё

 IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
currentActivity.registerReceiver(receiver, filter);

И в моем Получателе onReceive:

Код: Выделить всё

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

String action = intent.getAction();

if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {

// discovery started, do stuff

}

}
Этот метод следует вызывать каждый раз, когда нажимается кнопка и вызывается метод startBluetoothDeviceDiscovery(), поскольку он всегда запускает обнаружение Bluetooth, но оно все равно не работает.

Моим последним предположением было то, что из-за того, что плагин не является активностью, доступ к BroadcastReceiver невозможен. Поэтому я изменил действие на BluetoothAdapter.ACTION_STATE_CHANGED, а затем, когда я включал и выключал Bluetooth на своем устройстве, оно внезапно было получено в onReceive().

Мой манифест (скопирован в правильное расположение папки Unity):

Код: Выделить всё

    xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="preferExternal">

















Так почему же я включаю bluetoothAdapter.startDiscovery() и обнаруживаю устройства, не полученные в приемнике?

Спасибо за ЛЮБУЮ помощь или идеи :)

Подробнее здесь: https://stackoverflow.com/questions/610 ... oid-plugin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»