Android中蓝牙的基本使用----BluetoothAdapter类简介

蓝牙连接BluetoothAdapter Android中使用的蓝牙分为两种,蓝牙2.0和BLE(蓝牙4.0及以上版本)。 蓝牙2.0有效距离为小于等于10米,传输速度最大375KB/s,连接建立时间6s。 BLE有效距离为小于等于100米,传输速度最大3MB/s,连接建立时间2s。 阅读详情
AI摘要

本文介绍了Android中BluetoothAdapter和BluetoothDevice的基本应用,包括开关蓝牙、扫描设备、获取蓝牙信息及蓝牙相关广播的监听。

                                                                     

 

                                                                                    本文原创, 转载请注明出处:http://blog.youkuaiyun.com/qinjuning



     天气逐渐热了,自己也越来越懒了,虽然看着了很多东西,解决了很多问题,有些收获却不想写着。主要有一下两方面原因:

  

         第一、以前写的一些关于Android知识的Blog,都是在学习过程中发现网络上没有相关知识,因此下了很大决心,才一步

                一步码字儿给贴出来。承蒙各位网友的厚爱,本博客还是有些底子的。

         第二、最近的工作态度发生了改变,不在像那么以前充满热情,充满力量,就着问题解决问题,自己都有点耐烦了。心里

                寻思着,也许是该改变些什么了吧。

 

      新的手机项目,又开始从事之前的Settings模块了,现在看看Settings模块,没有了最开始的那种心虚,还是觉得挺熟悉的。

  就是代码量太多了,看着有点头大。

 

      好吧。我们废话就介绍到此了,下面开始正文。本节主要介绍蓝牙—BluetoothAdapter的一些基本应用,一些简单的Android 

  API的使用。

 

 

   一、 BluetoothAdapter类介绍

 

        BluetoothAdapter类简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象,通过它我们可以蓝牙设备进行基本

    开发了,主要有如下功能:

             1、开关蓝牙设备

             2、扫描蓝牙设备

             3、设置/获取蓝牙状态信息,例如:蓝牙状态值、蓝牙Name、蓝牙Mac地址等;

 

 

     由于网络上关于BluetoothAdapter的一些常用API函数都有了介绍,因此,我着重介绍一些BluetoothAdapter类疏忽的地方。

 

     1、BluetoothAdapter STATE 状态值 , 即开关状态


              int STATE_OFF        蓝牙已经关闭

              int STATE_ON        蓝牙已经打开

              int STATE_TURNING_OFF      蓝牙处于关闭过程中 ,关闭ing

              int STATE_TURNING_ON        蓝牙处于打开过程中 ,打开ing

 

            


                  上图中 , 红色线路图表示蓝牙由关闭状态 转向为打开状态的过程 ;

                                 蓝色线路图表示蓝牙由打开状态 转向为关闭状态的过程 ;

 


    2、BluetoothAdapter  SCAN_MOD状态值 ,即扫描状态

            首先说明,可以扫描其他设备的,当然它同时能被其他蓝牙设备扫码。

 

         int  SCAN_MODE_CONNECTABLE         表明该蓝牙可以扫描其他蓝牙设备

         int  SCAN_MODE_CONNECTABLE_DISCOVERABLE    

                        表 明该蓝牙设备同时可以扫码其他蓝牙设备,并且可以被其他蓝牙设备扫描到。

         int  SCAN_MODE_NONE : 该蓝牙不能扫描以及被扫描。

 

    3、获得蓝牙适配器实例

  

       public static synchronized BluetoothAdapter getDefaultAdapter ()

           功能:获得本设备的蓝牙适配器实例。

           返回值:如果设备具备蓝牙功能,返回BluetoothAdapter 实例;否则,返回null对象。

 

 

    4、打开/关闭蓝牙的两种方法:

 

         4.1、打开蓝牙:

            ①、直接调用函数enable()去打开蓝牙设备 ;

            ②、系统API去打开蓝牙设备,该方式会弹出一个对话框样式的Activity供用户选择是否打开蓝牙设备。

                    注意:如果蓝牙已经开启,不会弹出该Activity界面。

 

        PS:在目前Android手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关状态会随着飞行模式

 的状态而发生改变。

 

       代码示例分别如下:

 

//第一种打开方法: 调用enable 即可
boolean result = mBluetoothAdapter.enable();

