安卓蓝牙开发总结(一)—蓝牙开启与关闭

article/2025/10/15 12:29:23

蓝牙开启与关闭

      • 1、引言
      • 2、布局文件
      • 3、蓝牙打开与关闭
        •   3.1 通过对按钮监听方法
        •   3.2 通过设置点击事件
      • 4、结果展示及总结
      • 5、参考链接

1、引言

  最近在学习如何在安卓手机上对蓝牙进行操控,作为初学者发现大多数博客对安卓开发的初学者极为不友好,特别是安卓和java都不熟悉的童鞋,因此现对我近期所学习内容做一个总结,希望对大家有帮助。

2、布局文件

  控件的种类,数量及用途如下表所示,AS中控件的使用方法可参考B站up主(longway777)讲得很到位。

控件种类控件数量作用
Button2蓝牙的打开与关闭
Guideline2固定控件
textView1显示蓝牙的状态

  具体布局如下图所示,

  具体代码如下所示,
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="32dp"android:text="@string/button1"android:textSize="24sp"app:layout_constraintEnd_toStartOf="@+id/guideline2"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="32dp"android:text="@string/button2"android:textSize="24sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/guideline2"app:layout_constraintTop_toTopOf="@+id/guideline" /><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="244dp"android:textSize="24sp"app:layout_constraintEnd_toStartOf="@+id/guideline2"app:layout_constraintHorizontal_bias="0.965"app:layout_constraintStart_toStartOf="@+id/guideline2"app:layout_constraintTop_toTopOf="@+id/guideline" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.2" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.5" /></androidx.constraintlayout.widget.ConstraintLayout>

3、蓝牙打开与关闭

  这里主要讲两种方法实现按钮对蓝牙的打开与关闭功能,若要对安卓手机蓝牙进行操控时,首先在AndroidManifest.xml文件中添加蓝牙权限,如下所示。

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

AndroidManifest.xml具体位置如下图所示,

  无论采用那种方法处理按钮背后的逻辑,都需要采用用到 BluetoothAdapter这个类来实现对蓝牙的关闭与打开,下面对本次实验用到 BluetoothAdapter类的方法进行解释。BluetoothAdapter为蓝牙适配器,在对本机蓝牙进行操作时一般都要用到这个类里的方法。

方法作用返回值
BluetoothAdapter.getDefaultAdapter()判断本机是否支持蓝牙返回值为boolean类型, 若返回null则表示不支持蓝牙
BluetoothAdapter.isEnabled()判断本机蓝牙当前状态返回值为boolean类型, 若返回truel则表示本机蓝牙已打开
BluetoothAdapter.enable()打开蓝牙返回值为boolean类型
BluetoothAdapter.disenable()关闭蓝牙返回值为boolean类型

  3.1 通过对按钮监听方法

    通过调用按钮的监听方法对按钮进行监听,MainActivity.java具体代码所示。

package com.example.ble_csdn;import androidx.appcompat.app.AppCompatActivity;import android.bluetooth.BluetoothAdapter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {Button button1, button2;   // 申明蓝牙打开与关闭按钮TextView textView;         // 申明蓝牙状态显示文本框private BluetoothAdapter mAdapter = BluetoothAdapter.getDefaultAdapter();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button1 = findViewById(R.id.button);      // 与layout布局文件中的按钮绑定button2 = findViewById(R.id.button2);textView = findViewById(R.id.textView);   // 与layout布局文件中的文本框绑定// 在程序运行的时候就要监测本机当前蓝牙的状态,并显示在文本框中if (mAdapter.isEnabled()){textView.setText(R.string.bleStatusOn);Toast.makeText(MainActivity.this, R.string.bleStatusOn, Toast.LENGTH_SHORT).show();//Toast.makeText(MainActivity.this, "蓝牙已打开!", Toast.LENGTH_SHORT).show();}// 调用按钮监听方法,对button1进行监听button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(mAdapter == null){Toast.makeText(MainActivity.this, "本机不支持蓝牙!", Toast.LENGTH_SHORT).show();}else{if(!mAdapter.isEnabled()){mAdapter.enable();  // 打开蓝牙textView.setText(R.string.bleStatusOn);     // 显示蓝牙当前状态//textView.setText("蓝牙已打开!");}textView.setText(R.string.bleStatusOn);Toast.makeText(MainActivity.this, R.string.bleStatusOn, Toast.LENGTH_SHORT).show();//Toast.makeText(MainActivity.this, "蓝牙已打开!", Toast.LENGTH_SHORT).show();}}});// 调用按钮监听方法,对button2进行监听button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mAdapter.disable();  //关闭蓝牙textView.setText(R.string.bleStatusOff);//textView.setText("蓝牙已打开!");}});}
}

