极速版手机蓝牙APP开发

news2024/10/6 6:39:53

极速版手机蓝牙APP开发

  • 零、效果展示
  • 一、环境介绍
  • 二、开发过程
    • 控件布局
    • 代码逻辑
      • 蓝牙部分
      • 摇杆部分
      • 其他部分
  • 三、整体优化
  • 四、结束语

零、效果展示

“这是一个充满科技风的手机蓝牙APP”
在这里插入图片描述

一、环境介绍

App Inventor是一款谷歌公司开发的手机编程软件,主要支持各种安卓软件的开发。不知道大家是否在做单片机项目时,是否遇到这样的一个烦恼,需要一款蓝牙APP来实现控制功能,但市面上现成的蓝牙APP并不好用,实现的功能参差不齐,但如果用Android Studio开发,需要花费大量时间,有没有一种能够实现快速开发的软件呢?Appinventor非常适合想编写自己的app,但是又没有专业的学过app开发的人,能够让你根据自己的想法迅速出一个demo。而且,秉承着前人栽树,后人乘凉的思路,有前辈对该环境进行了维护管理,适合在国内使用,不仅可以通过下载资源包在电脑上部署离线环境,也可以直接在网页实现编程。
在这里插入图片描述

二、开发过程

在App Inventor项目开发中,首先是界面设计和布局,部署好相应的控件(常见的有按键、显示框等等),然后通过图形化编程实现相关逻辑功能,验证功能是否按预期需求实现,最后进行界面优化。以下为整个工作区。
在这里插入图片描述
切记,在整个开发过程中,一定不要盲目地从头干到尾,要结合AI伴侣、USB模拟器实时的观察,及时对自己设计不合理的地方去改进。

控件布局

在这一步中首先需要明确本项目要用到哪些控件,比如要用多少个按键,按键的位置要放在何处等等这些问题,由于控件的位置摆布需要用到垂直布局和水平布局,所以将各个框架先部署好,将各个组件直接拖动至手机界面即可。(一般用垂直和水平布局较多,顾名思义,就是在该框架内的控件按照垂直和水平的方式放置)
在这里插入图片描述

紧接着将项目需要用到的控件放入各个框架中,在左边的控件框中直接拖出需要用到的控件,放置在布局中。在这个过程,需要注意格式的对齐,比如说按键按照整齐的格式排布,可以按照百分比的形式操作,这样有利于整体界面的管理。
在这里插入图片描述

由于涉及到摇杆操作,而该软件并没有摇杆组件,所以通过内部的球形控件来实现摇杆的功能。先摆放好一个画布,作为摇杆移动的背景部分。再拖出两个球控件,其中一个半径设计大一些,作为摇杆移动的范围,另一个球控件则是摇杆本身,可在固定范围内(由于摇杆的移动范围为圆形,所以需要自己设计)移动。
在这里插入图片描述

对于这两个球控件的属性,首先是球位置的坐标,默认球的坐标为左上角的坐标,我们需要将其选择为中心坐标,这样减少了运算过程中坐标偏移,就显得不那么复杂。而球的坐标是基于画布的左上角为原点,右边为x轴,下方为y轴。
在这里插入图片描述

再将其它需要用到的控件,一一放置在目标区域中,设置好其大小,位置等相关属性。将所有的控件摆布好之后,控件的布局就大致完成了,为接下来图形化编程奠定了基础。

代码逻辑

代码部分包括蓝牙通信代码、显示部分、输入部分、摇杆部分。通过右上角进入编程界面。
在这里插入图片描述

蓝牙部分

蓝牙部分的代码首先需要加入蓝牙客户端这个不可视组件,再加入一个对话框不可视组件,用于提示蓝牙连接。
在这里插入图片描述

再通过一个蓝牙选择框,显示可连接的蓝牙地址,选择需要连接的蓝牙模块,并将目标蓝牙地址显示在选择框界面上,可通过断开按键断开蓝牙,同时通过一个标签模块,显示蓝牙的状态。

摇杆部分

摇杆部分的代码思路是,调用球控件的图形化代码块,实时得知当前球的坐标位置,通过求模长和三角变换得到其当前角度和距离中心的长度,若长度超过了圆形边界,则将其限制在当前角度最大距离处。
在这里插入图片描述

然后再根据当前的角度,长度情况,发送相应的控制指令,从而控制目标执行。
在这里插入图片描述

其他部分

其他部分有按键部分、显示部分等等。

