Android 蓝牙BluetoothAdapter 相关(一)

Android 蓝牙相关

本文主要讲述android 蓝牙的简单使用.

1: 是否支持蓝牙

/**
 * 是否支持蓝牙
 *
 * @return
 */
private boolean isSupportBluetooth() {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    return bluetoothAdapter != null;
}

2: 开启蓝牙

注意这里需要申请下BLUETOOTH 权限.

/**
 * 开启蓝牙
 */
private void openBluetooth() {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    //RequiresPermission(Manifest.permission.BLUETOOTH)
    if (!bluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, 1001);
    }
}

点击跳转后的界面如下:

在这里插入图片描述

3: 关闭蓝牙

private void closeBluetooth(){
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (bluetoothAdapter.isEnabled()) {
        bluetoothAdapter.disable();
    }
}

关闭蓝牙同样会有弹框提示,如下:

在这里插入图片描述

4: 扫描蓝牙设备

这里其实分为两部分 发现设备以及查找已配对设备.

首先,我们先讲下发现设备,这里需要调用bluetoothAdapter.startDiscovery(). 该进程是异步的,并返回一个布尔值,指示发现是否已成功启动。发现过程通常涉及大约 12 秒的查询扫描,随后会对发现的每台设备进行页面扫描,以检索其蓝牙名称。

其次我们需要注册相关的broadcast ,来接收扫描的结果.

具体的代码如下:

private final BroadcastReceiver receiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Discovery has found a device. Get the BluetoothDevice
            // object and its info from the Intent.
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            String deviceName = device.getName();
            String deviceHardwareAddress = device.getAddress(); // MAC address
            Log.d(TAG, "onReceive: deviceName:"+deviceName+"; deviceHardwareAddress:"+deviceHardwareAddress);
        }
    }
};
private void registerBluetoothCast(){
    // Register for broadcasts when a device is discovered.
    //Requires {@link android.Manifest.permission#BLUETOOTH} and
    //{@link android.Manifest.permission#ACCESS_COARSE_LOCATION
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(receiver, filter);
}

需要注意的是权限上需要注册:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
//发现设备
Log.d(TAG, "onClick: startDiscovery");
bluetoothAdapter.startDiscovery();

执行后具体的输出如下:

2023-12-12 14:34:33.706 11287-11287/com.test.bluetooth D/bluetoothAdapter: onClick: startDiscovery
2023-12-12 14:34:33.706 11287-11287/com.test.bluetooth D/BluetoothAdapter: startDiscovery(): called by: com.test.bluetooth
2023-12-12 14:34:33.707 11287-11287/com.test.bluetooth D/BluetoothAdapter: 210428169: getState(). Returning ON
2023-12-12 14:34:33.779 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName:vivo TWS 2; deviceHardwareAddress:CC:xx:xx:xx:xx:92
2023-12-12 14:34:33.780 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName:null; deviceHardwareAddress:3F:xx:xx:xx:xx:90
2023-12-12 14:34:34.052 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName:OPPO A95 5G; deviceHardwareAddress:30:xx:xx:xx:xx:9C
2023-12-12 14:34:34.351 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName: iMac; deviceHardwareAddress:88:xx:xx:xx:xx:BF
2023-12-12 14:34:34.366 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName:MacBook Pro; deviceHardwareAddress:74:xx:xx:xx:xx:49

获取已配对设备:

    private void getBindDevices(){
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            // There are paired devices. Get the name and address of each paired device.
            for (BluetoothDevice device : pairedDevices) {
                String deviceName = device.getName();
                String deviceHardwareAddress = device.getAddress(); // MAC address
                Log.d(TAG, "bind: deviceName:"+deviceName+"; deviceHardwareAddress:"+deviceHardwareAddress);
            }
        }else{
            Log.d(TAG, "bind devices 0");
        }
    }

