蓝牙 nfc 怎么配对 pin key

蓝牙 nfc 怎么配对 pin key,第1张

蓝牙耳机连接手机,有如下三种情况连接方法: 第一种,新的蓝牙耳机和手机配对 步骤:开启蓝牙耳机,会自动进入红蓝灯交替闪烁的配对状态。 同时手机开启蓝牙搜索,搜附近的蓝牙设备,搜到此蓝牙耳机点击确认连接。 第二种,蓝牙耳机二次和手机配对 步骤:蓝牙耳机开机状态,长按开关键直到红蓝灯交替闪烁的配对状态。 同时手机开启蓝牙搜索,搜附近的蓝牙设备,搜到此蓝牙耳机点击确认连接。 第三种,蓝牙耳机和手机使用NFC功能连接方法 步骤:一、首先确认你的手机是否具有NFC功能(近场通讯协议)。 二、 打开你手机中的NFC功能的同时,耳机背部有标志的部分轻触手机背面。三、手机会出现此蓝牙耳机,点击确定,直接完成手机同蓝牙的连接。 参考如下示意图: 注意:手机和蓝牙耳机之间有效的使用距离是一0米内,超过会失去信号,断开连接

苹果在原生的CoreBluetooth中,将设备的Mac进行了封装(通过外设的Mac地址和手机的Mac地址进行了加密计算),最后对外提供了一个UUID,在一台手机上,一般情况,UUID就可以作为这个外设的唯一标识了,但是如果换了一台手机的话,可能就会发生变化,所以如果需求是需要在多台手机上的话,UUID可能就不太实用了。

蓝牙的Mac地址可以加到蓝牙的广播包里,但是这样的话对硬件来说负担很大而且芯片也不稳定,也可以将蓝牙的Mac地址写在蓝牙设备系统的sevrice 里 。我们的需求是在通过Mac地址连接蓝牙设备,所以必须在连接蓝牙之前获取蓝牙的Mac地址。

通过广播包获取Mac地址

在这个代理方法我们可以拿到一个advertisementData,这个字典类型的就是广播包,这里面会有一些设备的属性,比如设备的名字啊,服务等。但是只有kCBAdvDataManufacturerData这个key是可以放入信息的,硬件工程师可以将Mac地址写到这个字段里去。

安卓系统蓝牙配对流程分析

配对流程基本上始于首次连接一个蓝牙设备的过程中,本端的搜索流程结束获取到该设备的BluetoothDevice信息,就可以开启配对流程。

配对,顾名思义就是将两个设备通过相关技术进行绑定,达到能够互相识别彼此的目的。因此通过蓝牙技术进行的配对就是大家理解中的蓝牙配对。随着蓝牙技术在消费市场上越来越普及,生活中很容易就能遇到蓝牙配对这一使用蓝牙功能事必不可缺失的步骤。本期我们就简单聊聊安卓系统蓝牙配对的流程是如何运行的。

Application通过framework层BluetoothDevice对外提供的接口createBond()开启这一流程。createBondOutOfBand()通过OOB技术进行配对的接口,一般很少使用。所以应用层需要根据自己的实际使用场景选择正确的接口。

蓝牙服务层在配对流程中基本没有复杂的 *** 作,只是简单地下发指令成功后,通过JNI层的异步回调处理配对状态变化并将该变化对外广播。其时序图如下:

从上图我们唯一需要注意的点就是配对流程开始前需要停掉搜索扫描流程(如果底层正在进行该流程),增加该 *** 作的主要目的是为了确保配对流程能够正常进行。因为搜索扫描和配对流程都会对远端设备进行Discovery *** 作,防止这两个流程冲突导致配对失败。

协议栈接收到开始配对指令后,主要按照如下的配对状态机进行切换(Numeric Comparison模式):

IDLE:初始状态值GET_REM_NAME:获取远端设备的蓝牙名字WAIT_PIN_REQ:等待Controller请求PIN码WAIT_LOCAL_IOCAPS:等待本端提供IO能力WAIT_NUM_CONFIRM:等待本端Host确认配对WAIT_AUTH_COMPLETE:等待鉴权(配对)流程完成