备注:只需将对应的部分拷贝到自己新建的工程即可,无需将整个代码复制过去。

  3.2 通过设置点击事件

  不需要利用findViewById();方法实现声明的按钮控件与layout文件中的按钮相关联,MainActivity.java具体代码如下所示。

package com.example.ble_csdn;import androidx.appcompat.app.AppCompatActivity;import android.bluetooth.BluetoothAdapter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {Button button1, button2;   // 申明蓝牙打开与关闭按钮TextView textView;         // 申明蓝牙状态显示文本框private BluetoothAdapter mAdapter = BluetoothAdapter.getDefaultAdapter();     @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.textView);   // 与layout布局文件中的文本框绑定// 在程序运行的时候就要监测本机当前蓝牙的状态,并显示在文本框中if (mAdapter.isEnabled()){textView.setText(R.string.bleStatusOn);Toast.makeText(MainActivity.this, R.string.bleStatusOn, Toast.LENGTH_SHORT).show();//Toast.makeText(MainActivity.this, "蓝牙已打开!", Toast.LENGTH_SHORT).show();}}// 打开蓝牙public void turnOnBlueTooth(View view){if(mAdapter == null){Toast.makeText(MainActivity.this, "本机不支持蓝牙!", Toast.LENGTH_SHORT).show();textView.setText("本机不支持蓝牙!");}else{if(!mAdapter.isEnabled()){mAdapter.enable();Toast.makeText(MainActivity.this, "蓝牙已打开!", Toast.LENGTH_SHORT).show();textView.setText("蓝牙已打开!");}else {Toast.makeText(MainActivity.this, "蓝牙已打开!", Toast.LENGTH_SHORT).show();textView.setText("蓝牙已打开!");}}}// 关闭蓝牙public void turnOffBlueTooth(View view){mAdapter.disable();Toast.makeText(MainActivity.this, "蓝牙已关闭!", Toast.LENGTH_SHORT).show();textView.setText("蓝牙已关闭!");}
}

  接下来要为按钮设置点击函数,具体步骤如下所示,

4、结果展示及总结

  结果展示如下所示,若觉得本文对您有请动一动小手指帮忙点个赞额,若需要源码请在评论区留下您的邮箱

5、参考链接

1、常用控件的使用
2、BluetoothAdapter、BluetoothDevice类方法介绍
3、初探安卓开发
4、安卓蓝牙开发


http://chatgpt.dhexx.cn/article/fMaDy8Ox.shtml

相关文章

【Bluetooth|蓝牙开发】二、蓝牙开发入门

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;嵌入式领域新星创作者 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 【所有文章汇总】 1、蓝牙基础概念 蓝牙&#xff0c;是一种利用低功率无线电&#xff0c;支持设备短距离…

nimble 蓝牙开发一:BLE 蓝牙 Host 规范概述

目录 nimble 蓝牙开发一&#xff1a;概述一、BLE 简介二、BLE 基础知识蓝牙设备地址BLE 广播类型标准广播数据 三、BLE 工作概述BLE 常见的操作有&#xff1a;BLE 常见的工作流程&#xff1a; 四、BLE 使用的协议规范GAP1. GAP 工作角色2. GAP 工作模式3. GAP 工作流程4. GAP 工…