//
/第二种打开方法 ,调用系统API去打开蓝牙
if (!mBluetoothAdapter.isEnabled()) //未打开蓝牙,才需要打开蓝牙
{
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, REQUEST_OPEN_BT_CODE);
//会以Dialog样式显示一个Activity , 我们可以在onActivityResult()方法去处理返回值
}

        4.2、关闭蓝牙

           直接调用API 函数即disable()即可。

             public  boolean disable ()

               功能:关闭蓝牙设备。

               返回值:该函数会立即返回。

                            true    表示关闭操作成功

                           false   表示蓝牙操作失败 , ①、当前蓝牙已经关闭 ;  ②、其他一些异常情况

 

 

   5、扫描蓝牙设备


      public boolean startDiscovery () 

          功能: 扫描蓝牙设备

          注意: 如果蓝牙没有开启,该方法会返回false ,即不会开始扫描过程。


      public  boolean cancelDiscovery ()

         功能: 取消扫描过程。

         注意: 如果蓝牙没有开启,该方法会返回false。


     public boolean isDiscovering ()

        功能: 是否正在处于扫描过程中。

        注意: 如果蓝牙没有开启,该方法会返回false。

 

   6、 获取蓝牙相关信息

 

    public String getName ()

       功能:获取蓝牙设备Name

    public String getAddress ()

       功能:获取蓝牙设备的硬件地址(MAC地址),例如:00:11:22:AA:BB:CC  

   public boolean setName (String name)

     功能:设置蓝牙设备的Name,


   public Set<BluetoothDevice> getBondedDevices ()

     功能:获取与本机蓝牙所有绑定的远程蓝牙信息,以BluetoothDevice类实例(稍后讲到)返回。

     注意:如果蓝牙为开启,该函数会返回一个空集合 。


  public static boolean checkBluetoothAddress (String address)

     功能: 验证蓝牙设备MAC地址是否有效。所有设备地址的英文字母必须大写,48位,形如:00:43:A8:23:10:F1 。

     返回值: true 设备地址有效

                   false 设备地址无效


 public BluetoothDevice getRemoteDevice (String address)

      功能:以给定的MAC地址去创建一个 BluetoothDevice 类实例(代表远程蓝牙实例)。即使该蓝牙地址不可见,也会产生

          一个BluetoothDevice 类实例。

      返回:BluetoothDevice 类实例 。注意,如果该蓝牙设备MAC地址不能被识别,其蓝牙Name为null。

          异常:如果MAC  address无效,抛出IllegalArgumentException。

 

 7、蓝牙相关广播


             Action值                                                说明


      ACTION_STATE_CHANGED                    蓝牙状态值发生改变

      ACTION_SCAN_MODE_CHANGED         蓝牙扫描状态(SCAN_MODE)发生改变

      ACTION_DISCOVERY_STARTED             蓝牙扫描过程开始

      ACTION_DISCOVERY_FINISHED             蓝牙扫描过程结束

      ACTION_LOCAL_NAME_CHANGED        蓝牙设备Name发生改变

      ACTION_REQUEST_DISCOVERABLE       请求用户选择是否使该蓝牙能被扫描

                PS:如果蓝牙没有开启,用户点击确定后,会首先开启蓝牙,继而设置蓝牙能被扫描。

      ACTION_REQUEST_ENABLE                  请求用户选择是否打开蓝牙

 

      ACTION_FOUND  (该常量字段位于BluetoothDevice类中,稍后讲到)

                说明:蓝牙扫描时,扫描到任一远程蓝牙设备时,会发送此广播。

 

         通过注册这个广播,我们可以获取扫描到的蓝牙信息。方法如下:

//扫描到了任一蓝牙设备
if(BluetoothDevice.ACTION_FOUND.equals(intent.getAction()))
{
   Log.v(TAG, "### BT BluetoothDevice.ACTION_FOUND ##");
                
   BluetoothDevice btDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                
   if(btDevice != null){
        Log.v(TAG , "Name : " + btDevice.getName() + " Address: " + btDevice.getAddress());
                    
   }
   else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction()))
   {
        Log.v(TAG, "### BT ACTION_BOND_STATE_CHANGED ##");
                
        int cur_bond_state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_NONE);
        int previous_bond_state = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.BOND_NONE);
                
                
        Log.v(TAG, "### cur_bond_state ##" + cur_bond_state + " ~~ previous_bond_state" + previous_bond_state);
    }
}

              

 

      最后,关于这些广播的Intent信息,还有很多附加值,大家可以去看看Android SDK。

 

 

 

      更多关于BluetoothAdapter类的API介绍,请参考农民伯伯的博客:

                   《Android 中文API (69) —— BluetoothAdapter[蓝牙]》



      最后,在使用这两个类时,需要以下两个权限:             

        BLUETOOTH                    值为  "android.permission.BLUETOOTH"
        BLUETOOTH_ADMIN      值为 "android.permission.BLUETOOTH_ADMIN"