状态切换对应到HCI上的交互见下图:

每一个配对状态的切换触发时机从上面这张图就十分明了,这里我就不做过多分析。感兴趣的同学可以尝试跟着上图中HCI命令跟踪下代码流程。

协议栈的配对状态随着鉴权完成事件Authentication Complete的上报就切换到初始值了,那这时是不是就代表整个配对流程完成了呢?非也,其实在安卓系统中到这里还不代表配对已经完成,因为上报JNI层的配对状态变化回调并不是通过鉴权完成事件上报完成而回调的。

配对流程的主要工作完成后,协议栈还会继续对该设备尝试进行SDP服务发现,搜索该设备支持哪些协议服务,SDP服务搜索完成后才会上报JNI层配对状态变成Bonded。

触发SDP服务搜索的触发时机是处理上报Link Key的回调bta_dm_new_link_key_cback()中通过 event = BTA_DM_AUTH_CMPL_EVT触发的。

随后在函数btif_dm_auth_cmpl_evt()中尝试对该设备进行SDP服务发现,如下图:

SDP服务发现完成后通过回调处理函数btif_dm_search_services_evt()中 event = BTA_DM_DISC_RES_EVT上报JNI 层配对状态变化到Bonded。

至此安卓系统中蓝牙配对流程才算闭环完成,上述过程我以Numeric Comparison配对模型为依据介绍了整个流程,其他配对模型类似,就不一一做出说明了,但协议栈配对状态机的全部值如下,其他模型的配对流程也是在这几种状态机组合下进行切换运行的:

配对流程实际上并不是孤立而存在的,配合着搜索扫描、连接等流程共同起作用的,彼此依赖,缺一不可。

本期的分享就到这里,感兴趣的小伙伴欢迎私信留言一起讨论。

不是。登录农信社手机银行app,进入后在右上角设置里面选择使用蓝牙Ukey支付方式,在正常 *** 作步骤时选择一个需要连接的手机蓝牙,这个必须是个人手机进行链接,不是使用别人的手机。这里就会显示一个密码,不需要输入,只需要点击配对成功连接了即可。

转载 Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输。本文档描述了怎样利用android平台提供的蓝牙API去实现蓝压设备之间的通信。蓝牙具有point-to-point 和 multipoint两种连接功能。

使用蓝牙API,可以做到:

搜索蓝牙设备

从本地的Bluetooth adapter中查询已经配对的设备

建立RFCOMM通道

通过service discovery连接到其它设备

在设备之间传输数据

管理多个连接

基础知识

本文档介绍了如何使用Android的蓝牙API来完成的四个必要的主要任务,使用蓝牙进行设备通信,主要包含四个部分:蓝牙设置、搜索设备(配对的或可见的)、连接、传输数据。

所有的蓝牙API在androidbluetooth包中。实现这些功能主要需要下面这几个类和接口:

BluetoothAdapter

代表本地蓝牙适配器(蓝牙发射器),是所有蓝牙交互的入口。通过它可以搜索其它蓝牙设备,查询已经配对的设备列表,通过已知的MAC地址创建BluetoothDevice,创建BluetoothServerSocket监听来自其它设备的通信。

BluetoothDevice

代表了一个远端的蓝牙设备, 使用它请求远端蓝牙设备连接或者获取 远端蓝牙设备的名称、地址、种类和绑定状态。 (其信息是封装在 bluetoothsocket 中) 。

BluetoothSocket

代表了一个蓝牙套接字的接口(类似于 tcp 中的套接字) ,他是应用程 序通过输入、输出流与其他蓝牙设备通信的连接点。

BluetoothServerSocket

代表打开服务连接来监听可能到来的连接请求 (属于 server 端) , 为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。 当远端设备发起连 接连接请求的时候,并且已经连接到了的时候,Blueboothserversocket 类将会返回一个 bluetoothsocket。

