CH573-09-BLE蓝牙安卓应用二次开发——RISC-V内核BLE MCU快速开发教程

2023-09-18 06:19:56

在这里插入图片描述

一、基础工程搭建

在上一章最后一讲的BLE蓝牙例程中,我们使用了沁恒官方的BLE调试助手完成数据发送,接下来我们使用Android Studio完成一款简易的BLE调试助手。

1、参考文章

我这里参考了CSDN中的一位博主“摸爬滚打的程序媛”的文章以及对应文章中的Android Studio BLE应用工程的Demo。

版权声明:链接中的文章为CSDN博主「摸爬滚打的程序媛」的原创文章,
遵循CC 4.0 BY-SA版权协议,
转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38950819/article/details/103067487

大家先根据这位博主的文章搭建安卓工程,我也是按照这个文章进行的学习,博主也提供了工程源码,可以直接在Gitee上下载,具体请参考上述链接,下面的教程是基于这个工程之上,请大家搭建好上述工程后进行下面二次开发的教程学习。

2、工程自定义修改

按上面的教程搭建工程后,主要是工程的UUID修改,打开沁恒官方的BLE蓝牙调试助手,查看相关UUID,然后在工程中修改,例如:
在这里插入图片描述

3、运行测试

修改后在真机中运行,测试数据收发,首先点击搜索,然后选择要连接的蓝牙,点击连接后在数据输入框中输入数据,点击发送,串口助手可以收到数据(十六进制显示):

在这里插入图片描述
发送没有问题然后测试数据接收,在串口助手中勾选16进制发送,输入“88”后发送,APP端可以接收到数据:
在这里插入图片描述
在上一讲中通过发送字符“1”和字符“0”控制LED,在这个安卓应用中也可以实现,字符“0”的ASCII码为48,换算成16进制为0x30,在安卓应用中发送“30”,在串口助手中同样可以看到LED的开关变化:
在这里插入图片描述
提示:调试信息中的“NO TIME OUT”可在下图中注释掉:
在这里插入图片描述

然后我们就可以通过修改安卓应用程序,实现自己所需要的功能,下面为本期教程的二次开发中遇到的一些问题与解决方法。

二、二次开发可能遇到的问题

1、工程适配

通过上面的教程,我们可以搭建或直接下载模板程序,我这里采用的后者,按上述操作可以完成基本通信,但经过大幅修改后(例如添加界面等)编译会出现错误,如果大家也遇到相关问题,可以参考下面的方法解决:

(1)添加Activity

(这里添加Activity的主要作用是用于触发编译运行时的错误)
NEW->Activity->Empty Activity
在这里插入图片描述
在这里插入图片描述

(2)Default interface xxxx

等待上述Acticity构建完成后点击RUN,会遇到如下错误提示"Default interface methods are only supported starting with Android N (–min-api ":
在这里插入图片描述
解决方法:在“build.gradle”中添加下面代码用于指定JAVA版本,然后点击“Sync now”:

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

在这里插入图片描述

(3) Android resource linking failed

添加java版本指定后,再次点击RUN,会遇到新的问题“Android resource linking failed”:
在这里插入图片描述
解决方法:
首先进入“SDK Mangager”,查看“SDK Platform Tools”版本号,例如我这里是“33.0.3”:
在这里插入图片描述
修改:
在这里插入图片描述
再次运行:
在这里插入图片描述

(4)权限问题

这里我们修改AndroidManifest.xml文件,加入下面这句:

android:exported="true"

在这里插入图片描述
再次点击运行,此时程序可以运行,但是点击搜索时会闪退,因为权限需要补充,在MainActivity中的126行可以看到:
在这里插入图片描述
我们可以在文件中手动添加下面两个:

<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />

在这里插入图片描述

然后在需要的地方加入权限检查提示:
在这里插入图片描述
并把报错的“this”替换为“getApplicationContext()”
在这里插入图片描述
然后再次运行,就会发现所有功能正常使用了,接下来,我们可以自由的修改程序,完成自己的蓝牙应用开发啦。

更多推荐

【C++杂货铺】国庆中秋特辑——多态由浅入深详细总结

文章目录一、多态的概念二、多态的定义及实现2.1多态的构成条件2.2虚函数2.3虚函数的重写2.4虚函数重写的两个例外2.4.1协变(基类与派生类虚函数返回值类型不同)2.4.2析构函数的重写(基类与派生类析构函数的名字不同)2.5C++11override和final2.5.1final:修饰虚函数,表示该虚函数不能

