我正在开发一个 团结 游戏 安卓系统,它使用的是 安卓插件 能够通过以下方式发送数据 蓝牙 在游戏中。发送数据和建立与配对设备的连接工作正常。然而,我无法获得 新蓝牙设备的发现 的工作。
在我 插件类 (它也处理发送数据等,工作正常)。
public void startBluetoothDeviceDiscovery(){
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
currentActivity.registerReceiver(receiver, filter);
if (bluetoothAdapter.isDiscovering()){
bluetoothAdapter.cancelDiscovery();
}
bluetoothAdapter.startDiscovery();
}
startBluetoothDeviceDiscovery方法肯定会被调用(由按钮触发),而且bluetoothAdapter已经被设置,不是空的。设备上的蓝牙一直处于ON状态。
同时在 插件类:
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.comguidetopicsconnectivitybluetooth#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()
被调用,因为它总是启动蓝牙发现,但它仍然没有工作。
我最后的猜测是,由于Plugin不是一个活动,BroadcastReceiver无法被访问。所以我把动作改为 BluetoothAdapter.ACTION_STATE_CHANGED
然后当我打开设备上的蓝牙ON和OFF时,突然收到了在? onReceive()
.
我的Manifest(复制到正确的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()
并在接收机中找到没有接收到的设备?
谢谢 任何 帮助或想法 :)
你有没有试过Unity资产商店中的蓝牙插件?我正在做同样的事情,但使用蓝牙经典(HC-06),我正在使用资产商店的插件。我的应用程序将只使用该BT模块,所以在C#脚本在Unity中我写。
device = new BluetoothDevice();
device.Name = "HC-05";
//device.MacAddress = "XX:XX:XX:XX:XX:XX";
device.send (System.Text.Encoding.ASCII.GetBytes ("Hello\n"));
}
}
public void connect() {
statusText.text = "Status : ...";
device.connect();
}
public void disconnect() {
device.close();
}
public void sendHello() {
if (device != null) {
void Update() {
if (device.IsReading) {
byte [] msg = device.read ();
if (msg != null ) {
string content = System.Text.ASCIIEncoding.ASCII.GetString (msg);
statusText.text = "MSG : " + content;
}
}
}
}