BluetoothClass

描述了一个设备的特性(profile)或该设备上的蓝牙大致可以提供哪些服务(service),但不可信。比如,设备是一个电话、计算机或手持设备;设备可以提供audio/telephony服务等。可以用它来进行一些UI上的提示。

BluetoothProfile

BluetoothHeadset

提供手机使用蓝牙耳机的支持。这既包括蓝牙耳机和免提(V15)模式。

BluetoothA2dp

定义高品质的音频,可以从一个设备传输到另一个蓝牙连接。 “A2DP的”代表高级音频分配模式。

BluetoothHealth

代表了医疗设备配置代理控制的蓝牙服务

BluetoothHealthCallback

一个抽象类,使用实现BluetoothHealth回调。你必须扩展这个类并实现回调方法接收更新应用程序的注册状态和蓝牙通道状态的变化。

BluetoothHealthAppConfiguration

代表一个应用程序的配置,蓝牙医疗第三方应用注册与远程蓝牙医疗设备交流。

BluetoothProfileServiceListener

当他们已经连接到或从服务断开时通知BluetoothProfile IPX的客户时一个接口(即运行一个特定的配置文件,内部服务)。

蓝牙权限

为了在你的应用中使用蓝牙功能,至少要在AndroidManifestxml中声明两个权限:BLUETOOTH(任何蓝牙相关API都要使用这个权限) 和 BLUETOOTH_ADMIN(设备搜索、蓝牙设置等)。

为了执行蓝牙通信,例如连接请求,接收连接和传送数据都必须有BLUETOOTH权限。

必须要求BLUETOOTH_ADMIN的权限来启动设备发现或 *** 纵蓝牙设置。大多数应用程序都需要这个权限能力,发现当地的蓝牙设备。此权限授予其他的能力不应该使用,除非应用程序是一个“电源管理”,将根据用户要求修改的蓝牙设置

注释:要请求BLUETOOTH_ADMIN的话,必须要先有BLUETOOTH。

在你的应用manifest 文件中声明蓝牙权限。例如:

<manifest >

<uses-permission android:name="androidpermissionBLUETOOTH" />

</manifest>

通过查看<uses-permission>资料来声明应用权限获取更多的信息。

蓝牙设置

在你的应用通过蓝牙进行通信之前,你需要确认设备是否支持蓝牙,如果支持,确信它被打开。

如果不支持,则不能使用蓝牙功能。如果支持蓝牙,但不能够使用,你刚要在你的应用中请求使用蓝牙。这个要两步完成,使用BluetoothAdapter。

1获取BluetoothAdapter

所有的蓝牙活动请求BluetoothAdapter,为了获取BluetoothAdapter,呼叫静态方法getDefaultAdapter() 。这个会返回一个BluetoothAdapter,代表设备自己的蓝牙适配器(蓝牙无线电)。这个蓝牙适配器应用于整个系统中,你的应用可以通过这个对象进行交互。如果getDefaultAdapter()返回null,则这个设备不支持蓝牙。例如:

BluetoothAdapter mBluetoothAdapter = BluetoothAdaptergetDefaultAdapter();

if (mBluetoothAdapter == null) {

// Device does not support Bluetooth

}

2打开蓝牙

其次。你需要确定蓝牙能够使用。通过isEnabled()来检查蓝牙当前是否可用。如果这个方法返回false,则蓝牙不能够使用。为了请求蓝牙使用,呼叫startActivityForResult()与的ACTION_REQUEST_ENABLE动作意图。通过系统设置中启用蓝牙将发出一个请求(不停止蓝牙应用)。例如:

if (mBluetoothAdapterisEnabled()) {

Intent enableBtIntent = new Intent(BluetoothAdapterACTION_REQUEST_ENABLE);

startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

}

![>

以上就是关于蓝牙 nfc 怎么配对 pin key全部的内容,包括:蓝牙 nfc 怎么配对 pin key、蓝牙开发-获取Mac地址、gba-900怎么连蓝牙安卓系统等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9472360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存