二、 BluetoothDevice类介绍

 

    该类就是关于远程蓝牙设备的一个描述。通过它可以和本地蓝牙设备---BluetoothAdapter连接通信。

 

    1、 蓝牙绑定(Bound)状态 , 即蓝牙设备是否与其他蓝牙绑定

     

       int   BOND_BONDED       表明蓝牙已经绑定

       int   BOND_BONDING     表明蓝牙正在绑定过程中 , bounding

       int   BOND_NONE           表明没有绑定

 

 

    更多关于BluetoothDevice类的更多介绍,请参考该农民伯伯的该篇博客:

                   《Android 中文API (70) —— BluetoothDevice[蓝牙]》

 

     我也不再啰嗦了。

 


       下面贴出一个小Demo吧,挺简单的,也就是关蓝牙API的基本操作和蓝牙相关广播的监听,处于显示目的方便性,本文对

    蓝牙相关信息的获取,都通过Log输出。请大家注意。 截图如下:

                                              

                                      


        代码什么的就不在张贴了,只是帮助大家学习过程中减少工作量而已,别无其他。


        示例代码下载地址为:


                 http://download.youkuaiyun.com/detail/qinjuning/4417003

      

       最后关于如果连接某个蓝牙设备,就需要利用蓝牙部分的隐藏API了,关于这方面,大家可以看看hellogv的博客:

         

                     《Android提高第十三篇之探秘蓝牙隐藏API》

  

       

      目前还没有机会研究这方面知识,以后会尝试的。 Good luck for U !





        

   

【蓝牙】BluetoothAdapter详解 BluetoothAdapter简介 BluetoothAdapter代表本地蓝牙设备适配器。BluetoothAdapter可以让我们执行基本的蓝牙任务,如发现蓝牙,查询蓝牙已配对列表,通过已知的MAC地址初始化一个BluetoothDevice实例,并且创建一个BluetoothServerSocket来监听其它设备的请求,启动蓝牙低功耗设备扫描等。 要获取代表本地蓝牙适配器Bluetoot... 阅读详情

相关推荐

Android 蓝牙——基础开发(三)

蓝牙开发这部分主要以 APP 端调用功能接口为开始,到 Framework 端的调用流程,最后到调用状态机结束,不涉及蓝牙协议栈的开发分析。

小旭的专栏 1749

蓝牙 - 什么是Bluetooth Adapter或Dongle,以及Microsoft Bluetooth Enumerator

一般笔记本是都有蓝牙模块的,台式机可能会没有,这时就需要一个蓝牙Dongle,或者叫做蓝牙Adapter,下面统称为蓝牙适配器。2,Mac里,左上角点击苹果图标,选择"About this Mac" -> "System Report",再点开Hardware硬件标签,查找蓝牙标记,如果找不到,就是没有蓝牙功能。1,Windows里,点击开始菜单,然后找到并打开设备管理器"Device Manager",寻找蓝牙图标,如果找到了,说明你的电脑内置了蓝牙功能,否则就是没有。同样的,这个组件也没有可配置项。

guoqx的专栏 1万+

AI协议助手:法律文本解析与智能问答技术解析

自然语言处理(NLP)技术在法律文本解析中展现出巨大潜力,通过BERT等预训练模型实现条款分类与语义理解。结合OCR与知识图谱技术,AI协议助手能快速提取合同核心条款,并以问答形式解释法律术语,显著提升商务场景的决策效率。测试数据显示,该系统对NDA协议的识别准确率达92%,响应时间仅1.2秒,特别适用于人力资源竞业协议、云服务SLA评估等场景。随着RAG架构与法律术语向量库的应用,AI+法律正推动合同审核成本下降67%,未来将在跨境合规、智能谈判等方向持续演进。

weixin_29053577的博客 131

【Android 应用开发】BluetoothAdapter解析

这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐藏方法, 每个常量含义.

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1万+

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 491

从零到一:ESP32-P4 PPA加速的配置陷阱与避坑指南

本文详细解析ESP32-P4结合LVGL的PPA硬件加速配置中的常见陷阱,包括内存对齐、缓冲区设置和同步机制等关键问题。提供实用的避坑指南和优化方案,帮助开发者高效启用esp32p4的PPA加速功能,显著提升图形渲染性能。

sky77的博客 396

android 蓝牙相关的类,Android中BluetoothAdapter类简介

一、BluetoothAdapter类介绍BluetoothAdapter类简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象,通过它我们可以蓝牙设备进行基本开发了,主要有如下功能:1、开关蓝牙设备2、扫描蓝牙设备3、设置/获取蓝牙状态信息,例如:蓝牙状态值、蓝牙Name、蓝牙Mac地址等;由于网络上关于BluetoothAdapter的一些常用API函数都有了介绍,因此,我着重介绍一些B...

