A. 我在做一个通过android应用来控制小车的项目。我想问,小车上的蓝牙设备,属于服务器端还是客户端
一般来说,小车上的蓝牙设备为客户端。手机为服务端。
B. android蓝牙设备上的标准串行怎么看
蓝牙串口实质上就是把可见的 传统串口连接线 变成了 不可见得 无线 传输(蓝牙)。
举例:如果要使用单片机采集数据,通过蓝牙串口 发回 电脑端实时处理
单片机 串口 TX 接蓝牙串口模块的RX, 单片机 RX 接到 蓝牙串口模块的TX
电脑端搜索蓝牙串口模块,配对(默认密码一般为 1234,请参照模块说明)
配对连接成功后会在设备管理器串口设备里面新生成蓝牙串口(如Bluetooth设备 链接上的标准串行(com17) - 请记住这一端口号
单片机通电运行,串口数据发送给蓝牙串口模块
电脑端通过上位机,或者串口助手等软件,打开com17
这时候单片机发送的串口数据,就都可以实时在电脑端收到了注意事项:蓝牙串口模块的串口通讯波特率需要设置成跟单片机通讯波特率一致,否则会产生乱码!
C. java中Android开发蓝牙通信,一部手机能不能同时做服务端和客户端。
一般的是不能的,看你的功耗大小,一般低功耗的都不行。
D. android蓝牙中的有关问题,怎么取消适配或跳过适配直接进行连接通信
1、就是说蓝牙设备配对是不能避免,或者说不能跳过配对直接连接,对吧?
2、我用的是我们公司自己研发的物流机设备,我就是在学习Bluetoothchat demo,只是demo中用的是三个线程来管理这些的,我想忽略线程,但是总是会出现一个问题,就是客户端发送数据给服务端,服务端能够接收数据,但是我想服务端在接收到数据时再次返回数据给客户端,这时候客户端是接收不到的
E. Android开发之蓝牙(Bluetooth)
在上一篇中有介绍了Wifi与网络连接处理
Android开发之WiFi与网络连接处理
下面,来继续说说Android中蓝牙的基本使用。
Bluetooth是目前使用的最广泛的无线通讯协议之一,主要针对短距离设备通讯(10米),常用于连接耳机、鼠标和移动通讯设备等。
值得一提的是:
android4.2新增了部分新功能,但是对于Bluetooth熟悉的人或许开始头疼了,那就是Android4.2引入了一个新的蓝牙协议栈针BLE。谷歌和Broadcom之间的合作,开发新的蓝牙协议栈,取代了基于堆栈的Bluez。因此市场上出现了老设备的兼容问题,很多蓝牙设备在android4.2手机上不能正常使用。
BluetoothAdapter简单点来说就是代表了本设备(手机、电脑等)的蓝牙适配器对象。
first:we need permission
要操作蓝牙,先要在AndroidManifest.xml里加入权限
**下面来看看如何使用蓝牙。 **↓↓↓****
Demo已就绪:
返回值:如果设备具备蓝牙功能,返回BluetoothAdapter 实例;否则,返回null对象。
打开蓝牙设备的方式:
1.直接调用函数enable()去打开蓝牙设备 ;
2.系统API去打开蓝牙设备,该方式会弹出一个对话框样式的Activity供用户选择是否打开蓝牙设备。
注意: 1.如果蓝牙已经开启,不会弹出该Activity界面。2.在目前大多数Android手机中,是不支持在飞行模式下开启蓝牙的。如果蓝牙已经开启,那么蓝牙的开关 ,状态会随着飞行模式的状态而发生改变。
1. 搜索蓝牙设备
使用BluetoothAdapter的startDiscovery()方法来搜索蓝牙设备
startDiscovery()方法是一个异步方法,调用后会立即返回。该方法会进行对其他蓝牙设备的搜索,该过程会持续12秒。该方法调用后,搜索过程实际上是在一个System Service中进行的,所以可以调用cancelDiscovery()方法来停止搜索(该方法可以在未执行discovery请求时调用)。
系统开始搜索蓝牙设备
^( *  ̄(oo) ̄ ) ^ 系统会发送以下三个广播:
2.扫描设备
3.定义广播接收器接收搜索结果
4.注册广播
获取附近的蓝牙设备
第一步建立连接:首先Android sdk(2.0以上版本)支持的蓝牙连接是通过BluetoothSocket建立连接,服务端BluetoothServerSocket和客户端(BluetoothSocket)需指定同样的UUID,才能建立连接,因为建立连接的方法会阻塞线程,所以服务器端和客户端都应启动新线程连接。
(这里的服务端和客户端是相对来说的)
两个蓝牙设备之间的连接,则必须实现服务端与客户端的机制。
当两个设备在同一个RFCOMM channel下分别拥有一个连接的BluetoothSocket,这两个设备才可以说是建立了连接。
服务端设备与客户端设备获取BluetoothSocket的途径是不同的。
1,服务端设备是通过accepted一个incoming connection来获取的,
2,客户端设备则是通过打开一个到服务端的RFCOMM channel来获取的。
服务端
通过调用BluetoothAdapter的(String, UUID)方法来获取BluetoothServerSocket(UUID用于客户端与服务端之间的配对)
客户端
调用BluetoothService的(UUID)方法获取BluetoothSocket(该UUID应该同于服务端的UUID)。
调用BluetoothSocket的connect()方法(该方法为block方法),如果UUID同服务端的UUID匹配,并且连接被服务端accept,则connect()方法返回。
数据传递,通过以上操作,就已经建立的BluetoothSocket连接了,数据传递无非是通过流的形式
获取流
该类就是关于远程蓝牙设备的一个描述。通过它可以和本地蓝牙设备---BluetoothAdapter连接通信。
好多东西我也不知道怎么描述,下面给出Demo:
刚好有刚学习的小伙伴问我ListView怎么用,那我就用ListView。
源码:
RairDemo
GitHub: https://github.com/Rairmmd/android-demo
Coding: https://coding.net/u/Rair/p/RairDemo/git
F. android蓝牙程序开发中,如何确定一台手机当前是服务器还是客户端
首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permissionandroid:name="android.permission.BLUETOOTH" />
然后,看下api,Android所有关于蓝牙开发的类都在android.bluetooth包下。 而需要用到了就只有几个而已:
1.BluetoothAdapter 顾名思义,蓝牙适配器,直到我们建立bluetoothSocket连接之前,都要不断操作它BluetoothAdapter里的方法很多,常用的有以下几个:cancelDiscovery() 根据字面意思,是取消发现,也就是说正在搜索设备的时候调用这个方法将不再继续搜索disable()关闭蓝牙enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候需要问下用户是否打开,一下这两行代码同样是打开蓝牙,不过会提示用户:Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler,reCode);//同startActivity(enabler);
getAddress()获取本地蓝牙地址getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdaptergetName()获取本地蓝牙名称getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备getState()获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要)isDiscovering()判断当前是否正在查找设备,是返回true***isEnabled()判断蓝牙是否打开,已打开返回true,否则,返回false***(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步startDiscovery()开始搜索,这是搜索的第一步。 2.BluetoothDevice看名字就知道,这个类描述了一个蓝牙设备(UUIDuuid)根据UUID创建并返回一个BluetoothSocket这个方法也是我们获取BluetoothDevice的目的——创建BluetoothSocket
这个类其他的方法,如getAddress(),getName(),同BluetoothAdapter;
3.BluetoothServerSocket如果去除了Bluetooth相信大家一定再熟悉不过了,既然是Socket,方法就应该都差不多,这个类一种只有三个方法
两个重载的accept(),accept(inttimeout)两者的区别在于后面的方法指定了过时时间,需要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行。
还有一点需要注意的是,这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接。
4.BluetoothSocket,跟BluetoothServerSocket相对,是客户端一共5个方法,不出意外,都会用到close(),关闭connect()连接getInptuStream()获取输入流getOutputStream()获取输出流getRemoteDevice()获取远程设备,这里指的是获取bluetoothSocket指定连接的那个远程蓝牙设备 。
G. 您好,我想问一下android蓝牙程序,一端作为服务器,可以同时连接几个客户端并接收其发来发来的数据吗
我翻了好久以前的资料,终于翻到这份蓝牙资料。。。因为可能别人也需要这份资料,我就把它传到我的度网盘里共享了。共享附件也发了份。不知道是不是对你有用。因为我也只用过一次。但愿能帮到你!望采纳。
H. 关于android蓝牙客户端通讯开发,有没有好用的第三方库
国行的iPhone6与6 Plus上市也有一段时间了,用上的朋友应该不少。关于这款新品iPhone,你们应该了解它的一个新功能:Handoff。苹果Handoff怎么用,它好用吗?下面小编就分享体验了一段时间Handoff后的感受吧。总的来说,它有点鸡肋。 今年早些时候,苹果在全球开发者大会上宣布这一让手机、平板与笔记本电脑互通互联的新功能时,作为一个伪果粉,我其实还是有些小期待的。在我们此前有关iPhone6的报道与评测中也有提到这一Continuity功能。 然而,在周末迟来的升级体验Handoff之后,我发现“美好的事情并没有发生”。体验的经过是这样的,先来看看Handoff怎么玩。 ◆准备:要有台iPhone、iPad或者Mac 想要体验Handoff?你首先得有一台不算太老的iPhone,以及一台同样不算太老的iPad或者Mac。平板电脑就算了,在我看来不是刚需。我准备的是支持蓝牙4.0的iPhone6 Plus与Mac Book Pro(简称MBP),详细可以参照下面的硬件要求。 硬件要求: ·MacBook Air(2012年货之后的机型) ·MacBook Pro(2012年货之后的机型) ·iMac(2012年货之后的机型) ·Mac mini(2012年货之后的机型) ·Mac Pro(2012年货之后的机型) ·iPhone5及以上或iPad3及以上设备(如果2选1你不能同时拥有的话,那就看看热闹吧!) 看到这里,你或许会忍不住吐槽,如果买台最新的iPhone需要卖肾的话,那为了体验Handoff,剩下的一个肾也保不住了。没办法,这就是苹果的捆绑式销售。 在使用Handoff功能的时候,你需要将MBP和iPhone6 Plus的蓝牙与无线同时打开。值得一提的是,不要试图将手机的蓝牙与Mac配对连接,都开着就行,但是WiFi必须确保连的是同一个。 iPhone6 Plus的话,在“设置—通用”中找到“Handoff与建议的应用程序”,将这一功能开启算是完成了iPhone部分的设置。 同时打开iPhone与Mac的Handoff 而Mac中也是在“设置—通用”中找到“允许在这台Mac和iCloud设备之间使用 Handoff”并确认即可,这一项默认是开启的。 登陆同一个Apple ID 这些都完成后,你还要分别在iPhone和Mac上用相同的Apple ID来登录,尤其是iCloud。如果有一台没有登录,那么Handoff则无法使用。 说实话,当我把这些准备工作都做完之后,我并不能确定Handoff功能是否已经开启,因此我认为后期苹果应该进行优化,最起码让首次使用的用户知道Handoff已经连接正常了。 ◆体验:应用少 体验差并且不稳定 为了验证Handoff已经能够正常使用,我在iPhone6 Plus上登陆了邮件进行测试,当我在手机上新建一封邮件后,又最小化到后台运行,这个时候,我终于看到我的MBP上的Dock栏上新增了一栏显示Handoff连接的邮件应用:“邮件——来自**的iPhone”。 应用少用着鸡肋 苹果手机Handoff体验 这个时候,也就能确定Handoff已经能够正常使用了。看到这里,你或许要开始有点儿小失望了,这就是电脑与手机的互通?没错,目前看来就是这样:Handoff就是让你将在屏幕小的手机上不方便做的事转移到屏幕更大的电脑上做。 除了邮件,其他像iWork套件也都是同理,但却又与提醒、邮件等使用稍有不同。以Pages为例,我在手机上新建一个空白文档,暂时写了几个字“Handoff测试”,如果按照之前邮件测试的方法,退出到后台之后,MBP上应该会有显示,但是却没有,为何? 记得要iCloud共享链接 因为需要在“共享与打印”中,将这个文档通过iCloud共享链接才能让我在Mac上继续未完的文档。共享完成后,在Mac中找到iCloud Drive,点开后即可在Pages中找到手机中尚未完成的空白文档。而Mac转到iPhone中继续编辑同理。 Mac端未注册iMessage的用户间无法使用 至于短信和电话,严格来说应该是iMessage与Facetime,从我的体验来看,用另外一台安卓手机发送短信到iPhone6 Plus上,MBP上会有提示,但并不能够显示短信内容,而6P上却正常。 也就是说,要想iPhone连Mac或者iPad体验“电脑接听手机电话”,你得确保联系你的人用的是iPhone,并且将iMessage与Facetime都绑定了自己的账号。并且Mac可不是手机,它并没有通话记录与拨号盘这类基本的手机应用。 从我身边使用iPhone的朋友来看,没用过这两项功能的大有人在,这也就是Handoff比较鸡肋的另外一个原因所在。因为你不能确保你的朋友和你一样的高大上,即使你们都是苹果三件套的拥有者,你的土豪朋友也不一定有心思摆弄这些设备。 需要在屏幕上滑才能显示网页,然后再点进去 随后我也体验了下网页浏览,除了苹果自带的Safari,Google Chrome也能正常连接,但前提是确保你的Chrome是最新版。这项体验给我最大的感受是,如果我肚子不舒服了想要去卫生间,那我可以接着在马桶上用iPhone继续浏览我未看完的网页。嗯,最起码我个人觉得很方便。 看到这里,你一定会想,支持Handoff都是苹果自家的应用啊!其实这只是暂时的,苹果对开发者开放的API接口可在将来实现第三方应用程序的Handoff支持。就我所知道第三方应用中,最新版的爱奇艺客户端是支持的。 第三方应用体验 但从我的体验来看,也还是有瑕疵。我一开始很难在iPhone上发现我Mac上正在看的电视剧,需要我在手机的应用程序后台中找到。还是那句话,应该要有更为明确的提示,集成在一个APP中或许会更好。当然,这只是我个人的看法。 再补充一下另外一个更为鸡肋的Instant Hotspot,苹果官方是这么描述的:“只需在你的Mac上点击几下,即可打开你iPhone上的个人热点。因此,只要你的iPhone在附近,你就可以使用你的Mac来上网。” 方便在哪儿呢?当我的Mac没有网的时候,免去了从兜里或者背包中翻出iPhone开热点。说白了就是支持Mac一键开关手机热点。但从我个人的使用情况来看,我更愿意用数据线连接,一边借助笔记本充电来补充个人热点的耗电。 总结: 如文章开头所说,这次期待中的Handoff体验给我的感觉是失望的,它的局限性非常的明显,需要苹果三件套中任意两套不算太旧的设备也就算了,目前看来应用太少,并且体验过程也并不舒适。 和苹果宣布的一样,Handoff目前只能在Safari、Pages、Numbers、Keynote、地图、信息、提醒事项、日历和通讯录之间配合使用,其他的第三方APP则少的可怜。 同时Handoff稳定性还不够好,在Mac上操作时,点开与手机互联的应用如邮件,有时候会出现“闪退”的情况,也就是说点一下并不能打开。 更多的槽就不吐了,在前面的体验中很多也都已经指出了,虽然Handoff并不是我期待的那样子,但它优点也是有的。首先它的多平台设备互通就是一种最大的创新,其次,不管是iCloud还是AirDrop在有些时候还是很方便的,如传阅照片等。 只是局限在同一个WiFi与蓝牙的连接,手机能做的事儿,我用手机就行了这就是目前很多人的使用习惯。并且手机关联电脑后显示,有秘密的人一定是不会用的。
I. android 为什么蓝牙客户端先打开,服务器端才能连接,有没有解决办法
因为连接服务器,和蓝牙用的是一个接口
J. 关于Android开发手机蓝牙连接设备的,连接时出了问题可能是客户端线程socket.connect()的问题
在sendMessage()之后,为什么又重新创建线程了?
在seneMessage()之后,直接进行后续的收发处理就可以了。
没有进行主动断开操作之前,连接一般都是维持着的,不会断开。
如果你重新创建线程,而线程里面又向服务器发起新的连接了,所以服务器接收新连接后,很可能会切断旧的连接。
不要把一个消息重复发送多次(发送队列里面已经存在了此消息)。如果想多次发送同样的内容,就创建内容一样的多个消息进行发送。