java 板


LINE

版权说明: 转载可以,但请不要无断转载(就是要留下我的id啦) 适用范围: J2SE、J2ME、J2EE(我不知道可不可以,但是似乎也不需要) 前言: 在版上浏览也一阵日子了,发现或者是版面上文章均没有提到 如何撰写一个利用蓝牙来沟通的Java程式。几经摸索後,终於写出个 稍微像样的蓝牙程式。所以我打算留下些纪录,让後来需要使用蓝牙 的人能够少一些摸索的时间。 欢迎看完此篇教学的朋友们,有疑问有质疑请直接在版上回文。讨论 只会激起更多的学习火花! 这是非常粗略的教学,请大家手下留情阿!! 正名: Bluetooth == 蓝牙 、不是蓝芽喔 本文写作目标: 我不以探讨蓝牙的架构为出发点,而是以一个如何快速上手蓝牙程式 撰写为目标。我将在文末附上一些参考资料,让有兴趣想要研究更深刻 一点的人能够有延伸阅读的机会。 另外,我目前只打算写Client端的部分,Server端的就请各位自己看 参考资料。(看懂Client端在干嘛,Server端就不是问题噜) 简易蓝牙概念说明: 要先告诉程式你本身的蓝牙装置在哪里,叫啥名字 LocalDevice local=LocalDevice.getLocalDevice(); 接着请你的local指派出一个探员 DiscoveryAgent agent=local.getDiscoveryAgent(); 你告诉探员:去吧,找出在我可触及的范围内有哪些蓝牙装置(RemoteDevice) agent.startInquiry(DiscoveryAgent.GIAC,this); 一旦探员搜寻到装置,他会帮忙呼叫deviceDiscovered这个method 此时你要想办法把搜寻到的装置丢到一个篮子里记录起来。 当你的探员发现所有能被发现的装置都找到了,他会呼叫inquiryCompleted 可是呢,探员发现一件事情:光有装置好像没啥用处,我得要知道各个装置 有啥技能阿!(ex:会A2DP 、会档案传输...etc) 所以探员就先设定了一个"清单",打算再出门去一个装置一个装置地探访 //清单 int[] attributes = {0x100,0x101,0x102}; UUID[] uuids = new UUID[1]; uuids[0] = new UUID(0x1002); //0x1002表示公开可被搜寻的"技能" //出门去找服务 agent.searchServices(attributes,uuids,RemoteDevice,this); 针对RemoteDevice找到他所有的技能了,探员很开心地呼叫servicesDiscovered 并把找到的技能丢到另外一个篮子里存起来 当全部的技能都被找到了,探员又呼叫了serviceSearchCompleted 告诉自己:终於把事情都做完了,可以安安心心地回家啦 主要内容: 以程式码片段来说明我想是最合适的方法。GUI介面的程式码将不会出现在 以下的说明中以免混淆视听。 import javax.bluetooth.*; public class BluetoothConnection implements DiscoveryListener{} 蓝牙本身的搜寻机制就是Listener的机制,叫做DiscoveryListener。这个Inter- face 包括了四个abstract的method,分别是 1. public void deviceDiscovered(RemoteDevice remoteDevice,DeviceClass deviceClass) { //如果搜寻中找到一个装置,就由JVM代为呼叫此method,通常在此method中 //我们会把remoteDevice丢到一个Vector内做储存的动作 } 2. public void inquiryCompleted(int param) { //当搜寻结束(在蓝牙可搜寻到的范围内没有新的装置时,称为结束) //JVM呼叫此Method } 3. public void servicesDiscovered(int transID,ServiceRecord[] serviceRecord) { //每"一个"装置找到所有services便由JVM呼叫此method } 4. public void serviceSearchCompleted(int transID, int responseCode) { //所有的装置的service都被找到了,JVM呼叫此method } 那接下来呢? 是的,其实蓝牙这只是这麽一回事。重点是写程式的人要知道你要搜寻 什麽样的装置:蓝牙耳机、蓝牙键盘、蓝牙滑鼠...等。而这些装置有 什麽样的服务:档案传输、USB模拟..etc 我们就可以针对特定的 1. 装置 2. 服务 进行连线(配对)的动作 嘿嘿,说到连线是不是还少了些什麽呢?没错,就是URL。那URL怎麽来? URL=serviceRecord.getConnectionURL(ServiceRecord.AUTHENTICATE_ENCRYPT,false); 只要存取搜寻到的serviceRecord就可以利用getConnectionURL来回传连线用 的URL。接着配合 conn = (StreamConnection) Connector.open(URL); os = conn.openDataOutputStream(); is = conn.openDataInputStream(); 想要接收传送资料都不成问题了。 参考资料: //我写的程式码,大量参考 参考资料2 的内容。 参考资料1: 此程式是针对蓝牙的"名称"来做搜寻依据,而且所搜寻的服务乃是 序列埠服务(俗称RS232),可以依照自己需求看看参考资料二来修改 http://www.badongo.com/file/12430688 参考资料2: 某个外国大学的强者所写的论文。我放到便当狗去 http://www.badongo.com/file/12430554 档名:Masteroppgave.pdf 参考资料3: Nokia官方教学,里面提到的观念与参考资料二略有不同,参考看看吧 http://www.forum.nokia.com/info/sw.nokia.com/id/125b7ff5-f2dd-4441- 8cfe-59e23c006373/MIDP_Bluetooth_API_Developers_Guide_v2_0_en.pdf.html == http://0rz.tw/e65bh 後话: 我省略了很多东西都没有提,因为这个蓝牙的架构实在是太大了。我想先提 供一点入门的讯息及程式码,让各位能够看的懂其他的资料,足矣。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.14.82
1F:推 jack21:用心~不推不行 12/11 23:22
2F:推 KOFXI:还不错~~ 感谢推^^ 12/12 00:08
3F:推 f953024:推~用心教学^^ 12/12 00:56
4F:推 runtime:不过我觉得在J2SE上提供的API有点鸡勒 不是很稳 12/12 04:36
5F:→ runtime:一层包一层 (ex:蓝芽棒附的软体) 用起来真的很麻烦 12/12 04:37
6F:→ ixxogux:runtime你蓝牙棒要买随插即用的就不用软体啦.. @_@ 12/12 06:57
7F:推 AI3767:感谢教学^^ 12/13 00:03
8F:推 cates:大推阿!!!为啥不早点PO 我浪费了很多时间找范例QQ 12/13 02:59
9F:→ ixxogux:因为我还没有搞懂之前不敢乱教阿...现在希望对你有用处 12/13 22:36
10F:推 imphs:专题看不懂弄好久~可惜已经毕业啦QQ~ 12/16 13:39
11F:推 moonjuice:好文推一个 12/17 22:57
12F:推 KanoLoa:太棒了! 02/25 16:44
13F:推 xpecial:超好笑的 11/04 17:08
14F:推 nigelchang:很好的教学 感谢推 03/01 13:53
15F:推 tyantmf:GOOD!!!!!! 01/06 15:00







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job 或 站内搜寻

TOP