我正在为Android开发Unity游戏,它使用Android 插件能够在游戏期间通过蓝牙发送数据。发送数据并建立与配对设备的连接工作正常。但是,我无法发现新的蓝牙设备。
在我的Plugin 类中(它还处理发送数据等,效果很好):
public void startBluetoothDeviceDiscovery(){
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
currentActivity.registerReceiver(receiver, filter);
if (bluetoothAdapter.isDiscovering()){
bluetoothAdapter.cancelDiscovery();
}
bluetoothAdapter.startDiscovery();
}
startBluetoothDeviceDiscovery 方法肯定被调用(由按钮触发),并且 bluetoothAdapter 已设置且不为空。设备上的蓝牙始终处于开启状态。
同样在Plugin 类中:
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()
都应该调用它,因为它总是启动蓝牙发现,但它仍然不起作用。
我最后的猜测是,由于插件不是一个活动,广播接收器无法访问。所以我将操作更改为BluetoothAdapter.ACTION_STATE_CHANGED
,然后当我打开和关闭设备上的蓝牙时,它突然在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()
并发现接收器中没有接收到设备?
感谢您的任何帮助或想法:)