按键部分的主要代码,是调用按键按下图形化模块,当按键按下时,判断当前是否保持了蓝牙连接,若有蓝牙连接,则通过蓝牙发送该按键所对应的字母模块。
在这里插入图片描述

输入部分代码,通过输入框控件实现,将其属性设置为可读可写,能够在输入框中直接输入需要发送的内容,若蓝牙已连接,则可通过发送按键发送相应的控制字符。
显示部分代码,通过输入框控件实现,将输入框的属性设置为只读,并用一个字符串容器存储输入的指令,每个指令之间通过换行符间隔开。每一次有指令下发时,将新的指令插入字符串容器中,并更新输入框显示。通过清除按键可清除显示内容。
在这里插入图片描述
数字滑动条部分代码,将滑动条总长属性设置为预期的需求,通过一个向下取整图形化模块,将滑动条的步长细分,然后再根据滑动条的位置,发送不同的控制字符指令。
在这里插入图片描述

视频显示部分,引入了一个开关控件和web显示控件,当开关控件状态改变时,进入目标网址,从而进行视频流的实时显示。
在这里插入图片描述

三、整体优化

在实现了逻辑功能后,考虑整体优化,比如导入素材,将图片显示在按键、输入框等控件上,使显示界面优化,让其充满科技风。
在这里插入图片描述

检查一下整体功能是否符合预期,是否有代码块能够优化,使其执行更加简洁高效。

四、结束语

蓝牙控制在嵌入式工程中还是较为常见的,能够满足一些无线通信控制项目需求,通过App Inventor,也能够实现其他的功能,图形化编程能够大大缩减开发时间。总的来说,是一个不错的安卓开发平台。

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

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

相关文章

vue 实现 dragover拖拽到页面底部时元素自动向下滚动

公司要求做一个类似于企业微信的日程功能 然后呢 日程组件 需要能拖拽时间段创建 这里 我们使用 dragstartdragenddragover 记录被拖动位置完成的 如果没接触过 可以查看我的文章 vue记录鼠标拖拽划过位置并将划过位置变色 这里的话 其实可以在dragover中做操作 界面上 drag…

【C++ 基础篇:20】:类的 (const)static 静态成员:面试题:实现一个类,计算程序中创建出了多少个类对象?

本系列 C 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C的三大特性等&#…

区块链基础之共识机制

1.1共识机制 1.1.1核心定义 区块链上的共识机制主要解决由谁来构造区块,以及如何维护区块链统一的问题 1.1.2共识机制分类 1.1.3 共识算法 1.1.3.1 POW(工作量证明) 代表项目:BTC 由于不同的节点接受数据有所区别,为了保证数据一致性&a…

改善录音直播收音环境,只需一副监听耳机,丁一号G800S体验

现在很多人已经习惯了使用蓝牙耳机,但在平时直播、录音的时候,把蓝牙耳机当作耳返工具并不好用,经常有延迟高之类的问题,影响我们的录音效果和沟通体验,这时候需要配备一个监听耳机,才能够了解到实际的收音…

斐波那契数列题解(非递归c++方法实现)

在做信奥赛(信息学奥赛)中的for循环题目时,有一道斐波那契数列,想到的第一个方法是使用递归求解;因为以往题目最多使用的就是递归形式,但鉴于该题目在for循环题目堆,所以就思考了一些新方法&…

果推断17--基于反事实因果推断的度小满额度模型学习笔记

目录 一、原文地址 二、一些问题 2.1如何从RCT随机样本过渡到观测样本因果建模? 2.2反事实学习的核心思想 2.3度小满的连续反事实额度模型 Mono-CFR 2.4Mono-CFR代码实现(待补充) 2.5CFR学习 2.5.1CFR 2.5.2DR-CFR 参考 一、原文地…

2.C++多线程--危险点分析

1.detach使用时分析 使用detach时&#xff0c;子线程一定不要传入指针 #include<iostream> #include<thread> using namespace std;void my_print(const int& num1,const char* str) {cout << num1 << " " << str << endl; …

MySQL 事务处理语言 TCL

文章目录 事务处理语言 TCL事务简介事务控制并发事务的隔离挑战脏读不可重复读幻读 事务的隔离级别未提交读&#xff08;READ-UNCOMMITED&#xff09;提交读&#xff08;READ COMMITED&#xff09;可重复读&#xff08;REPEATABLE READ&#xff09;可串行化&#xff08;SERIALI…

虹科案例 | 筒仓液位测量可以这么简单?