2023-12-12 14:47:21.792 12229-12229/com.test.bluetooth D/BluetoothAdapter: 258056678: getState(). Returning ON
2023-12-12 14:47:21.793 12229-12229/com.test.bluetooth D/bluetoothAdapter: bind: deviceName:夏沫; deviceHardwareAddress:50:xx:xx:xx:xx:5A

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消息队列kafka详解:Kafka架构介绍

一. 工作流程 Kafka中消息是以topic进行分类的&#xff0c;Producer生产消息&#xff0c;Consumer消费消息&#xff0c;都是面向topic的。 Topic是逻辑上的改变&#xff0c;Partition是物理上的概念&#xff0c;每个Partition对应着一个log文件&#xff0c;该log文件中存储的就…

智能优化算法应用:基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.花授粉算法4.实验参数设定5.算法结果6.参考文…

C++学习笔记(十一)------has_a和use_a关系

文章目录 前言 一、has_a关系 1.1 has_a概念 1.2 has_a中构造和析构的顺序 1.3 has_a对象的内存情况 二、use_a关系&#xff08;友元关系&#xff09; 1.友元函数&#xff1a; 2.友元类 3 使用多文件编程的方式重新编辑上述代码 总结 前言 随着技术的革新&#xff0c;出现各种各…

信奥赛 1310:【例2.2】车厢重组

本题解析&#xff1a;根据上述的要求&#xff0c;转化为程序的解题方案&#xff0c;就是用到了冒泡排序。本题中求的是旋转次数&#xff0c;实际上就是冒泡排序中交换的次数。 本题考察的知识点是&#xff1a;冒泡排序的用法。 参考代码&#xff1a; 上述代码仅供参考&#xff…

Vue学习计划-Vue2--VueCLi(四)组件传值和自定义事件

1. 组件传值 组件化编码流程&#xff1a; 拆分静态组件&#xff1a;组件要按照功能点拆分&#xff0c;命名不要与html元素冲突实现动态组件&#xff1a;考虑好数据的存放位置&#xff0c;数据是一个组件在用&#xff0c;还是一些组件在用&#xff1a; 一个组件在用&#xff0c…

Git 硬重置之后恢复历史提交版本

****硬重置之前一定要备份分支呀&#xff0c;谨慎使用硬重置&#xff0c;特别是很多人一起使用的分支**** 如果你在reset的时候选择了Hard选项&#xff0c;也就是硬重置 重置完且push过&#xff0c;那么被你本地和远端后面的提交记录肯定就会被抹去。 解决办法&#xff1a; …

TypeScript入门实战笔记 -- 01 如何快速搭建 TypeScript 学习开发环境?

&#x1f34d;IDE for TypeScript 在搭建 TypeScript 环境之前&#xff0c;我们需要先认识几款适合 TypeScript 的 IDE。只有这样&#xff0c;在开发时我们才能根据实际情况选择合适的 IDE 进行安装&#xff0c;从而提升工作效率。 VS Code Visual Studio Code&#xff08;VS C…

Win11专业版,eNSP启动失败,错误代码40 解决方法

微软Win11系统默认开启的 Virtualization-based Security &#xff08;VBS&#xff09;“基于虚拟化的安全性”会导致游戏、跑分性能下降。VBS 基于虚拟化的安全性&#xff0c;通常称为内核隔离。使用硬件虚拟化在内存中创建安全区域&#xff0c;为其他安全功能提供了一个安全平…

parser

"typescript-eslint/parser": "5.56.0", "vue-eslint-parser": "9.1.0", 代码来自ruoyi-plus vue-eslint-parser是一个专门用于解析Vue.js单文件组件&#xff08;.vue文件&#xff09;的ESLint插件。ESLint是一个用于检查和修复Java…

Python接口自动化浅析requests请求封装原理

