android Bluetooth蓝牙技术出体验

Android下bluedroid、bluetooth apk介绍 前言本文档主要介绍android平台下bluetooth的应用层软件,先介绍bluetooth应用层的框架,接着分别介绍Bluedroid层软件、Bluetooth应用程序(Bluetooth.apk),Bluetooth framework层,最后完整分析一些蓝牙的操作流程。基于android 5.1的平台,涉及的bluetooth硬件为realtek的蓝牙。文档主要针对蓝牙的初学者,提供基础的学 阅读详情

转自:http://www.jb51.net/article/79334.htm

1.Bluetooth包简介

Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信的蓝牙API。总共有8个类,常用的四个类如下:
BluetoothAdapter类
代表了一个本地的蓝牙适配器。它是所有蓝牙交互的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接。
BluetoothDevice类
代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态(其信息是封装在BluetoothSocket中)。
BluetoothSocket类
代表了一个蓝牙套接字的接口(类似于TCP中的套接字),它是应用程序通过输入、输出流与其他蓝牙设备通信的连接点。
BlueboothServerSocket类
代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。当远端设备发起连接连接请求的时候,并且已经连接到了的时候,BlueboothServerSocket类将会返回一个BluetoothSocket。

2.常用类的使用

BluetoothAdapter:蓝牙适配器

cancelDiscovery()取消探索,当我们正在搜索设备的时候调用这个方法将不再继续搜索
disable()关闭蓝牙
enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候我们需要问下用户是否打开,以下两行代码同样是打开蓝牙,但会提示用户:
Intentenabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(enabler);
getAddress()获取本地蓝牙地址
getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdapter
getName()获取本地蓝牙名称
getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备
getState()获取本地蓝牙适配器当前状态
isDiscovering()判断当前是否正在查找设备,是则返回true
isEnabled()判断蓝牙是否打开,已打开返回true,否则返回false
listenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步
startDiscovery()开始搜索,这是搜索的第一步

BluetoothDevice:远程蓝牙设备

createRfcommSocketToServiceRecord(UUIDuuid)根据UUID创建并返回一个BluetoothSocket,这个方法也是我们获取BluetoothDevice
的目的——创建BluetoothSocket
这个类其他的方法,如getAddress()、getName()等,同BluetoothAdapter。

BluetoothSocket:客户端

//这个类一共有6个方法
close()关闭
connect()连接
isConnected()判断是否连接
getInptuStream()获取输入流
getOutputStream()获取输出流
getRemoteDevice()获取BluetoothSocket指定连接的远程蓝牙设备

BluetoothServerSocket:服务端

//这个类一共有4个方法
accept()
accept(int timeout)
close()关闭
getChannel()返回这个套接字绑定的通道

3.数据传输

蓝牙数据传输——服务器端

1、获得BluetoothAdapter。
2、 通过BluetoothAdapter.listenUsingRfcommWithServiceRecord(name,UUID uuid)方法创建BluetoothServerSocket对象。
3、通过luetoothServerSocket.accept()方法返回一个BluetoothSocket对象。由于该方法处于阻塞状态,需要开启线程来处理。
4、通过BluetoothSocket.getInputStream()和BluetoothSocket.getOutputStream()方法获得读写数据的InputStream和OutputStream对象。
5、通过InputStream.read()方法来读数据。通过OutputStream.write()方法来写数据。

蓝牙数据传输——客户端

1、获得BluetoothAdapter。
2、通过BluetoothAdapter.getRemoteDevice(String address)获得指定地址的BluetoothDevice对象。
3、通过BluetoothDevice.createRfcommSocketToServiceRecord (UUID uuid)方法创建BluetoothSocket对象。
4、通过BluetoothSocket.connect()方法来连接蓝牙设备。
5、通过BluetoothSocket.getInputStream()和BluetoothSocket.getOutputStream()方法获得读写数据的InputStream和OutputStream对象。
6、通过InputStream.read()方法来读数据。通过OutputStream.write()方法来写数据。

需要的权限:

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

4.简单的使用

启动蓝牙

