Unity实现Android源生平台蓝牙BLE4.0数据传输(二)

2023-12-19 11:59

本文主要是介绍Unity实现Android源生平台蓝牙BLE4.0数据传输(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

xc

在上篇文章中我们解释了AndroidJavaClass、AndroidJavaObject、AndroidJavaProxy三个类的作用以及使用.

这篇我们来利用这些知识来实现蓝牙设备的打开系统功能,扫描,以及连接.

首先想要Android平台使用蓝牙的功能那么权限是不能少的

我们把AndroidManifest.xml文件放在Unity工程的Plugins->Android 文件夹下

AndroidManifest文件中加入如下代码

  <uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

保存之后就可以开始了

首先判断系统的蓝牙是否打开

  var bluetooth = new AndroidJavaClass("android.bluetooth.BluetoothAdapter");//获得Android BluetoothAdapter类bluetoothAdapter = bluetooth.CallStatic<AndroidJavaObject>("getDefaultAdapter");//获取本地蓝牙设备也就是手机的蓝牙

//判断系统蓝牙是否打开  
if (!bluetoothAdapter.Call<bool>("isEnabled"))
{var isOpen = bluetoothAdapter.Call<bool>("enable");  //打开蓝牙,需要BLUETOOTH_ADMIN权限  
}

执行之后手机上面会出现android源生的蓝牙打开请求界面 我们选择"是"打开

打开设备后就开始扫描蓝牙设备了

 var mBluetoothLeScanner = bluetoothAdapter.Call<AndroidJavaObject>("getBluetoothLeScanner");ScanCallback scanCallback = new ScanCallback();//unity继承的扫描对象接口实现类AndroidJavaObject wfzScanCallback = new AndroidJavaObject("com.wfz.bletounity.WFZScanCallback");//蓝牙扫描回调对象//扫描结果的事件委托实现scanCallback.onScanResultDelegate = (t, r) =>{if (r == null){return;}var bluetoothDevice = r.Call<AndroidJavaObject>("getDevice");//从结果中获取到设备对象var deviceName = bluetoothDevice.Call<string>("getName");//获取设备的名字var deviceAddress = bluetoothDevice.Call<string>("getAddress");//获取设备的MAC地址Debug.Log("扫描到设备:" + deviceName + "地址:" + deviceAddress);if (deviceName =="CAD")//判断是否想要的连接的设备名字{if (buetoothGatt == null){ConnectGatt(bluetoothDevice);//连接想要的设备mBluetoothLeScanner.Call("stopScan", wfzScanCallback);//停止扫描}}};wfzScanCallback.Call("AddUnityCallback", scanCallback);//添加unity对android蓝牙的监听事件mBluetoothLeScanner.Call("startScan", wfzScanCallback);//开始扫描

SacnCallBack实现

java

package com.ridk.unityextension;import android.bluetooth.le.ScanResult;import java.util.List;/*** Created by Ridk on 2018/1/25.*/public interface IScanCallback {public abstract void	onBatchScanResults(List<ScanResult> results);public abstract void	onScanFailed(int errorCode);public abstract void	onScanResult(int callbackType, ScanResult result);
}

c#

public class ScanCallback : AndroidJavaProxy{public delegate void OnBatchScanResultsDelegate(AndroidJavaObject results);public OnBatchScanResultsDelegate onBatchScanResultsDelegate;public delegate void OnScanFailedDelegate(int errorCode);public OnScanFailedDelegate onScanFailedDelegate;public delegate void OnScanResultDelegate(int callbackType, AndroidJavaObject result);public OnScanResultDelegate onScanResultDelegate;public ScanCallback() : base("com.ridk.unityextension.IScanCallback"){}public void onBatchScanResults(AndroidJavaObject results){if (onBatchScanResultsDelegate != null){onBatchScanResultsDelegate(results);}}public void onScanFailed(int errorCode){if (onScanFailedDelegate != null){onScanFailedDelegate(errorCode);}}public void onScanResult(int callbackType, AndroidJavaObject result){if (onScanResultDelegate != null){onScanResultDelegate(callbackType, result);}}}
}

这样我们就连接到我们想要的设备了 下一篇我们来说说数据的获取.

有问题的朋友可以关注我的微信订阅号给我留言

Unity实现Android源生平台蓝牙BLE4.0数据传输(一)

Unity实现Android源生平台蓝牙BLE4.0数据传输(三)

这篇关于Unity实现Android源生平台蓝牙BLE4.0数据传输(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512082

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount