.NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件

news2024/11/25 22:33:13

本文简述如何在Smobiler中使用Bluetooth。

Step 1. 新建一个SmobilerForm窗体,并在窗体中加入Button和Bluetooth,布局如下

在这里插入图片描述

Button的点击事件代码:

       /// <summary>
        /// 关闭蓝牙
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Press(object sender, EventArgs e)
        {
            bluetooth1.Close((abj, args) =>
            {
                if (args.isError == true)
                    Toast(args.error);
                else
                    Toast("success");
            });
        }
        /// <summary>
        /// 打开蓝牙
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Press(object sender, EventArgs e)
        {
            bluetooth1.Open((abj, args) =>
            {
                if (args.isError == true)
                    Toast(args.error);
                else
                    Toast("success");
            });

        }
        string macAdress = "";
         /// <summary>
         /// 搜索蓝牙设备
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
        private void button3_Press(object sender, EventArgs e)
        {
            bluetooth1.Search((abj, args) =>
            {
                if (args.isError == true)
                    Toast(args.error);
                else
                {
                    Toast("success" + args.Name + "  " + args.MacAddress);
                    macAdress = args.MacAddress;
                }
            });

        }
        /// <summary>
        /// 连接蓝牙
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Press(object sender, EventArgs e)
        {
            //第一个参数为蓝牙设备MAC地址
            bluetooth1.Connect(macAdress, (abj, args) =>
            {
                if (args.isError == true)
                    Toast(args.error);
                else
                    Toast("success");
            });
        }
        /// <summary>
        /// 关闭蓝牙
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Press(object sender, EventArgs e)
        {
            bluetooth1.CloseConnect((abj, args) =>
            {
                if (args.isError == true)
                    Toast(args.error);
                else
                    Toast("success");
            });
        }
        /// <summary>
        /// 发送蓝牙信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Press(object sender, EventArgs e)
        {
            string str = "690000001";
            string print = "SIZE 80 mm,40 mm\r\n" + "REFERENCE 0,0\r\n" + "SPEED 4.0\r\n" + "DENSITY 8\r\n" + "SET PEEL OFF\r\n" + "SET CUTTER OFF\r\n" + "SET TEAR ON\r\n" + "DIRECTION 0\r\n" + "SHIFT 0\r\n" + "OFFSET 0 mm\r\n" + "CLS\r\n" + "BARCODE 20,20,\"128M\",160,1,0,4,12,\"" + str + "\"\r\n" + "TEXT 20,190,\"ARIAL.TTF\",0,15,15,\"" + str + "\"\n" + "PRINT 3,1\r\n";
            bluetooth1.WriteData(System.Text.Encoding.UTF8.GetBytes(print), (abj, args) =>
            {
                if (args.isError == true)
                    Toast(args.error);
                else
                    Toast("success");
            });
        }
        /// <summary>
        ///获取蓝牙状态,蓝牙是否连接成功需要GetStatus获取状态来判断
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button7_Press(object sender, EventArgs e)
        {
            bluetooth1.GetStatus((abj, args) =>
            {
                if (args.isError == true)
                    Toast(args.error);
                else
                {
                    Toast(args.Status + "  " + args.Name + "  " + args.MacAddress);
                    label2.Text = args.Status.ToString();
                }
            });
        }

在设计器中选中Bluetooth添加事件

在这里插入图片描述

        private void bluetooth1_DataReceived(object sender, Smobiler.Plugins.BluetoothDataReceivedEventArgs e)
        {
            //e.Data 接收到的数据; e.Deviceid 蓝牙设备id; 当连接多个蓝牙时,会多次触发该事件,可根据e.Deviceid区分蓝牙设备
            MessageBox.Show(System.Text.Encoding.GetEncoding("gbk").GetString(e.Data));
        }

Step 2. 运行服务端后,手机上安装官网的调试工具进行测试,效果如下

在这里插入图片描述

若是使用云平台上自行打包的客户端, 需要添加相应插件后再打包客户端。
在这里插入图片描述

补充

以上代码可用于连接经典蓝牙,BLE蓝牙请使用以下方法

方法方法说明
CloseConnectBle断开连接上的低功耗蓝牙设备
ConnectBle连接指定低功耗蓝牙
SearchBle查找并连接低功耗蓝牙
WriteBleData发送低功耗蓝牙信息

demo 参考 https://github.com/comsmobiler/SmobilerTutorials/blob/master/Source/Plugins/demoBluetooth.cs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞项三招教你用协同工具杜绝远程办公“摸鱼”

共同社19日报道称&#xff0c;总务省在新冠紧急事态宣言全面解除后不久的2021年10月对日本约9万户家庭开展了社会生活基本调查&#xff0c;利用获得的数据&#xff0c;对上班族中在调查当天有过远程办公的人和完全没有远程办公的人的工作日时间分配进行了比较。 结果显示&…

【vue面试题】

vue谈谈你怼MVVM开发模式的理解vue优点渐进式框架的理解vue常用的指令v-if和v-showv-if和v-for的优先级如何让CSS只在当前组件中起作用?<keep-alive></keep-alive> 的作用是什么?如何获取dom?vue-loader是什么&#xff1f;使用它的用途有哪些&#xff1f;assets…

哺乳时宝宝一边吃奶,另一边却自动流出来,这是怎么回事?

别人眼中的母乳喂养只是简单地把宝宝抱在怀里&#xff0c;让宝宝吃饱&#xff0c;超级简单。事实上&#xff0c;有很多母乳喂养。“麻烦事”比如母乳不足、堵奶、乳腺炎等&#xff0c;甚至更多“简单”漏奶会让宝宝头疼。有些妈妈很幸运&#xff0c;不知道什么是漏奶&#xff0…

小程序之会议管理

会议管理 注意事项 一些需要注意的细节&#xff1a; 因为 WXML 节点标签名只能是小写字母、中划线和下划线的组合&#xff0c;所以自定义组件的标签名也只能包含这些字符。自定义组件也是可以引用自定义组件的&#xff0c;引用方法类似于页面引用自定义组件的方式&#xff0…

React DAY07

复习&#xff1a; 1.RN中的样式和布局 RN样式完全脱离浏览器&#xff0c;自成体系的一套样式&#xff0c;使用对象创建样式 行内样式&#xff1a; <Text style{{color: red}}>内部样式&#xff1a; let ss StyleSheet.create({danger: {color: red}}) <Text styl…

从业多年的Android开发,竟拿不到 Application Context?

Android 开发者们对于 Application 并不陌生。有的时候为避免内存泄漏&#xff0c;常常不直接使用 Context 而是通过其提供的 getApplicationContext() 确保拿到的是 Application 级别的 Context。而本次像通常一样&#xff0c;拿到的 Application 却是 null&#xff0c;到底是…

国考省考行测:细节理解,对错判断,要素查找,问什么,找什么,对比分析

国考省考行测&#xff1a;细节理解&#xff0c;对错判断&#xff0c;要素查找&#xff0c;问什么&#xff0c;找什么&#xff0c;对比分析 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要…

头戴式耳机适合运动吗、五款最适合运动的耳机分享

戴着耳机锻炼&#xff0c;听着动感的音乐&#xff0c;会让你心潮澎湃&#xff0c;瞬间感觉自己力大无穷。那什么样的耳机更适合在健身房锻炼时戴呢&#xff1f;首先稳固性和舒适度一定要比较好&#xff0c;毕竟在运动的过程中老是感觉到不适或者掉落&#xff0c;那真的是很令人…

旋转的扰动、导数和积分

The plus operator 设M\mathcal{M}M表示一个n维的流型&#xff0c;因为流型局部同胚与Rn\mathbb{R}^nRn&#xff0c;所以我们可以通过定义符号⊞\boxplus⊞和⊟\boxminus⊟建立一个流型M\mathcal{M}M的局部邻域和其正切空间的双射。 ⊞:MRn→M;⊟:MMn→Rn\boxplus:\mathcal{M}…

为什么说用了MES系统,但生产数字化管理只做到20%?

