求助:蓝牙耳机怎么连接手机OBD连接不上

国家体育总局今年将办全国电子竞技公开赛
因为保密文化,苹果给人的印象一向都是神秘的。很多时候,苹果官方都对自己的计划和项...
自己把自己玩破产甚至把北美游戏业玩崩的雅达利,时隔多年重振旗鼓再做一款游戏机。
想要过渡或切换到一个新的操作系统时,总不免地需要一些学习成本又或者是会走一些弯路...
这算不算生活中的小惊喜呢?虽然时代变了,但是喜欢的心情不会变~
Apple Watch让很多奢侈品品牌都对智能手表市场产生了兴趣~
特斯拉或许真的不适合他。
看来,“iPhone 8”的外观已经基本确定下来了。
现在随着交通越发的发达便利,全球化的步伐加快,出国旅游成为了大家享受生活,认识世...
《星球大战》作为一个经典的IP,迪士尼可以说将其的商业价值进行了最大化的开发,近日...
《萌鸡敢死队》是OddGame推出的一款多人在线实时射击类游戏,从名字我们就能够知道这...
上周,独立游戏开发商 Mojo Forest 在 App Store 上架了他们的最新作品《多布王国:茸...
育碧在今年的E3展前发布会上发布了手游新作《南方公园:手机破坏者》,当时官方表示游...
SOULGAME 推出的益智类游戏《两点之间:伙伴同行》此前在100多个国家登顶免费榜首位,...
你告诉我画风不同怎么恋爱?!性别不同怎么恋爱?!(啥
在无线耳机这个重要的电子消费领域,来自其他厂商的竞争可不会小。
由于更偏向于暖色调,灯泡比较适合作为卧室、休息室、厨房、客厅的装饰灯。
本月早些时候,苹果在 WWDC 全球开发者大会上发布了一款带有数字小键盘的 Magic Keybo...
Doorbell Pro和Floodlight Cam在年底之前支持HomeKit。
与其他支持 HomeKit 的空气质量监测器不同的是,eve 整个系列产品的外观设计都非常简...
Fotofami 可以存储照片和视频,将 iPhone 本身的存储空间解放出来。
iOS 11 允许用户分别为两只不同的 AirPods 设置不同的双触动作。
不管它的设计多么漂亮,加个保护壳还是非常有必要的。
DashCommand 连接不了蓝牙ELM327 OBD2,高手指导!
注册时间 最后登录
在线时间775 小时 UID
主题帖子人气
青苹果, 积分 165, 距离下一级还需 35 积分
我的系统是8.1越狱状态OBD是蓝牙版,也是网上教程里推荐的一样
CYDIA下载官方RoqyOBD7 (其中下载时自动安装RoqyOBD7),PAYPAL花了5欧元激活,算正版吧
苹果商店下载DashCommand 最新版,也同样正版购买
启动车,打开OBD开关,通过RoqyOBD7 连接成功(苹果自带蓝牙是连不上的)
按照教程设置DashCommand里的连接方法
结果DashCommand始终连接不是OBD,错误显示&OBD-II Error& &&&Failed to open data port&
查询了许多网上资料,无解
高手帮忙下,谢谢!
注册时间 最后登录
在线时间1276 小时 UID
主题帖子人气
你应该买WIFI版的OBD,苹果不能用蓝牙版的。
要么找一个废弃的安卓机器用,要么换WIFI版的
注册时间 最后登录
在线时间775 小时 UID
主题帖子人气
你应该买WIFI版的OBD,苹果不能用蓝牙版的。
要么找一个废弃的安卓机器用,要么换WIFI版的 ...
有许多人用IPHONE连接蓝牙OBD的,越狱之后用我上述的插件
您需要登录后才可以回帖
回帖后跳转到最后一页
威锋旗下产品
Hi~我是威威!
沪公网安备 29号 | 沪ICP备号-1
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!& 跟大家分享一下我的科鲁兹安装蓝牙OBD的全过程!
查看: 7642|回复: 1
以前化油器车没听说过OBD这玩意,2007年以后的车都装有OBD接口,实际是因电脑技术的发展电脑芯片广泛用在汽车发动机管理和车身控制等方面,电脑都有自诊断功能,OBD接口就是外部设备与汽车电脑的通信接口,通过它就可以读出汽车的各种信息,去4S看修理工拿个电脑读这个数据感觉很专业,现在这东西很普及了,这两天在网上花45元买了个蓝牙的玩玩,带屏的贵且觉得无必要,老去读这些信息出来看也没什么意思,但车有问题读来看看还是有点帮助的,现实战装车给大家介绍一下,这个是在一辆众泰5008上试的,这众泰车是我去西藏的功臣,已发游记在众泰5008论坛,先装在它上面看看,科鲁兹应该也一样就是读个数据而已
寄来的就这东东,下面是个光盘里面是各种软件
找到OBD接口,科鲁兹的就在驾驶位左膝下
插上蓝牙OBD
打开钥匙就通电了,里面红灯亮(科鲁兹OBD接口关钥匙也有电的,最好买带开关那种,以免电池亏电)
在安卓手机上装好TORQUE软件(国外汉化版)
打开手机的蓝牙通信,下面那个OBD配对,无视科鲁兹的蓝牙功能
进行蓝牙配对,密码1234
启动软件进入软件界面,露大腿了哦
点适配器状态看蓝牙连接状况
自动连上了
启动发动机,转速表起来了
好多仪表信息
换个手机软件---车况检测大师(国产软件)注册后打开蓝牙自动连接
有油耗功能
检测故障码
多种仪表信息
更专业点---用笔记本电脑(此电脑有蓝牙功能才能用,没有的话可以买个蓝牙适配器),拿在手上检测汽车就像个汽车专业维修人士了
,同样先打开蓝牙功能,搜索到OBD
看下图鼠标位置就是PC版软件,比手机软件专业哦
启动软件,点左下“连接”自动搜索端口
各种检测页面
故障代码检测
转速819,冷却液温度85
4.WINDOWSMOBILE,WINCE5.0系统,软件很小功能较弱,全英文,但很多车载导航是用的WINCE5.0系统
同样先打开手机的蓝牙并在设置中选择端口,我选的COM7,接下来软件的端口也选择COM7就能连接上了
打开软件选择同样端口
启动发动机,数据就显示出来了(节气门开度、转速、行驶速度)
这东东还支持塞班系统,无诺基亚手机没试,不支持苹果系统,果粉得买另一款(贵多了)
就介绍这么多了,功能很多不同车能检测的信息也不同,看车的电脑情况,喜欢折腾的可以玩玩
您也可能感兴趣的
哇靠,楼主你还真能折腾啊
您需要登录后才可以回帖
写好了,发布
回帖后跳转到最后一页
请遵守法律法规,禁止广告贴。
Powered by
Copyright &【图】【纯技术贴】ELM327蓝牙obd检测器试用报告(已上图)
我的图书馆
【图】【纯技术贴】ELM327蓝牙obd检测器试用报告(已上图)
【纯技术贴】ELM327蓝牙obd检测器试用报告(已上图)
ELM327蓝牙obd检测器试用报告
很早就想买一个行车显示器,方便查看油耗和检测车辆状态。原来希望买一款简单实用的,经过反复对比和漫长的等待、观望进而实在无法接受现有行车显示器的粗劣和高价(虽然我自己做不出来,但是技术性和美观实用性实在不敢恭维、不愿苟同)。好在几年来有无数高手前辈的摸索探寻,俺搜来搜去看了不少好贴,最终受到启发另辟蹊径决定购买一款便宜适用的obd检测器,经过煞费苦心的寻觅,终于发现了一款ELM327汽车诊断检测线(诊断仪),原理同行云流水和MFD也是利用了国三排放车辆上配置的ECU诊断接口(OBDⅡ),通过发送标准的obd指令从ECU获取相关数据。
首先按价格和信誉选择了一家上海的商家,价格比我们能够查到的作业都低,加上运费也就¥160。这个以后羊友去买可以按团购价usb的120,蓝牙的130,运费一线城市应该不超过20。
商家发货速度很快,当天发货第二天上午就到了,可是不凑巧,我一整天都没闲着,中午抽空去取了,下午一直忙到晚上十点(济南这边连降大雨,郊区堵车严重)。硬生生给吊足了胃口,真是好事多磨啊。
幸亏事先查了些资料准备了不少软件,打开商家发来的包装,只有一张小光盘和一个蓝牙obd,连个说明书也没有,唉只要东西好用,缺少点东西降低点成本也是可以接受的。晚上回来得晚,只能抽空把小光盘里20多兆的软件挨个看了一下,很不理想。连pcmscan这样的大部头都没有。鄙视一下。
早上起来,收拾了一下,带上了笔记本和多普达696,准备用pcmscan和OBD Gauge分别在笔记本电脑和PPC手机上测试一下。需要说明的是之前光在4S看技师接插过原厂诊断仪,自己还一直没找到那个梯形16针的传说中的OBDⅡ插口。先处理了一下车门漏水,把上次贴在车门下方格挡迎宾条的长条密封胶条裁成几块,中间留足出水口,希望能够解决。(自打上次密封以来已经有三个车门脚垫下发现积水,郁闷。)雨挡的3M胶多处开胶,以至于滴水成灾,干脆用硅胶抹之,美不美观就不管了,呵呵 效果是第一位的。
拾掇完这些小麻烦,就开始钻到仪表台下找那个OBDⅡ,呵呵这次也许是天意眷顾,没像以前一样钻到脚底下出不来,顺着仪表台下露出的一堆线束开始清理,突然发现一个黑色的梯形出现在眼前,紧挨着仪表台的外侧下方,厚厚直觉告诉我就它了。
清理了一下乱七八糟的线束,把蓝牙ELM327 obd检测仪插上去联通(移动就免了),
上面的红色指示灯就亮了打开笔记本电脑,搜索蓝牙设备,很快就搜到了一个叫CHX的蓝牙终端。输上配对密码6789(这个在光盘的说明文件里有E文的,还好不算复杂,鄙视一下做这个光盘的人,摆明了要欺负那些不懂E文的童鞋),很快就连接成功了,看了一下端口号是COM4和COM5。打开pcmscan软件,仍然提示没有连接,不管他,进入设置—OBDⅡ设定,修改右下方的端口为COM4 (COM5是不是也可以呢一个上传一个下载连接成功就没再试)再点左上角的连接,中间出来提示大概等待十秒左右, 蓝牙obd上的指示灯一阵欢快的闪烁,就提示连接成功了
,OBDⅡ信息框里显示出一个提示,价值11美元的发动机控制器?哈哈,下面大概是ECU的版
因为没发动车子,貌似看不到实时数据,于是乎又发动了一下车子,
数据查看里N多的参数因为是E文的没来得及翻译都看不大懂,至少超级仪表的转速能够正常显示,呵呵太棒了,看来这东西基本没问题了。查了一下故障码,没有,应该说明小羊目前还很健康。然后关了笔记本,打开多普达696一顿点划,查找、配对,端口号com5,运行OBD Gauge在左下Menu里选择Perferences修改最下面的Port为com5。然后也很轻松就连接上了,各项参数一一列举,手机显示的内容有限我的只有四页,每页三项。大概值和项目名称摘抄如下,有两项没翻译明白,有明白的童鞋麻烦跟帖告知,谢谢!
34& Throttle position& 16& 节气门位置
<span lang=EN-US style="FONT-SIZE: 16 FONT-FAMILY: 楷体_GB& Engine RPM&&& 758&&& 发动机转速
46&&& Vehicle speed(km/h)& 0& 车辆时速(公里/小时)
98&& Calculated load value % 29
45& Ignition timing advance &#176;&& 7& 点火提前角(度)
99 Intake air pressure(kPa)&&&&&& 29 进气压力(千帕)
7& short term fuel trim&&& -3&& &短期燃油调整
4& long term fuel trim&&&&& 3&&& 长期燃油调整
61& Air temperature& 53 气温
97 Coolant temperature(℃)& 96 冷却液温度
<span lang=EN-US style="FONT-SIZE: 16 FONT-FAMILY: 楷体_GB& Oxygen Sensor 1(mV)& 70 氧传感器1
<span lang=EN-US style="FONT-SIZE: 16 FONT-FAMILY: 楷体_GB& Oxygen Sensor 2(mV)& 830 氧传感器2
左面的数值原来显示在左上方 应该为最大值 右面的数值显示在中间右边,应该为当前值,左下其实还有一个数值没有摘抄应该是平均值吧。
这个手机软件做的还是很不错的,除了显示不是很美观形象,功能还算合适,简单看了一下,居然可以查看和清除故障码(当然了pcmscan这样的大部头功能只会更全,查看故障码那里就有清除选项),不是说在哪查看清除都要收费么?呵呵貌似又提前省钱了,哈哈。
以后有时间准备主要研究一下pcmscan,这里面可以自己编制脚本,实现具体的较为复杂的数据计算处理功能,至少目前已经给了三个脚本,两个是有关油耗的(带fuel),但是从单位上看分别是km/l 和 l/hr (这个hr是什么意思?也请高手指教)。这款软件还可以自己设计超级仪表,用仪表的形式在屏幕上显示自己需要的数据。我跑了一点路就是不知道哪里没搞对,反正这里面的油耗没显示出来,不解。从PDA上看参数应该还不错,包括一直比较关心的油耗。呵呵
先介绍到这里吧,还准备去修一下门锁中控,下雨进水,变成手动开自动关的了。准备了些图片,晚上再发吧。呵呵 经过拆装检查已经确认是组合开关坏了,准备先去4S看看,虽然很想自己动手,但是理智告诉我不能放弃可以免费换新的机会。哇哈哈,实在不给换在自己动手吧,在此之前一定要保证外观完好,不然就说不清了。
问题备注:
1、OBD接口在拔钥匙关电门状态下应该有电,蓝牙设备红色电源灯亮,有一点静态功耗,应该很小。
2、ECU只在电门开到二档(ACC为一档)才工作,obd检测器才有数据传输。
3、羚羊原车的油耗数据不知道为何在目前测试的两款软件里均无法正确显示,PCmscan只测了一次,好像没有数据显示。(脚本测试无问题)在pda里测试油耗貌似很没有规律 -7到7波形变化,熄火、怠速均为零。准备有时间换车测试。不排除铃木原厂修改变动了具体数据格式和指令。
目前还在测试阶段收获很小个人感觉还是有的
1、车速信号从仪表盘上传递到了ECU,以前没想明白总担心没有速度信号,而且车速感觉很准,跟以前用GPS测得的相对于速度表的误差是相同的,估计是出于安全的考虑,仪表盘上的速度表比实际速度快了5公里以上。
2、水温能够比较准确的反馈,同白版以前的论述小羊设定的是97度开电子扇,一般冷却液温度都能控制在97度以下。以前担心机舱做了隔音和密封,影响了散热温度会过高,现在看只要电子扇不出问题,也就是工作的频率和工作时间加快、变长而已。
3、这款装备成本低、功能全,综合性价比超越市面上现有的任一款行车显示器。非常适合国三带OBD接口的车辆使用。这为我们以后换车提供了便利,高兴的话大家还可以捞点外快,呵呵查和清故障码在很多地方是要收费的。
再有新发现以后随时补充吧 先到这里 饿死了吃饭去
经过仔细研究发现小羊ECU不能提供相关的具体油耗数据,只能根据原始数据比如喷油脉宽来模拟计算,现有配套软件的原始功能都无法实现油耗的观察和计量。Pcmscan 现在是研究的重点,学习借鉴行云流水的方法,希望能够有合用的脚本
本软件功能强大,在维修方面可以查询发动机故障码,可以消除故障码。可以看到发动机的各项数据,也可以在行车中检查空燃比与所有强大的行车数据。玩车的人也不需要再用秒表来测试你车 0-400的速度了~~0-400测试页面有多个数据记录,包括有:反应时间,20米时间,100米时间,0-100km时间,200米到达时间,200米到达速度,300米时间,400米到达时间,400米到达速度.还有完完整整的报表。还有模拟DYNODYNO功能 只要设定,轮胎尺寸,尾牙齿比,车重量。跑一圈就可以测试到你爱车的功率(kw/hp),扭力(Nm/FT)还有很多很多功能,上面英文都有写,反正是很好玩好用的软件,功能是很强大的.有个手提电脑就可以用了,简单
产品名称:ELM327& 蓝牙型
产品特点:ELM327&(蓝牙) &是最新的基于个人电脑(PC)的扫描工具。它支持所有OBD-II协议,并与众多软件兼容。它输出协议以USB接口与电脑(笔记本电脑)互连。
处理器名:ELM327 蓝牙
支持的OBD-II协议:ISO15765-4 (CAN)ISO14230-4 (KWP2000)ISO9141-2J1850 VPWJ1850 PWM
ELM327可以建立ECU同个人电脑或者PDA的数据链路
显示电流传感器数据,包含:引擎每分钟转速(RPM)计算后的负荷值冷却液温度燃料系统状态车速短期燃料情况长期燃料情况进气歧管压力喷油提前时间进气温度空气气流速度节流阀绝对位置与短期燃料状态关联的氧气探测电压燃料系统状态燃料压力还有很多其他数据&#8230;&#8230;软件的未来特点:数据图表显示和记录日志冻帧数据连续和不连续氧气探测结果
可支持的车型:
宝马&& 西雅特& 福特& MINI&& 捷豹&&& 奔驰&& 大众
克莱斯勒&& 道奇&& 讴歌&
铃木&& 本田&& 丰田&& 马自达&& 三菱&&& 尼桑&& 斯巴鲁
陆虎&& 雪佛兰&& 斯柯达&& 英菲尼迪&& 起亚&& 现代
奥迪&& 萨博&& 欧宝&& 雪铁龙&& 标致&& 沃尔沃&& 菲亚特& 等
目前绝大多数软件都是英文的,建议对英文过敏而且对车的技术术语不太了解的童鞋不要轻易出手。
TA的最新馆藏[转]&[转]&[转]&[转]&4577人阅读
android(101)
& & & &前段时间项目中需要使用手机蓝牙去连接第三方的设备,读取设备中的信息,开始搞的晕头雾水的。。还好最终搞定了。写篇帖子来记录一下这段苦&#36924;蓝牙旅程
& & & &android官网提供了一个基于蓝牙的聊天案例。、有人已经把demo抽出来做了详尽的分析。。。我这篇文章主要来分析如何同第三三方设备通过蓝牙来进行信息交互
1: 添加蓝牙操作权限 &
&uses-permission android:name=&android.permission.BLUETOOTH_ADMIN& /&
&uses-permission android:name=&android.permission.BLUETOOTH& /&
2:获取BluttoothAdapter 并检测设备是否支持蓝牙
* 确认设备是否支持蓝牙
* 如果getDefaultAdapter()返回null,则这个设备不支持蓝牙
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// If the adapter is null, then Bluetooth is not supported
//手机不支持蓝牙
if (mBluetoothAdapter == null) {
Toast.makeText(this, &Bluetooth is not available&, Toast.LENGTH_LONG).show();
}& & & &在api中解释了何为BlueToothAdapter--&&Represents the local device Bluetooth adapter其实就代表本地的蓝牙
3:判断蓝牙是否可用
* 确定蓝牙能够使用。
* 通过isEnabled()来检查蓝牙当前是否可用。
* 如果这个方法返回false,则蓝牙不能够使用。这个时候 就请求蓝牙使用,通过intent来请求
* 在onActivityResult()里面判断
if (!mBluetoothAdapter.isEnabled()) {
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
// Otherwise, setup the chat session
}4:请求周围的蓝牙
Intent serverIntent = new Intent(this, DeviceListActivity.class);
startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);返回的结果在onActivityResult中获取【主要是找到设备蓝牙的address】
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch (requestCode) {
case REQUEST_CONNECT_DEVICE:
if (resultCode == Activity.RESULT_OK) {
// Get the device MAC address
String address = data.getExtras()
.getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
mBluetoothSet.ConnectDevices(address);
super.onActivityResult(requestCode, resultCode, data);
}5:在请求远程蓝牙之前,【onpause】方法中启动远程设备蓝牙服务【作为服务端】
* This thread runs while listening for incoming connections. It behaves
* like a server-side client. It runs until a connection is accepted
* (or until cancelled).
private class AcceptThread extends Thread {
// The local server socket
private final BluetoothServerSocket mmServerS
public AcceptThread() {
BluetoothServerSocket tmp =
// Create a new listening server socket
tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
} catch (IOException e) {
Log.e(TAG, &listen() failed&, e);
mmServerSocket =
public void run() {
if (D) Log.d(TAG, &BEGIN mAcceptThread& + this);
setName(&AcceptThread&);
BluetoothSocket socket =
// Listen to the server socket if we're not connected
while (mState != STATE_CONNECTED) {
// This is a blocking call and will only return on a
// successful connection or an exception
socket = mmServerSocket.accept();
} catch (IOException e) {
Log.e(TAG, &accept() failed&, e);
// If a connection was accepted
if (socket != null) {
synchronized (BluetoothService.this) {
switch (mState) {
case STATE_LISTEN:
case STATE_CONNECTING:
// Situation normal. Start the connected thread.
connected(socket, socket.getRemoteDevice());
case STATE_NONE:
case STATE_CONNECTED:
// Either not ready or already connected. Terminate new socket.
socket.close();
} catch (IOException e) {
Log.e(TAG, &Could not close unwanted socket&, e);
if (D) Log.i(TAG, &END mAcceptThread&);
public void cancel() {
if (D) Log.d(TAG, &cancel & + this);
mmServerSocket.close();
} catch (IOException e) {
Log.e(TAG, &close() of server failed&, e);
6:请求服务端蓝牙设备列表
package com.thread.est527.
import java.util.ArrayL
import java.util.L
import com.thread.est527.R;
import android.app.A
import android.app.ProgressD
import android.bluetooth.BluetoothA
import android.bluetooth.BluetoothD
import android.content.BroadcastR
import android.content.C
import android.content.DialogI
import android.content.I
import android.content.IntentF
import android.os.B
import android.util.L
import android.view.V
import android.view.W
import android.view.View.OnClickL
import android.widget.AdapterV
import android.widget.ArrayA
import android.widget.B
import android.widget.ListV
import android.widget.TextV
import android.widget.AdapterView.OnItemClickL
* This Activity appears as a dialog. It lists any paired devices and devices
* detected in the area after discovery. When a device is chosen by the user,
* the MAC address of the device is sent back to the parent Activity in the
* result Intent.
public class DeviceListActivity extends Activity
// Debugging
private static final String TAG = &DeviceListActivity&;
private static final boolean D =
// Return Intent extra
public static String EXTRA_DEVICE_ADDRESS = &device_address&;
// Member fields
private BluetoothAdapter mBtA
private ArrayAdapter&String& mNewDevicesArrayA
List&String& lstDevices = new ArrayList&String&();
private static Boolean hasD
private ProgressDialog mpDialog =
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
// Setup the window
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_device_list);
// Set result CANCELED incase the user backs out
setResult(Activity.RESULT_CANCELED);
// Initialize the button to perform device discovery
Button scanButton = (Button) findViewById(R.id.button_scan);
scanButton.setOnClickListener(new OnClickListener()
public void onClick(View v)
lstDevices.clear();
doDiscovery();
//v.setVisibility(View.GONE);
// Initialize array adapters. One for already paired devices and
// one for newly discovered devices
mNewDevicesArrayAdapter = new ArrayAdapter&String&(this,
R.layout.device_name,lstDevices);
// Find and set up the ListView for newly discovered devices
ListView newDevicesListView = (ListView) findViewById(R.id.new_devices);
newDevicesListView.setAdapter(mNewDevicesArrayAdapter);
newDevicesListView.setOnItemClickListener(mDeviceClickListener);
// Register for broadcasts when a device is discovered
IntentFilter found_filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, found_filter);
// Register for broadcasts when discovery has finished
IntentFilter discovery_filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(mReceiver, discovery_filter);
// Get the local Bluetooth adapter
mBtAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBtAdapter != null)
doDiscovery();
protected void onDestroy()
super.onDestroy();
// Make sure we're not doing discovery anymore
if (mBtAdapter != null)
mBtAdapter.cancelDiscovery();
// Unregister broadcast listeners
this.unregisterReceiver(mReceiver);
* Start device discover with the BluetoothAdapter
private void doDiscovery()
if (D) Log.d(TAG, &doDiscovery()&);
// Indicate scanning in the title
//setProgressBarIndeterminateVisibility(true);
setTitle(R.string.scanning);
// If we're already discovering, stop it
if (mBtAdapter.isDiscovering())
mBtAdapter.cancelDiscovery();
hasDevices =
// Request discover from BluetoothAdapter
mBtAdapter.startDiscovery();
mpDialog = new ProgressDialog(DeviceListActivity.this);
mpDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//设置风格为圆形进度条
mpDialog.setTitle(&Remind&);//设置标题
mpDialog.setMessage(&Scaning the bluetooth devices...&);
mpDialog.setIndeterminate(false);//设置进度条是否为不明确
mpDialog.setCancelable(true);//设置进度条是否可以按退回键取消
mpDialog.setButton(&Stop&, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
if (mBtAdapter.isDiscovering()){
mBtAdapter.cancelDiscovery();
mpDialog.show();
// The on-click listener for all devices in the ListViews
private OnItemClickListener mDeviceClickListener = new OnItemClickListener()
public void onItemClick(AdapterView&?& av, View v, int arg2, long arg3)
// Cancel discovery because it's costly and we're about to connect
mBtAdapter.cancelDiscovery();
// Get the device MAC address, which is the last 17 chars in the
if (hasDevices){
String info = ((TextView) v).getText().toString();
String address = info.substring(info.length() - 17);
// Create the result Intent and include the MAC address
Intent intent = new Intent();
intent.putExtra(EXTRA_DEVICE_ADDRESS, address);
// Set result and finish this Activity
setResult(Activity.RESULT_OK, intent);
// The BroadcastReceiver that listens for discovered devices and
// changes the title when discovery is finished
private final BroadcastReceiver mReceiver = new BroadcastReceiver()
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
// When discovery finds a device
if (BluetoothDevice.ACTION_FOUND.equals(action))
// Get the BluetoothDevice object from the Intent
BluetoothDevice device = (BluetoothDevice)intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String tempS
if(device.getBondState() == BluetoothDevice.BOND_NONE){
tempString = &Status: UnPaired\n&;
tempString = &Status: Paired\n&;
//添加设备
tempString += device.getName() + &\n&
+ device.getAddress();
//防止重复添加
if (lstDevices.indexOf(tempString) == -1){
lstDevices.add(tempString);
mNewDevicesArrayAdapter.notifyDataSetChanged();
//mNewDevicesArrayAdapter.add(device.getName() + &\n&
+ device.getAddress());
hasDevices =
else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))
// When discovery is finished, change the Activity title
//setProgressBarIndeterminateVisibility(false);
setTitle(R.string.select_device);
if (mNewDevicesArrayAdapter.getCount() == 0)
String noDevices = getResources().getText(
R.string.none_found).toString();
mNewDevicesArrayAdapter.add(noDevices);
hasDevices =
mpDialog.cancel();
7:点击listview中蓝牙设备条目,返回前面的onAtivityResult中,此刻,我手机获取到了服务端的address,主动请求服务端
* 连接蓝牙设备
public void ConnectDevices(final String address){
// Get the BLuetoothDevice object
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
//根据前面获取的address,获取一个BlueToothDevices[代表远程的蓝牙]
// Attempt to connect to the device
mBtService.connect(device);
8:进行蓝牙连接
* This thread runs while attempting to make an outgoing connection
* with a device. It r the connection either
* succeeds or fails.
private class ConnectThread extends Thread {
private final BluetoothSocket mmS
private final BluetoothDevice mmD
public ConnectThread(BluetoothDevice device) {
mmDevice =
BluetoothSocket tmp =
// Get a BluetoothSocket for a connection with the
// given BluetoothDevice
int sdk = Build.VERSION.SDK_INT;
if(sdk &= 10){
tmp = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
Log.e(TAG, &create() failed&, e);
mmSocket =
public void run() {
Log.i(TAG, &BEGIN mConnectThread&);
setName(&ConnectThread&);
// Always cancel discovery because it will slow down a connection
mAdapter.cancelDiscovery();
// Make a connection to the BluetoothSocket
// This is a blocking call and will only return on a
// successful connection or an exception
mmSocket.connect();
} catch (IOException e) {
connectionFailed();
// Close the socket
mmSocket.close();
} catch (IOException e2) {
Log.e(TAG, &unable to close() socket during connection failure&, e2);
// Start the service over to restart listening mode
BluetoothService.this.start();
// Reset the ConnectThread because we're done
synchronized (BluetoothService.this) {
mConnectThread =
// Start the connected thread
connected(mmSocket, mmDevice);
public void cancel() {
mmSocket.close();
} catch (IOException e) {
Log.e(TAG, &close() of connect socket failed&, e);
9:连接成功后即可进行数据读取
* This thread runs during a connection with a remote device.
* It handles all incoming and outgoing transmissions.
private class ConnectedThread extends Thread {
private final BluetoothSocket mmS
private final InputStream mmInS
private final OutputStream mmOutS
public ConnectedThread(BluetoothSocket socket) {
Log.d(TAG, &create ConnectedThread&);
mmSocket =
InputStream tmpIn =
OutputStream tmpOut =
// Get the BluetoothSocket input and output streams
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
Log.e(TAG, &temp sockets not created&, e);
mmInStream = tmpIn;
mmOutStream = tmpO
public void run() {
Log.i(TAG, &BEGIN mConnectedThread&);
byte[] buffer = new byte[1024];
// Keep listening to the InputStream while connected
receiveBuffer = &&;
while (true) {
while(true){
// Read from the InputStream
bytes = mmInStream.read(buffer);
//Log.i(TAG, &收到串口数据: & + (new String(buffer,0,bytes)) + &(& + String.valueOf(bytes) + &)&);
String tempString = new String(buffer,0,bytes);
receiveBuffer += tempS
if (receiveBuffer.endsWith(&\r\n&)){
String strArray[] = receiveBuffer.split(&\r\n&);
for(String stemp:strArray){
//发送显示
mHandler.obtainMessage(BluetoothSet.MESSAGE_READ, stemp.length(), -1, stemp.getBytes())
.sendToTarget();
sleep(10L);
//初始化接收缓存数据
receiveBuffer = &&;
if (mmInStream.available() == 0)
} catch (IOException e) {
Log.e(TAG, &disconnected&, e);
connectionLost();
} catch (InterruptedException e) {
Log.e(TAG, &disconnected&, e);
connectionLost();
* Write to the connected OutStream.
* @param buffer
The bytes to write
public void write(byte[] buffer) {
mmOutStream.write(buffer);
// Share the sent message back to the UI Activity
mHandler.obtainMessage(BluetoothSet.MESSAGE_WRITE, -1, -1, buffer)
.sendToTarget();
}catch (IOException e) {
Log.e(TAG, &Exception during write&, e);
public void cancel() {
mmSocket.close();
} catch (IOException e) {
Log.e(TAG, &close() of connect socket failed&, e);
其实整个流程和google官网提供的流程完全一致,只是有了一个单独的封装而已,具体的demo下载可以直接到速悦得官网去下载附上地址:&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:511636次
积分:4706
积分:4706
排名:第5765名
原创:74篇
转载:32篇
评论:135条
(1)(1)(2)(1)(3)(2)(1)(3)(3)(5)(4)(1)(2)(1)(6)(2)(3)(3)(10)(3)(7)(3)(2)(3)(2)(13)(8)(4)(4)(2)(1)}

我要回帖

更多关于 电脑如何连接蓝牙耳机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信