Я разрабатываю 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 вызывается наверняка (вызывается кнопкой), а адаптер Bluetooth уже установлен и не равен нулю. 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/topics/connectivity/bluetooth#DiscoverDevices
Я подумал, может быть, устройств просто нет, поэтому я хотел, чтобы приемник уже включался , когда обнаружение начинается , поэтому я попытался ищите 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">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true"/>
<application
android:theme="@style/UnityThemeSelector"
android:icon="@mipmap/app_icon"
android:label="@string/app_name">
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
Так почему же я включаю bluetoothAdapter.startDiscovery()
и нахожу устройства не полученными в приемнике?
Спасибо за помощь ANY или идеи:)