首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了。例如:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
// Device does not support Bluetooth
}

其次,调用isEnabled()来查询当前蓝牙设备的状态,如果返回为false,则表示蓝牙设备没有开启,接下来你需要封装一个ACTION_REQUEST_ENABLE请求到intent里面,调用startActivityForResult()方法使能蓝牙设备,例如:

if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
查找设备

使用BluetoothAdapter类里的方法,你可以查找远端设备(大概十米以内)或者查询在你手机上已经匹配(或者说绑定)的其他设备了。当然需要确定对方蓝牙设备已经开启或者已经开启了“被发现使能”功能(对方设备是可以被发现的是你能够发起连接的前提条件)。如果该设备是可以被发现的,会反馈回来一些对方的设备信息,比如名字、MAC地址等,利用这些信息,你的设备就可以选择去向对方初始化一个连接。如下使用广播接收查找到的蓝牙信息:

 private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                 mResult = "";
                BluetoothDevice  mBluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                if (mBluetoothDevice.getBondState() != BluetoothDevice.BOND_BONDED) {

                    mResult += "蓝牙名称: "+mBluetoothDevice.getName()+"\n"+"MAC地址:"+
                            mBluetoothDevice.getAddress()+"\n";

                    Log.i(TAG, "tx: 蓝牙信息:\n" + mResult);
                }
            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))
                Log.i(TAG, "tx: 未查找到设备");
        }
    };

注册广播:

 IntentFilter mFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(mReceiver, mFilter); //在onDestroy时记得注销广播接收器

        // 注册搜索完时的receiver
        mFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        registerReceiver(mReceiver, mFilter);
Android蓝牙技术Bluetooth使用流程(详解) 蓝牙设备之间的通信主要包括了四个步骤设置蓝牙设备 寻找局域网内可能或者匹配的设备 连接设备 设备之间的数据传输具体编程实现1. 启动蓝牙功能首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了。例如:BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDe 阅读详情

相关推荐

Android Bluetooth蓝牙技术基础讲解

一:Bluetooth包简介 Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信的蓝牙API。总共有8个类,常用的四个类如下: BluetoothAdapter类 代表了一个本地的蓝牙适配器。它是所有蓝牙交互的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServ

qq_34057733的博客 664

深入了解Android蓝牙Bluetooth【基础+进阶】

蓝牙发展至今经历了8个版本的更新。当然5.0的蓝牙模块目前Google虽已发布,但是市场上还未见到5.0的蓝牙设备。那么我们就尽请期待5.0蓝牙设备的到来!那么在1.x~3.0之间的我们称之为传统蓝牙,4.x开始的蓝牙我们称之为低功耗蓝牙也就是蓝牙ble,当然4.x版本的蓝牙也是向下兼容的。android手机必须系统版本4.3及以上才支持BLE API。一个主设备比如手机,一个从设备(这里也成为子设备或从机)主动搜索从机 可以发送 也可以接收, 从机也可以发送和接收 但只能被搜索。

m0_70748458的博客 4250

Android 蓝牙——概述(一)

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

小旭的专栏 3492

Android蓝牙技术Bluetooth初体验

一:Bluetooth包简介//Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信的蓝牙API。总共有8个类,常用的四个类如下:BluetoothAdapter类//代表了一个本地的蓝牙适配器。它是所有蓝牙交互的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(

pengkv的专栏 2895

Android蓝牙开发入门到精通:全面解析蓝牙协议与BLE核心技术

蓝牙技术工作于2.4GHz ISM频段,采用跳频扩频技术,在短距离内实现设备间的无线数据交换。其拓扑结构支持点对点(P2P)和星型网络,分为传统蓝牙(BR/EDR)和低功耗蓝牙(BLE)两类,分别适用于高吞吐与低功耗场景。在Android系统中,蓝牙广泛用于无线音频(A2DP)、文件传输(OBEX)、健康监测设备数据采集(如心率传感器通过BLE上报)以及近场配对辅助(如NFC触发蓝牙连接)。

weixin_30299319的博客 1941

全面掌握Android蓝牙技术与应用