ESP32 蓝牙开发

1. 低功耗蓝牙&#xff08;BLE&#xff09;协议栈 低功耗蓝牙协议是蓝牙通信协议的一种&#xff0c;BLE协议栈就是实现低功耗蓝牙协议的代码 1.1 层次协议 蓝牙协议规定了两个层次的协议&#xff0c;分别为蓝牙核心协议&#xff08;Bluetooth Core&#xff09;和蓝牙应用层协…

Android蓝牙开发 — 经典蓝牙BLE蓝牙

一&#xff0c;前期基础知识储备 1&#xff09;蓝牙是一种支持设备之间短距离通信的无线电技术&#xff08;其他还包括红外&#xff0c;WIFI&#xff09;&#xff1b; 支持移动电话、笔记本电脑、无线耳机等设备之间进行信息的交换&#xff1b; Android支持的蓝牙协议栈&…

Android 蓝牙开发——概述(一)

一、蓝牙简介 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。 其中将1.x~3.0之间的版本称之为经典蓝牙,4.x开始的蓝牙称之为低功耗蓝牙,也就是蓝牙BLE。 1、蓝牙协议介绍…

低功耗蓝牙开发入门概念科普

一、概述 1、缘起 低功耗蓝牙起源于Bluetooth4.0版本&#xff0c;至今已发展到5.3 4.0 bluetooth low enerngy 这个阶段低功耗蓝牙的基础框架已经稳定成型&#xff0c;后面版本主要退出新特性和扩展特性&#xff0c;同时保证和4.0的原生兼容性 4.1 multi role&#xff08;主从…

ESP32开发三_蓝牙开发

蓝牙开发 交流QQ: 1048272975 QQ交流群: 636564526 蓝牙是一种不断创新发展的无线通信技术标准&#xff0c;采用了2.4G ISM频段&#xff0c;在音频传输、数据传输、位置服务、设备组网这些场景有着广泛的应用。 1. 蓝牙概述 蓝牙技术分经典蓝牙(Classic BT)和低…

iOS 蓝牙开发实现文件传输

这是一篇旧文&#xff0c;三年前就写过了&#xff0c;一直没有时间分享出来&#xff0c;最近简单整理了下&#xff0c;希望能帮到有需要的人。   由于我这里没有相关的蓝牙设备&#xff0c;主要用了两个手机&#xff0c;一个作为主设备&#xff0c;一个做为从设备。另外进行蓝…

Android经典蓝牙开发全流程

一、基本介绍 所谓蓝牙(Bluetooth)技术&#xff0c;实际上是一种短距离无线电技术&#xff0c;最初是由爱立信公司公司发明的。技术始于爱立信公司 1994 方案&#xff0c;它是研究在移动电话和其他配件间进行低功耗、低成本无线通信连接的方法。发明者希望为设备间的通讯创造一…

Android - 蓝牙开发

文章目录 科普SIG类型制式选择逻辑链路控制适配协议 (L2CAP)L2CAP的功能 蓝牙框架和 RFCOMM 协议蓝牙安全白名单机制 编程蓝牙权限Classic BluetoothBluetooth Low Energy术语角色 & 职能查找 BLE 设备连接设备上的 GATT 服务器绑定服务蓝牙设置连接到设备连接到 GATT 服务…

Android 蓝牙开发 uuid,Android蓝牙开发之 UUID

UUID&#xff1a;全球唯一标识符 在蓝牙中&#xff0c;每个Service和Characteristic都唯一地由"全球唯一标识符" (UUID)来校验&#xff0c;主要是保证他们的唯一性。 UUID可分为&#xff1a;16位、32位、128 位UUID Bluetooth_Base_UUID&#xff1a;蓝牙UUID基数 UUI…

Android 低功耗蓝牙开发简述