Part.01 行业挑战 在料箱、料斗或筒仓中使用散装物料的制造商需要准确可靠的液位检测来管理和处理库存&#xff0c;并最大限度地减少生产延迟。 塑料成型、食品加工和建筑材料等行业都依赖于散装材料。随着这些行业越来越接近准时制&#xff08;JIT&#xff09;制造&#xff…

认识协议【网络基础】

文章目录 什么是协议结构化数据结构化数据非结构化数据半结构化数据 结构化数据的传输序列化和反序列化 网络版计算器概述制定协议通过字符串传输结构化数据序列化与反序列化 实现计算器网络相关接口框架服务端客户端 制定协议请求响应发送和接收数据 计算逻辑测试存在的问题 T…

修改数组【并查集】

这里写自定义目录标题 并查集并查集的表示方法 题目输入描述输入示例输出示例 解题思路参考连接 并查集 并查集就是对集合的合并和查询操作的统称。他要求参与运算的两个集合是不相交的(不含有相同的元素)。针对这两个集合可以进行的操作&#xff1a; 1.合并&#xff1a;将两个…

复习之Linux系统中的进程管理

1.什么是进程&#xff1f;线程&#xff1f; 进程&#xff08;Process&#xff09;&#xff1a;是操作系统进行资源分配的最小单位。一个进程是一个程序的一次执行过程。每启动一个进程&#xff0c;操作系统就会为它分配一块独立的内存空间&#xff0c;用于存储PCB、数据段、程…

如何从复盘中获得真正的收获?持续改进是关键!

复盘&#xff0c;本是围棋术语&#xff0c;每次博弈结束后&#xff0c;双方棋手把刚才的对局复演一遍&#xff0c;分析对局当中得失关键&#xff0c;提升自己棋力的好方法。复盘是对思维的训练。 通过复盘&#xff0c;当类似局面再次出现&#xff0c;你就能快速预测接下来的动态…

【网络】TCP套接字创建服务客户端与守护进程

文章目录 Tcp服务端TcpServer.hppTcpServer.cc Tcp客户端TcpClient.hppTcpClient.cc TCP客户端处理守护进程守护进程化 Tcp服务端 TcpServer.hpp TCP服务端创建流程如下&#xff1a; 创建socket文件套接字对象&#xff0c;面向字节流SOCK_STREAM bind绑定自己的网络信息&…

nacos注册中心配置springboot动态刷新源码解读

0丶简介 如何快速启动,请去官网看文档,言简意赅 https://nacos.io/zh-cn/docs/quick-start.html 只描述为何实现动态刷新的关键源码 1丶基于目前最新版本 <!-- https://mvnrepository.com/artifact/com.alibaba.boot/nacos-config-spring-boot-starter --> <depend…

命名管道详解

一、命名管道 1、命名管道与匿名管道一个很显著的区别是&#xff1a;匿名管道只能在有血缘关系的进程间进行通信&#xff0c;但命名管道可以让两个毫无关系的进程进行通信。 2、如果我们想在不相关的进程间交换数据&#xff0c;我们可以用到FIFO文件来进行通信&#xff0c;这…

【Nginx rewrite】

目录 一、常见的Nginx 正则表达式二、location1、location 解释2、location 示例说明&#xff1a;3、实际网站使用中&#xff0c;至少有三个匹配规则定义&#xff1a; 二、rewrite1、rewrite跳转实现&#xff1a;2、rewrite 执行顺序如下&#xff1a;3、rewrite 示例 一、常见的…

B-3:Linux 系统渗透提权

B-3&#xff1a;Linux 系统渗透提权 任务环境说明&#xff1a; 服务器场景&#xff1a;Server2204&#xff08;关闭链接&#xff09; 用户名&#xff1a;hacker 密码&#xff1a;123456 1.使用渗透机对服务器信息收集&#xff0c;并将服务器中 SSH 服务端口号作为 flag 提 …

Java工厂模式(随笔)

前言&#xff1a;Java工厂模式是一种创建型设计模式&#xff0c;它提供了一种将对象创建过程封装到一个单独的类中的方式&#xff0c;这个类就是被称为‘工厂类’&#xff0c;它根据特定的条件来决定应该创建哪个对象&#xff01; 文章目录&#xff1a; 三大工厂模式介绍特殊工…

计算机网络第二章——物理层(上)

提示&#xff1a;男儿何不带吴钩&#xff0c;收取关山五十州 文章目录 2.1.1 物理层基本概念知识引导物理层接口特征 2.1.2 数据通信基础知识数据通信相关术语数据通信系统要考虑的问题三种通信方式串行传输&并行传输同步传输&异步传输 脑图时刻 2.1.3 数据通信基础知识…