蓝牙(Bluetooth)是一种支持设备短距离通信的无线电技术,广泛应用于移动设备、计算机外设、智能穿戴设备等。其核心理念是实现便携性、易用性与无线技术的结合。Android平台内置了对蓝牙技术的支持,使得开发者可以利用系统提供的蓝牙API开发相关应用,从而实现设备间的无线通信和数据交换。在Android平台上,蓝牙功能的实现主要依赖于BluetoothAdapter类,它充当蓝牙适配器的角色,代表了设备上的蓝牙硬件。

weixin_26907223的博客 1008

Android Bluetooth蓝牙技术初体验

转载自 : http://www.jb51.net/article/79334.htm 这篇文章主要介绍了Android Bluetooth蓝牙技术初体验的相关资料,需要的朋友可以参考下 一:Bluetooth包简介 Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信的蓝牙API。总共有8个类,常用的四个类如下

Creeper_san的博客 651

验证码出现getOutputStream()问题解决

验证码出现getOutputStream() has already been called for this response错误解决

安卓蓝牙技术开发笔记

安卓蓝牙技术开发笔记 课前准备 第一章节 蓝牙简介 无线传输方案 WIFI 工作频段:2.4G/5G 有效传输距离10米至数公里 传输速度: 802.11协议族 802.11b 11Mpbs 802.11g 54Mpbs 802.11n 600Mbps 802.11as 1.3Gbps 常用场景,只能家居,无人控制 功耗较高 NFC 近场通讯技术 能在短距离内与兼容设备进行识别和数据交换 短距高频的无线电技术,在13.56MH.

qq_35652070的博客 330

详解Android——蓝牙技术 带你实现终端间数据传输

蓝牙技术在智能硬件方面有很多用武之地,本篇文章主要介绍了Android——蓝牙技术,实现两个终端间数据的传输,有兴趣的朋友可以了解一下。

Android Bluetooth蓝牙技术使用流程详解

在上篇文章给大家介绍了Android Bluetooth蓝牙技术初体验相关内容,感兴趣的朋友可以点击了解详情。 一:蓝牙设备之间的通信主要包括了四个步骤 设置蓝牙设备 寻找局域网内可能或者匹配的设备 连接设备 设备之间的数据传输 二:具体编程实现 1. 启动蓝牙功能 首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器BluetoothAdapter,如果返回为空,则无法继续执行了。例如: BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAda

android蓝牙包,Android Bluetooth蓝牙技术初体验