weixin_34580939的博客 1461

告别专业软件!用QGIS+GDAL免费搞定S-57电子海图,附全套符号库和样式文件

本文详细介绍了如何利用免费开源工具QGIS和GDAL处理S-57电子海图,包括数据转换、符号库配置和专业可视化方案。通过实战指南,用户无需依赖昂贵的商业软件,即可实现从S-57到SHP的转换及专业级海图制作,特别适合预算有限的个人和小型机构。

weixin_33701294的博客 391

Android蓝牙API之BluetoothAdapter类

使用BluetoothAdapter类,你能够在Android设备上查找周边 的蓝牙设备然后配对(绑定),蓝牙通讯是基于唯一地址MAC来相互传输的,考虑到安全问题Bluetooth通讯时需要先配对。然后开始相互连接,连接后 设备将会共享同一个RFCOMM通道以便相互传输数据,目前这些实现在Android 2.0或更高版本SDK上实现。一、查找发现 findding/discovering devices对于Android查找发现蓝牙设备使用BluetoothAdapter类的startDiscovery

╰☆╮EvilCode的专栏╭☆╯ 2303

jira的详细使用教程

​jira的详细使用教程,1,Jira- 是一款缺陷管理软件工具,用其进行缺陷的管理和跟踪。(是B/S架构的软件) 2,主要涉及的角色: 3,具体工作流 添加工作流 1.点击项目设置

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3295

用python画带有正负值的条形图

常见的条形图只能表现数据的大小,却不能表现值的正负关系。但是其实仅仅使用`pandas`和`matplotlib`两个包就可以实现y轴负轴的添加以及负值的显示,并且可以为正负值分别设置不同的颜色,让条形图看上去更加清晰,易于我们分析

weixin_44853840的博客 5384

Android中蓝牙的基本应用--BluetoothAdapter类

一、 BluetoothAdapter类介绍           BluetoothAdapter类简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象,通过它我们可以蓝牙设备进行基本     开发了,主要有如下功能:              1、开关蓝牙设备              2、扫描蓝牙设备              3、设置/获取蓝牙状态信息,

maggie_lu 3447

Android 蓝牙——概述(一)

Profiles (蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles:MAP:(MessageAccessProfile),短信访问协议,允许设备间的信息交换,短信。使用场景:智能车载中同步短信等信息。HFP:(Hands-free Profile),电话免提协议,让蓝牙设备(如蓝牙耳机/车机)可以控制电话,如接听、挂断、拒接等。

小旭的专栏 3492

Android 蓝牙API之BluetoothAdapter类使用

使用BluetoothAdapter类,你能够在Android设备上查找周边的蓝牙设备然后配对(绑定),蓝牙通讯是基于唯一地址MAC来相互 传输的,考虑到安全问题Bluetooth通讯时需要先配对。然后开始相互连接,连接后设备将会共享同一个RFCOMM通道以便相互传输数据,目前这些实 现在Android 2.0或更高版本SDK上实现。一、查找发现 findding/discoveri...

weixin_33947521的博客 201

华为OD机试 - 计算误码率(Python/JS/C/C++ 双机位C卷 100分)

移动通信 网络中的误码率主要是指比特误码率,其计算公式如下:比特误码率 = 错误比特数 / 传输总比特数,为了简单,我们引入字符串来表示误码通信的信息,一个字符错误了,就认为出现了一个误码。我们需要将这两个压缩字符串解压成实际的字符序列,然后逐位比较它们,统计误码(不同字符)的数量。题目给出两个经过压缩编码的字符串,通过解压缩后需要判断两个字符串在解压后的误码率,即对应位置不同的字符数量占总字符数量的比例。输入一个标准的字符串,和一个传输前的字符串,计算误码率。两个解压后的字符串完全相同,没有错误字符。

学Java,找哪吒 2195

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android蓝牙API之BluetoothAdapter类(1)

使用BluetoothAdapter类,你能够在Android设备上查找周边的蓝牙设备然后配对(绑定),蓝牙通讯是基于唯一地址MAC来相互传输的,考虑到安全问题Bluetooth通讯时需要先配对。然后开始相互连接,连接后设备将会共享同一个RFCOMM通道以便相互传输数据,目前这些实现在Android 2.0或更高版本SDK上实现。  一、查找发现 findding/discovering de

血色残阳的专栏 1274

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: JNI学习积累之三 ---- 操作JNI函数以及复杂对象传递
下一篇: Android中View绘制优化之一---- 优化布局层次
qinjuning
博客等级 码龄18年 5288粉丝 43原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值