
以下是几种可以实现在附近一公里内查找朋友的技术和方法:
1 GPS定位技术:利用GPS定位技术可以获取用户的准确位置,从而判断用户是否在预设范围内。通过与地图API结合,可以找到用户周围的其他用户,并提供定位服务。
2 蓝牙低功耗(BLE):蓝牙低功耗技术可以广泛应用于附近用户的查找和定位。该技术只需要手机蓝牙开启,即可侦测蓝牙信号并确定距离。可以利用此技术构建基于位置的社交网络平台。
3 Wi-Fi定位技术:利用Wi-Fi定位技术可以将WiFi热点相关数据与地理信息系统结合,来实现用户位置的推断和附近人的定位功能。
4 无线电频率识别(RFID):RFID技术可以识别被标记物体的唯一识别码,并利用漏洞扫描,来确定用户所在位置和其它使用这一技术的用户位置。
5 分享位置信息:最简单的方式是通过社交媒体或通讯软件共享您的位置信息。如果您的亲密好友也在同一时期同一地点,通过这种方式可以轻松地搜索并找到您所在的位置。
需要注意的是,在使用这些技术时,一定要确保用户隐私安全。用户必须自愿选择是否分享他们的位置信息,并且应该为保护用户隐私采取一系列措施,如脱敏处理、批量模糊等方式。
Android中的蓝牙
说到Android中的蓝牙,大家听到的可能有蓝牙10、蓝牙20、蓝牙30、蓝牙40之类的以数字结尾的蓝牙版本号,而实际上,在最新的标准中,已经不再使用数字版本号作为蓝牙版本的区分了,取而代之的是经典蓝牙与低功耗蓝牙(BLE)这两种区别。
这里提到的低功耗蓝牙也会有很多人会误解为就是蓝牙40,但是完整的蓝牙40规范中实际上包括有经典蓝牙和低功耗蓝牙这两个部分,大家看看如下这张分类表就能够明白这其中的关系了。
如表中所述,现在的蓝牙实际上分为了三类:单模、双模和经典。那么,最官方的蓝牙版本称呼就是,单模蓝牙、双模蓝牙和经典蓝牙。
在这其中,最前沿的当属单模蓝牙了,也就是低功耗蓝牙。这个蓝牙标准和经典蓝牙区别极大,在最初甚至考虑过加入WIFI阵营,但是因为蓝牙阵营这边条件较为优厚(比如授权费用极低)才并入了蓝牙标准。
那么,低功耗蓝牙和经典蓝牙的区别究竟在哪里呢?
要是仅仅从两者的通信方式上来说,可以说除了名字叫蓝牙外,完全可以当做两个东西。不过,两者在总体上的流程却也是相似的,那就是:
发现设备->配对/绑定设备->建立连接->数据通信
经典蓝牙和低功耗蓝牙除了配对/绑定这个环节是一样的之外,其它三个环节都是不同的。
1 发现设备
经典蓝牙:经典蓝牙设备发现其它经典蓝牙设备的方式是调用BluetoothAdapter的startDiscovery()方法。
api上说的比较模糊,大致是说只能够发现经典蓝牙设备。
然而实验发现 BluetoothAdapterstartDiscovery是可以同时发现经典蓝牙和ble的
低功耗蓝牙:低功耗蓝牙中则有一个主设备(Central)和从设备(Peripheral,也叫外围设备)的概念。主设备作为发现方,调用发现设备的方法,通过BluetoothAdapter的startLeScan()方法实现。从设备则作为被发现方,发出广播,以供发现。同样,这个startLeScan()方法也仅能够发现低功耗蓝牙从设备。
总结:BluetoothAdapterstartDiscovery在大多数手机上是可以同时发现经典蓝牙和Ble的,但是startDiscovery的回调无法返回Ble的广播,所以无法通过广播识别设备,且startDiscovery扫描Ble的效率比StartLeScan低很多。所以在实际应用中,还是StartDiscovery和StartLeScan分开扫,前者扫传统蓝牙,后者扫低功耗蓝牙。
注意:当两种蓝牙设备被某设备(包括当前的设备)配对/绑定后,可能不会再被扫描到。
2 配对/绑定
有很多小伙伴都不太理解配对和绑定究竟有什么区别,或者它们根本就是同一个东西。好吧,严格说配对和绑定是有区别的,也就是不是指的同一件事情。但是这两者的区别比较模糊,也不好解释。目前JACK的机器人的理解是,配对是建立两者的对应关系,而绑定则把这层关系保存固定下来并进行了强化,暂时这么理解着吧。
不管是经典蓝牙还是低功耗蓝牙,绑定方法都是通用的,可以调用相同的绑定方法。
3 建立连接
在建立连接的方式上,两者就千差万别了。
——蓝牙小知识——
在蓝牙设备中,存在着物理地址,我们也叫作蓝牙的MAC地址,这个地址是唯一的,就像咱们网络上的IP地址。同时还存在着一个叫做UUID的东西,可以把它理解为是IP地址中的端口号。正如知道了IP地址和端口号,就知道了怎么链接到目标网络服务器位置,知道了蓝牙设备的MAC地址和UUID也就能够确定到具体是哪一台蓝牙设备了,这两者合起来就是蓝牙的唯一身份标识。
经典蓝牙:经典蓝牙建立连接的方式实际上就是Socket的连接的建立。只不过这里不是直接用Socket,而是BluetoothSocket。获取BluetoothSocket的方式也很简单,利用搜索找到的BluetoothDevice,调用其方法createRfcommSocketToServiceRecord(UUID)。最后,使用获取到的BluetoothDevice调用其方法connect()就建立了经典蓝牙设备之间的连接通道。
低功耗蓝牙:低功耗蓝牙则用了一种看起来比较怪异的方式建立连接。
——关于BLE的一些基本概念——
Generic Attribute Profile (GATT)
通过BLE连接,读写属性类小数据的Profile通用规范。现在所有的BLE应用Profile都是基于GATT的。
Attribute Protocol (ATT)
GATT是基于ATT Protocol的。ATT针对BLE设备做了专门的优化,具体就是在传输过程中使用尽量少的数据。每个属性都有一个唯一的UUID,属性将以characteristics and services的形式传输。
Characteristic
Characteristic可以理解为一个数据类型,它包括一个value和0至多个对次value的描述(Descriptor)。
Descriptor
对Characteristic的描述,例如范围、计量单位等。
Service
Characteristic的集合。例如一个service叫做“Heart Rate Monitor”,它可能包含多个Characteristics,其中可能包含一个叫做“heart rate measurement”的Characteristic。
这里举个例子,例如现在需要使用一个智能手机作为主设备去连接一个作为从设备的智能手环,那么,此时这个作为主设备的智能手机连接过程中实际是一个客户端(Client),而作为从设备的智能手环在此过程中则是服务端(Server)。这里的主设备和从设备,客户端和服务端一定要区分清楚。
想要和一台BLE从设备建立连接,一般是某个智能设备,例如智能手环、智能灯泡之类的。如果使用智能手机作为测试平台,其硬件条件是,蓝牙得至少是低功耗蓝牙版本,然后安卓系统的话,至少得是Android 43以上系统才行,因为Google在Android 43以上才做了BLE主设备的支持,如果想将智能手机作为BLE从设备,则必须在Android 50以上才行。
具体建立GATT连接的顺序则是,首先通过BluetoothAdapter的getRemoteDevice(address)方法获取大相应BLE从设备的BluetoothDevice,其中的address为目标蓝牙设备MAC地址。然后通过此BluetoothDevice的connectGatt(this, false, mGattCallback)方法获取设备连接。
此时的连接,只能够进行监听,也就是获取到当前BLE从设备广播出来的数据。
4 数据通信
经典蓝牙:当建立连接后,就可以直接使用BluetoothSocket的getOutputStream()方法获取输出流写入需要发送的数据。读取发送回来的数据,则是调用BluetoothSocket的getInputStream()方法获取输入流读取。这点和Java中的Socket通信几乎是一模一样。
低功耗蓝牙:想要实现主设备对从设备的数据发送,则需要直接读取获取到的从设备的Characteristic,而Characteristic又是Service下面的一层,所以 *** 作顺序是:
(1)通过BLE从设备相应的Service_UUID获取对应的BluetoothGattService,获取方法是:使用BluetoothDevice的connectGatt(this, false, mGattCallback)方法返回的BluetoothGatt对象,调用BluetoothGatt的方法getService(Service_UUID)获取相应的BluetoothGattService;
(2)调用BluetoothGattService和对应的Characteristic的写入UUID获取相应的BluetoothGattCharacteristic,获取方法是:调用BluetoothGattService的getCharacteristic(Characteristic_UUID)方法获得;
(3)设置需要发送的命令值,调用BluetoothGattCharacteristic的方法setValue(value)进行设置,其中value一般为byte[];
(4)最后,使用BluetoothGatt的写入方法writeCharacteristic(TxChar)完成命令发送。
可以看到,想要实现BLE的数据通信,步骤相当繁琐,这里只是做一个简单的概念理解,如果想要获取到BLE从设备的返回值,还需要设置Notification,然后调用BluetoothGatt的readCharacteristic(characteristic)方法进行数据的读取,这里不做详细说明了,放在以后详细说明BLE通信的时候再做解释。
蓝牙的选用
既然有经典蓝牙和低功耗蓝牙之分,我们在设计物联网产品和智能硬件产品的时候,如何选择呢?
经典蓝牙:蓝牙最初的设计意图,是打电话放音乐。30版本以下的蓝牙,都称为“经典蓝牙”。功耗高、传输数据量大、传输距离只有10米。
低功耗蓝牙:就是BLE,通常说的蓝牙40(及以上版本)。低功耗,数据量小,距离50米左右。
传声音的,用经典蓝牙:
如蓝牙耳机、蓝牙音箱。蓝牙设计的时候就是为了传声音的,所以是近距离的音频传输的不二选择。
电池供电、连手机APP的,用BLE:
如共享单车锁、蓝牙智能锁、蓝牙防丢器、蓝牙室内定位,是目前手机和智能硬件通信的性价比最高的手段。直线距离约50米,一节5号电池能用一年,传输模组成本10块钱,远比WIFI、4G等大数据量的通信协议更实用。
又要声音又要数据的,用双模蓝牙: 双模蓝牙,就是同时支持经典蓝牙音频和低功耗蓝牙。
如智能电视遥控器、降噪耳机等。很多智能电视配的遥控器带有语音识别,需要用经典蓝牙才能传输声音
传大数据量的,用经典蓝牙: 如某些工控场景,使用Android或Linux主控,外挂蓝牙遥控设备的,可以使用经典蓝牙里的SPP协议,当作一个无线串口使用。速度比BLE传输快多了。
远距离的,不用蓝牙。 固定供电的、不考虑功耗的、要传超过几十米距离的、要传高速数据的,这些都不适合蓝牙。远距离的可以用2G、4G、NB-IOT,大数据量的可以用WIFI。
智能手表,是将手表内置智能化系统、搭载智能手机系统而连接于网络而实现多功能,能同步手机中的电话、短信、邮件、照片、音乐等。
目前市面上的智能手表可大致分为两种:
1、不带通话功能的:依托连接智能手机而实现多功能,能同步 *** 作手机中的电话、短信、邮件、照片、音乐等;
2、带通话功能的:支持插入SIM卡,本质上是手表形态的智能手机,市面大部分使用Android系统。
智能手表的发展背景
随着移动技术的发展,许多传统的电子产品也开始增加移动方面的功能,比如过去只能用来看时间的手表,现今也可以通过智能手机或家庭网络与互联网相连,显示来电信息、社交软件和新闻、天气信息等内容。
这种新手表可被称作智能手表,这类产品主要是为消费者在不方便使用智能手机的情况下使用而设计的,比如正在骑自行车或手上提满了东西的时候。
智能手表的功能
1、移动支付
2、社交聊天
3、监督儿童
4、接收听电话
5、身份验证、授权
6、查看信息
伦茨 科技 蓝牙BLE52智能手表方案
伦茨 科技 推出最新蓝牙BLE52智能手表方案,本蓝牙方案采用伦茨 科技 最新蓝牙BLE52芯片ST17H65,手表可通过蓝牙与手机或者平板电脑连接,获取手机天气、信息、电话等,手表还可将监测到的运动和心率数据实时传输到手机中,并实时的为用户提供 健康 资讯,让用户以积极可观的心态面对生活和工作。
蓝牙智能手表方案功能
1、应用通知
蓝牙智能手表APP开发中的应用通知功能是指手表可以提醒电话、短信以及三方的应用通知。防止用户错过任意一则重要的信息。
2、运动数据和心率数据
运动数据和心率数据功能是每一款蓝牙智能手表都配备的功能。用户可以通过这个记录行走步数、距离、心率、燃烧热量等信息。这些信息记录之后,可以反馈到手机上。帮助用户更好的了解自身身体情况。
3、天气管理
蓝牙智能手表可以提供更换天气功能。并且,会自动定位城市,做好预警天气提醒。
4、手表闹钟
手表闹钟功能是指用户在使用智能手表时,可以在APP上设定多组闹钟,到了特定时间时,手表会震动。用户只要用手触摸视频即可关闭闹钟。
5、蓝牙定位
蓝牙实时定位。另外还有一键报警功能,对用户特别是未成年,能起到保障作用。
伦茨 科技 拥有自主研发无线射频和低功耗蓝牙BLE52芯片并具有全球知识产权,针对AIoT物联网领域和个人消费者,提供蓝牙主控全集成芯片的「软硬件共性」解决方案及核心器件,配套全方位APP软件平台定制开发。所设计的蓝牙芯片方案应用于智能穿戴设备、蓝牙室内导航、智能家居、医疗 健康 、运动建身、数据传输、远程控制、个人外设及AIoT物联网等场景。
最新推出搭载高性能低功耗32位处理器的蓝牙芯片ST17H66(SOP16),支持Bluetooth LE、SIG MESH多功能的Bluetooth 52。
关键参数:
最近遇到了一个BLE的项目,花时间恶补了下相关的知识,这里记录下来备忘。这篇笔记是纯协议的,先大概了解ble的协议和流程,能帮助我们更好的编码
Ble设备的发现实际上靠的是Advertising(广播)机制。广播也有人管它叫做Beacon,我没有在官方文档里面查找到这个词,但是从网络上的文章来看,它们差不多就是同一个东西。
基于广播发现Ble设备有两种方式:
由于这两种方式都基于广播,所以它们的数据格式是一样的。广播会自带一些信息,例如设备的名称、MAC地址等。除了自带的数据之外,我们还能携带一些额外的信息数据。根据 官方 的 文档 ,可以看到这个额外数据的具体格式如下:
可以看到广播数据里面包含多个AD Structure。每个AD Structure分为两个部分:数据段长度(1字节)+数据段(N字节)。数据段又分为头1个字节的AD Type标识类型和剩余的AD Data具体数据。
注意看最后的Non-significant part,有时候在安卓的回调里面会在byte数组的最后看到一堆的0x0,这个实际上也是定义在协议里面正常的无意义数据,我们直接忽略它们就好。
举个实际的例子,在手机上使用ble搜索应用搜索我司开发的蓝牙设备,查看其广播数据:
可以看到广播数据0x0319C703020104030312180C094D41584559455F353146300C16791300000002000000735C,实际有5个AD Structure。
AD Type如上图所说可以去蓝牙协议的 官方 查看[Generic Access Profile文档]( >
在ios中ibeacon是基于地理位置的微定位技术(从这句话中可以得出Introduced in iOS 7, iBeacon is an exciting technology enabling new location awareness possibilities for apps),虽然借助手机蓝牙进行接收Majro、Minor,但是他们在开发工程中没有任何关系。
ibeacon使用苹果提供CoreLocation库,然而在BLE在开发过程中使用CoreBluetooth库。从上面提供的库来看就很清楚了,特别是在IOS8之上的时候如果想使用ibeacon,必须让用户点击是否允许“App使用地理位置”。如果在第一次使用ios app扫描ibeacon的时候没有提示这句话是不可能接收到ibeacon的信号(除非ios 80之下)。如果是BLE则的开发过程中之需要提示用户打开蓝牙,并不要求其他的地理位置任何信息。
第一:在ios中所有的数据都是通过API获取的,也就是说在IOS中不会看到蓝牙模块的裸数据(在这里的裸数据就代表蓝牙模块发送的16进制的数据),只能拿到苹果公司提供的极个别的API中的数据。
第二:ble、ibeacon各使用各自的API,他们之间没有任何对应关系。如果想使用ble就不可能获取到ibeacon的major、minor、uuid等信息,如果使用ibeacon,没有办法发起链接请求获取服务。
第三:在ios中ibeacon通信数据只有
这个六个属性,其分别含义是“ proximityUUID major、minor表示ibeacon的uuid,major、minor;proximity就是苹果提供的几个表示距离的属性CLProximityUnknown(没有数据),CLProximityImmediate(十厘米以内),CLProximityNear(一米以内),CLProximityFar(一米以外)”。
“在很多硬件人员的眼中认为,ibeacon和ble没有区别啊,我们都是在同一个模块上面开发的,只是发送的数据格式不一样,ibeacon应该和ble没有区别,ios可以获取数据按照我们给的通信协议进行解析就可以啊。”这个就犯了我刚才所说的一个错误,在ios的开发过程中ibeacon和ble是两个不同的东西,所有的数据都被苹果拦截了,只给开发者特定的api可以调用。虽然从硬件上面来看没有任何区别但是在开发过程中确实两个不同的东西。但是有很多的厂商又想让ble具有ibeacon的类似的功能,比如可以让app获取到major、minor这个又怎么办?让ios的app获取ble的MAC地址等等功能(说明一下,ios是不能直接获取ble的mac地址的)?在这里(只是我个人的意见也是我在工作中得到的一些方法)是我的建议,一般很多ble正在发送发现广播的时候携带了“kCBAdvDataServiceData”信息,可以把ibeacon的major、minor放在kCBAdvDataServiceData的数据区域,然后让app根据协议截取响应的信息。也可以放到其他的信息中,这要看公司的策略。
如果有一款iOSble的巡检App(非ibeacon的App)可以用BLE扫描出ibeacon的信息,他的App肯定不是直接扫描ibeacon,这一点可以从两个方面进行验证第一:是否使用用户的地理位置,第二:拿一个其他厂家的标准ibeacon,(ibeacon的uuid一定不要一样,因为ios在扫描ibeacon的时候一定要指定需要扫描的uuid,换一个uuid
app都不可能扫描到)。通过上面两点可以很好的判定app是巡检ble还是ibeacon。
总结上面所有的观点,如果想使用ios的app巡检ble又能巡检ibeacon,一定要在蓝牙模块的广播数据中做文章。怎么做文章需要各厂商自己权衡。
iPhone用户可以在未打开App情况下(App被用户开启过,并且授权使用蓝牙以及定位,并且蓝牙处于开启状态),收到IBeacon设备(蓝牙外设设备)广播的信息,并短暂的激活该App (约10秒)去执行一些方法。
根据IBeacon设备的发射范围,确定用户当前的状态:进入、持续监听、离开。然后做出不同的响应
蓝牙扫一扫;区域推送;活动现场互动(配对,寻宝等);签到,蓝牙锁(应用内手动签到、开锁或者点亮屏幕即可签到、开锁)。
蓝牙连接打印机
>
一、主体不同
1、蓝牙40:是2012年最新蓝牙版本,是30的升级版本。
2、蓝牙BLE模块:是一种集成蓝牙功能的PCBA板。
二、优点不同
1、蓝牙40:较30版本更省电、成本低、3毫秒低延迟、超长有效连接距离、AES-128加密等。
2、蓝牙BLE模块:模块具有半成品的属性,是在芯片的基础上进行过加工,以使后续应用更为简单。
三、应用不同
1、蓝牙40:用在蓝牙耳机、蓝牙音箱等设备上。
2、蓝牙BLE模块:用于短距离无线通讯,按功能分为蓝牙数据模块和蓝牙语音模块。
参考资料来源:百度百科-蓝牙模块
参考资料来源:百度百科-蓝牙40
以上就是关于查找附近一公里的朋友,有几种技术实现方式全部的内容,包括:查找附近一公里的朋友,有几种技术实现方式、经典蓝牙和低功耗蓝牙区别、蓝牙低功耗(BLE)技术|智能手表小知识等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)