如何在Unity Android插件中发现蓝牙设备?

问题描述 投票:0回答:1

我正在开发一个 团结 游戏 安卓系统,它使用的是 安卓插件 能够通过以下方式发送数据 蓝牙 在游戏中。发送数据和建立与配对设备的连接工作正常。然而,我无法获得 新蓝牙设备的发现 的工作。

在我 插件类 (它也处理发送数据等,工作正常)。

 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() 并在接收机中找到没有接收到的设备?

谢谢 任何 帮助或想法 :)

android unity3d bluetooth discovery android-unity-plugin
1个回答
0
投票

你有没有试过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;

            } 
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.