随着越来越多的制造企业开始体验和建设MES系统&#xff0c;MES系统能够实现生产执行过程的有效数字化管理已经成为共识。回过头来看&#xff0c;是不是只有生产进度才是工厂需要管理的&#xff1f;当你想详细了解当前存在的问题&#xff0c;进展如何&#xff0c;哪些月度重点任…

JAVA零基础小白学习教程之day09-内部类权限final静态

day09-JAVAOOP 课程目标 1. 【理解】什么是内部类 2. 【掌握】匿名内部类 3. 【掌握】引用数据类型作为方法的参数 4. 【理解】final关键字的使用 5. 【理解】包的定义及使用 6. 【理解】权限修饰符 7. 【掌握】static关键字的使用B友https://www.bilibili.com/video/BV1QG4y…

职场员工有没有潜力,看这一个能力就够了

在我组织的研讨会上&#xff0c;讲故事的课程通常以一个思考练习开始。 我会让参与者闭上眼睛回忆《小红帽》的故事&#xff0c;尤其考虑其中的情节、起伏和结尾。这个练习有时会引发一阵笑声&#xff0c;人们会好奇这与课程有什么相关性&#xff0c;或者干脆把《小红帽》与《…

给Debezium connector 发送信号

1. 概述 Debezium 信号机制提供了一种方法来修改连接器的行为&#xff0c;或触发一次性操作&#xff0c;例如启动表的 临时快照。要触发连接器执行指定操作&#xff0c;可以发出特殊的SQL 命令以将信号消息添加到专门的信号表&#xff0c;也称为信号数据集合。在源数据库上创建…

哪些进销存软件既好用又免费?

中小企业刚起步都会面临着资金紧缺、人力资源不足等诸多管理问题&#xff0c;对于大部分预算不是很多的中小企业或者尚未尝试过进销存软件的企业&#xff0c;都会选择免费进销存软件来进行企业管理或体验进销存软件的功效。 进销存软件的开发需要强大的技术支持&#xff0c;数…

B站技术选型与架构

目录前言B站前端之路B站Golang技术栈分析bilibili技术总监毛剑简介前言 了解了一下B站的技术发展历程&#xff1a;最开始是用PHP语言开发的&#xff0c;后来B站的中台逐步被Node占领&#xff0c;而后台技术为了更高的并发、更稳健&#xff0c;以及为了大数据分析&#xff0c;逐…

RK3568平台开发系列讲解(Linux系统篇)共享内存

🚀返回专栏总目录 文章目录 一、共享内存底层实现二、共享内存API三、共享内存案例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢共享内存技术是功能最强、应用最广的进程间通信技术。其原理是多个进程共享相同的物理内存区,一个进程对该内存区的任意修改,可被其…

不懂Nacos没关系,可以看看它是怎么运用代理模式的

背景 看Nacos的源代码时&#xff0c;发现其中有对代理模式的运用&#xff0c;而且用得还不错&#xff0c;可以作为一个典型案例来聊聊&#xff0c;方便大家以更真实的案例来体验一下代理模式的运用。如果你对Nacos不了解&#xff0c;也并不影响对本篇文章的阅读和学习。 本文…

前端三小时用html和js写一个贪吃蛇游戏,非常简单带讲解,代码可直接用,功能完整

目录 游戏主体部分--地狱模式 游戏主页入口 预览图 游戏入口代码 1.html 2.css 3.js 注册页面代码 游戏实现很简单&#xff0c;只写游戏主体的话只要三小时就够了。 话不多说&#xff0c;我们直接来看效果预览。 转成gif图之后有点卡&#xff0c;但是游戏效果并不卡&…

php宝塔搭建部署实战PESCMSTEAM团队任务管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套php开发的PESCMSTEAM团队任务管理系统源码&#xff0c;感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&am…

k8s lifecycle——poststart和prestop

1、lifecycle的声明 lifecycle:postStart:exec:command: ["/bin/sh", "-c", "sleep 100"]preStop:exec:command: ["/bin/sh", "-c", "sleep 100"]2、poststart 容器创建后立即执行&#xff0c;主要用于资源部署、…