以下主要介绍如何封装请求 还记得我们之前写的get请求、post请求么&#xff1f; 大家应该有体会&#xff0c;每个请求类型都写成单独的函数&#xff0c;代码复用性不强。 接下来将请求类型都封装起来&#xff0c;自动化用例都可以用这个封装的请求类进行请求 将常用的get、p…

[ESXi 5/6/7/8]设置 ESXi DCUI 欢迎消息

目录 1. ESXi默认设置2. 设置欢迎消息 MOTD2.1 使用GUI设置2.2 使用 ESXCLI 命令设置使用 esxcli 移除欢迎消息 参考资料 配置在 ESXi 直接控制台用户界面 (DCUI) 中显示的欢迎消息&#xff0c;并验证配置是否处于只读模式 Annotations.WelcomeMessage 是ESXi的高级系统设置&am…

Unity中的ShaderToy

文章目录 前言一、ShaderToy网站二、ShaderToy基本框架1、我们可以在ShaderToy网站中&#xff0c;这样看用到的GLSL文档2、void mainImage 是我们的程序入口&#xff0c;类似于片断着色器3、fragColor作为输出变量&#xff0c;为屏幕每一像素的颜色&#xff0c;alpha一般赋值为…

CSS Grid布局入门:从零开始创建一个网格系统

CSS Grid布局入门&#xff1a;从零开始创建一个网格系统 引言 在响应式设计日益重要的今天&#xff0c;CSS Grid布局系统是前端开发中的一次革新。它使得创建复杂、灵活的布局变得简单而直观。本教程将通过分步骤的方式&#xff0c;让你从零开始掌握CSS Grid&#xff0c;并在…

【NLP】RAG 应用中的调优策略

​ 检索增强生成应用程序的调优策略 没有一种放之四海而皆准的算法能够最好地解决所有问题。 本文通过数据科学家的视角审视检索增强生成&#xff08;RAG&#xff09;管道。它讨论了您可以尝试提高 RAG 管道性能的潜在“超参数”。与深度学习中的实验类似&#xff0c;例如&am…

MyBatisPlus简介

1 简介 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 2、特性 无侵入 只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑…

Java+Swing: 从数据库中查询数据并显示在表格中 整理11

分析&#xff1a;要想从数据库中查询数据并分页展示到表格中&#xff0c;我觉得应该按照这个思路&#xff1a;首先就是发起请求&#xff0c;此时需要向数据库中传递三个参数&#xff1a;当前页码&#xff08;pageNum&#xff09;、每一页的数量&#xff08;pageSize&#xff09…

无代码开发让合利宝支付与CRM无缝API集成,提升电商用户运营效率

合利宝支付API的高效集成 在当今快速发展的电子商务领域&#xff0c;电商平台正寻求通过高效的支付系统集成来提升用户体验和业务处理效率。合利宝支付&#xff0c;作为中国领先的支付解决方案提供者&#xff0c;为电商平台提供了一个高效的API连接方案。这种方案允许无代码开…

项目计划书

项目开发计划包括项目描述、项目组织、成本预算、人力资源估算、设备资源计划、沟通计划、采购计划、风险计划、项目过程定义及项目的进度安排和里程碑、质量计划、数据管理计划、度量和分析计划、监控计划和培训计划等。 软件全套资料获取&#xff1a;点我获取

炫酷CSS加载动画

HTML结构 首先是HTML代码&#xff0c;定义了一个类名container的<div>容器&#xff1a; 1.在这个容器里面包含了一些加载器.loader&#xff0c;每个加载器都具有不同的旋转角度自定义属性--r(1~4)&#xff0c;而每个加载器里面有20个<span>元素&#xff0c;并且也都…

vue编辑页面提示 this file does not belong to the project

背景 打开vue项目工程 文件夹被锁定&#xff08;有黄色背景&#xff09;&#xff0c;编辑页面时&#xff0c;报错。 报错提示&#xff1a; vue编辑页面提示 this file does not belong to the project 原因 一不下心打开了错误的文件包 解决方案 1、删除.idea文件夹 2、…