ORB-SLAM2_RGBD_DENSE_MAP编译、问题解决、离线加载TUM数据和在线加载D435i相机数据生成稠密地图

文章目录0引言1安装依赖1.1其他库安装1.2pcl库安装2编译ORB-SLAM2_RGBD_DENSE_MAP2.1build.sh2.2build_ros.sh3运行ORB-SLAM2_RGBD_DENSE_MAP3.1build.sh编译版本3.2build_ros.sh编译版本0引言ORB-SLAM2_RGBD

什么是集成测试?集成测试方法有哪些?

1、基本概念:将软件集成起来后进行测试。集成测试又叫子系统测试、组装测试、部件测试等。集成测试主要是针对软件高层设计进行测试,一般来说是以模块和子系统为单位进行测试。2、集成测试包含的层次:1.模块内的集成,主要是测试模块内各个接口间的交互集成关系;2.子系统内的集成,测试子系统内各个模块间的交互关系;3.系统集成,测

学习Node js:raw-body模块源码解析

raw-body是什么raw-body的主要功能是处理HTTP请求体的原始数据。它提供了以下核心功能:解析请求体:可以从HTTP请求中提取原始数据,包括文本和二进制数据。配置选项:通过配置项,可以设置请求体的大小限制、编码方式等参数。异常处理:模块能够处理异常情况,如请求体超出限制。编码转换:支持将原始数据解码为指定编

Android 网络请求方式

前言最近需要将Android项目接入物联网公司提供的接口,所以顺便给大家分享一下Android中我们常用的网络请求吧!提醒大家一下,我们遇到接口需求,一定要先在Postman上测试接口是否正确,然后再去项目上写程序来请求接口;否则,请求出问题,你都不确定是你程序写的有问题还是接口本身提供的有问题。Android网络请求

第八章 网络基本配置与应用

第八章网络基本配置与应用​Linux操作系统时随着计算机网络技术的发展而产生并发展的,因此其网络功能也十分强大。Ubuntu系统作为Linux的一种具体实现,同样集成了Linux强大的网络功能,并且也只有在网络环境下才能充分发挥Ubuntu系统的全部功能。1.网络的基本配置1.1.网络基础知识​计算机网络是指将地理位置

9.20金融科技(比特币)

​比特币的起源和发展2008年爆发全球金融危机,同年11月1日,一个自称中本聪(SatoshiNakamoto)的人在P2Pfoundation网站上发布了比特币白皮书《比特币:一种点对点的电子现金系,陈述了他对电子货币的新设想——比特币就此面世。2009年1月3日,比特币创世区块诞生。2014年9月9日,美国电商巨头

看完这篇 教你玩转渗透测试靶机Vulnhub——Grotesque:3.0.1

Vulnhub靶机Grotesque:3.0.1渗透测试详解Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:①:信息收集:②:漏洞发现:③:LFI漏洞利用(本地文件包含漏洞):④:SSH登入:⑤:提权:⑥:获取FLAG:Vulnhub靶机渗透总结:Vulnhub靶机介绍:vulnhub是个提供各

比特币的蒙提霍尔问题

把钱放在嘴边我们在比特币上建立了蒙提霍尔问题模拟。如果您知道概率谜题的正确答案,不仅炫耀您的数学技能,还会获得金钱奖励。它完全无需信任地在链上运行。蒙提霍尔问题蒙提霍尔问题(三门问题)是一个以蒙提霍尔命名的概率谜题,蒙提霍尔是电视节目《让我们做个交易》的原主持人。这是一个著名的反直觉统计难题,其解决方案非常荒谬,即使被

Python爬虫基础(三):使用Selenium动态加载网页

文章目录系列文章索引一、Selenium简介1、什么是selenium?2、为什么使用selenium3、安装selenium(1)谷歌浏览器驱动下载安装(2)安装selenium二、Selenium使用1、简单使用2、元素定位3、获取元素信息4、交互三、Phantomjs使用(停更)1、什么是Phantomjs2、下

BD就业复习第一天

hive1.分区分桶在Hive中,分区(Partition)和分桶(Bucketing)都是用于数据管理和查询性能优化的技术。它们有不同的用途和特点。分区(Partition):定义:分区是将数据按照某一列或多列的值划分为不同的子目录,使数据可以按照分区列的值进行组织。例如,可以根据日期将数据分为不同的分区,每个分区对

热文推荐