一:Bluetooth包简介Android平台提供了一个android.bluetooth的包,里面实现蓝牙设备之间通信的蓝牙API。总共有8个类,常用的四个类如下:BluetoothAdapter类代表了一个本地的蓝牙适配器。它是所有蓝牙交互的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(作为服...

weixin_36257663的博客 681

无人机通信电台--XBee-PRO 900HP (S3B)

XBee PRO S3B也称为XBee-900HP无线模块,它是一款工作在频段900~928MHz之间,基于FHSS跳频技术的远距离无线数传电台核心模块。常用型号如下: 类别 型号 开发套件 XKB9-DMT-UHP XBee-PRO 900HP (S3B) DigiMesh模块,200Kbps,软天线 XBP9B-DMWT-002 XBee-PRO 900HP (S3B)...

low米的博客 4505

Android Bluetooth 入门

概述 蓝牙(英语:Bluetooth),一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换数据,以形成个人局域网(PAN)。蓝牙技术当前由蓝牙技术联盟(SIG)来负责维护其技术标准。 版本 分类 蓝牙可分为经典蓝牙(Classic Bluetooth)、低功耗蓝牙(Bluetooth Low Energy)、双模蓝牙三大类。2009 年发布的蓝牙 3.0 及之前的蓝牙版本包括 BR、ED...

weixin_34380948的博客 167

Windows如何使用Anaconda 3进行keras环境的配置

** Windows如何使用Anaconda 3进行keras环境的配置 搭建Keras环境* Anaconda3如何安装keras,主要包括下面三步: 1.安装mingw libpython 2.安装theano 3.安装keras 若你还没有按装anaconda,赶紧下载安装吧! 下载途径有两个 (1)Anaconda版本为Anaconda 4.4.0,对应的python版本为3.6,附上An...

Lance_liangliang的博客 1601

【鼠标在不点击的情况下,直接移动到QT控件上不显示提示信息】

有时明明已经调用了setToolTips方法,鼠标移动到QT控件上仍然不会有提示信息,这时候就需要具体分析下。重点就是标红的这段话,大概意思就是。.h文件中加入鼠标移动事件的定义。.cpp文件中实现该事件。

ZTH_G的博客 2424

探索近在咫尺的交流新方式 - Bluetooth Chat项目推荐

探索近在咫尺的交流新方式 - Bluetooth Chat项目推荐 项目介绍 Bluetooth Chat是一款基于蓝牙技术的即时通讯应用,让一对一的聊天体验焕发新生。这个项目不仅是对新兴编程技术和Android特性的实践场,更是技术创新与用户体验结合的典范。通过它,开发者和用户都能深入探索Kotlin的优雅、MVP架构的力量、依赖注入的便利,以及协程带来的异步处理之美。 项目还拥有一个吸引人...

gitblog_00939的博客 880

云计算学习——5G网络技术

华为eNSP网络设备模拟器的基础安装及简单使用

qq_42520799的博客 1445

Location & Contected devices:Bluetooth

(1)BluetoothDevice.ACTION_FOUND 是一个字符串常量,用于在广播中标识已找到一个蓝牙设备,值是"android.bluetooth.device.action.FOUND"。(2)当你的应用调用BluetoothAdapter的startDiscovery()方法开始扫描附近的蓝牙设备时,每发现一个设备,系统就会发送这个ACTION_FOUND的广播。这个方法需要一个UUID参数,这个UUID必须是你想要连接的远程设备上的蓝牙服务的UUID。

qq_66104156的博客 1112

【以太网硬件十二】以太网端口自协商过程解密之二

简述以太网端口自协商的过程

highman110的博客 2489

寄存器与计数器设计(Verilog)

always @(posedge Reset or posedge Clock)//请在括号中补充敏感信号列表。always @(negedge Resetn , posedge Clock)//请在括号中补充敏感信号列表。always @(negedge Resetn,posedge Clock)//请在括号中补充敏感信号列表。//为了便于自动评测,请勿更改n的值。//为了便于自动评测,请勿更改n的值。//为了便于自动评测,请勿更改n的值。//为了便于自动评测,请勿更改n的值。

M_inherit的博客 362

Android(安卓)干货分享——安卓BLE 蓝牙开发

1 前言 BLE蓝牙的兴起主要因为近年来可穿戴设备的流行。由于传统蓝牙功耗高不能满足可穿戴设备对于续航的要求。所以大部分可穿戴设备采用蓝牙4.0,即BLE蓝牙技术。BLE(Bluetooth Low Energy)低功耗蓝牙,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输。   缺点:BLE蓝牙数据传输速率低,特别是在安卓开发过程,BLE蓝牙一包数据最多为20字节,因此安卓系统下最好不要使用BLE蓝牙传输大量数据。 2 申请权限 安卓手机涉及蓝牙权限问题,蓝牙开发需要在AndroidManifes

tangjianing的博客 1182

组基轨迹建模 GBTM的介绍与实现(Stata 或 R)

组基轨迹建模(Group-Based Trajectory Modeling,GBTM)(旧名称:Semiparametric mixture model)历史:由DANIELS.NAGIN提出,发表文献《Analyzing Developmental Trajectories:A Semiparametric,Group-Based Approach》GBTM能够将一群人的轨迹分类并生成数个具有代表性的运动轨迹模型,然后对每个轨迹模型进行分析,以了解人们的运动特征、生理水平和风险等级等。

三分钟热度 1万+
上一篇: 识别文件中的条形码-zxing
下一篇: listview 中出现的ArrayIndexOutOfBoundsException
txadf
博客等级 码龄12年 16粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值