低功耗蓝牙简述 一、什么是低功耗蓝牙&#xff1f;二、怎么做低功耗蓝牙应用&#xff1f;① 之前有没有接触Android蓝牙开发&#xff1f;② 蓝牙设备固件是公司自己的吗&#xff1f;③ 有没有蓝牙固件和蓝牙应用的文档和Demo&#xff1f;④ 具体的业务功能需求明确吗&#xff1…

Android蓝牙开发

题引&#xff1a; 最近项目上涉及与硬件相关的功能&#xff0c;需要通过蓝牙进行消息收发。项目已完成&#xff0c;这里做下记录。 通信步骤&#xff1a; 1.初始化BluetoothAdapter.getDefaultAdapter()获取BluetoothAdapter对象 2.判断蓝牙是否开启bluetoothAdapter.isEnab…

【Android】蓝牙开发——BLE(低功耗蓝牙)(附完整Demo)

目录 目录 前言 一、相关概念介绍 二、实战开发 三、项目演示 四、Demo案例源码地址 五、更新记录 1、2020/12/29 &#xff1a;修改 setupService()中错误 2、2021/05/14 &#xff1a;更新连接方法&#xff08;解决部分蓝牙设备连接失败的问题&#xff09; 3、2022/1…

【Bluetooth开发】蓝牙开发入门

BLE 蓝牙设备在生活中无处不在&#xff0c;但是我们也只是将其作为蓝牙模块进行使用&#xff0c;发送简单的AT命令实现数据收发。 那么&#xff0c;像对于一些复杂的使用场合&#xff1a;“车载蓝牙”、"智能手表"、“蓝牙音箱”等&#xff0c;我们不得不去了解底层…

【Bluetooth蓝牙开发】一、蓝牙开发入门

一、蓝牙开发入门 文章目录 一、蓝牙开发入门 1、蓝牙概念2、蓝牙发展历程3、蓝牙技术概述 3.1 Basic Rate(BR)3.2 Low Energy&#xff08;LE&#xff09; 4、常见蓝牙架构 4.1 SOC蓝牙单芯片方案4.2 SOC蓝牙MCU方案4.3 蓝牙host controller分开方案4.4 使用场景 5、参考文档 …

vs2012做ArcGIS二次开发前期准备

解压ArcGIS 1.双击ESRI 2.点击 一路next&#xff0c;自己选择安装路径&#xff0c;建议放在非系统盘 3.开始菜单-ArcGIS-License Server Administrator 4.点击“stop/停止"&#xff0c;再点击确定 5.将破解文件中的两个文件拷到D:\Program Files (x86)\ArcGIS\License10.…

arcgis 二次开发学习笔记(一):了解二次开发有关的软件及其之间的关系

【废话篇】今天是大三开学的第一天课&#xff0c;终于意识到我口中念念不忘却没付出实际行动的“考研”来了。考研目标现在为止还没有很明确&#xff0c;只是不甘屈于人后。周围太多生活得很辛苦的人&#xff0c;只是不愿意我这一辈子也为了有关qian的小事斤斤计较&#xff0c;…

Arcobjects for java:Arcgis二次开发入门,开发一个基本地图组件

一、目的 因学习需要&#xff0c;使用Java进行Arcgis二次开发。当前对arcgis进行二次开发使用的语言基本是C#&#xff0c;使用Java对Arcgis进行二次开发的很少。于是使用java在idea上进行Arcgis二次开发&#xff0c;给入门的同学做参考&#xff0c;我自己也处于入门阶段&#…

ArcGIS二次开发基础教程(00):基础界面设计

ArcGIS二次开发基础教程(00) : 基础界面设计 (开发环境&#xff1a;VS2010ArcEngine10.2C# &#xff1b;鉴于学习ArcGIS二次开发的同学都有一定的WinForm开发和ArcGIS软件使用基础&#xff0c;故此教程不再对一些基础内容作详细阐述&#xff09; 首先新建一个Windows窗体应用程…