




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、手机蓝牙通信设计 RFCOMM 协议客户端+语音传送与接收最近作相关蓝牙 RFCOMM 协议的东西,下面类主要是针对蓝牙串口协议的客户端,其 中包含了设备的搜索,服务的搜索,以及MMAPI函数的应用,希望通过这个类,能让初学 者掌握基本的设备的搜索,服务的搜索,和蓝牙串口协议以及录音和语音发送播放等:注意HelloMidlet midlet为一个基础设计的界面类,用来调用ClientBox类import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.i
2、o.*;import java.util.Vector;import javax.microedition.io.Connector;import javax.microedition.io.StreamConnection;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.micro
3、edition.lcdui.Gauge;import javax.microedition.lcdui.StringItem;import javax.microedition.lcdui.TextField;/jsr082 APIimport javax.bluetooth.BluetoothStateException;import javax.bluetooth.DeviceClass;import javax.bluetooth.DiscoveryAgent;import javax.bluetooth.DiscoveryListener;import javax.bluetooth.
4、LocalDevice;import javax.bluetooth.RemoteDevice;import javax.bluetooth.ServiceRecord;import javax.bluetooth.UUID;import hello.HelloMidlet;import java.io.InputStream; /import javax.microedition.media.*;import javax.bluetooth.DataElement;/* 客户端 GUI*/public class ClientBox extends Form. implements Runn
5、able, CommandListener, DiscoveryListener / 字串输入框TextField input = new TextField(开始搜索, ,100, TextField.ANY); /编辑框Command com_1 = new Command( 开始通话, Command.SCREEN, 0);Command com_2 = new Command( 停止通话 , Command.SCREEN, 0);/ StringItem result = new StringItem(, );private DiscoveryAgent discoveryAgent;
6、StreamConnection conn;private UUID uuidSet;/响应服务的 UUID/GUIDnewnewprivate static final UUID ECHO_SERVER_UUIDnewnewUUID( 000050020000100080000002ee000001, false);/private static final UUID ECHO_SERVER_UUIDUUID( F0E0D0C0B0A000908070605040302010, true);private static final int attrSet = 0 x0100;/return
7、service name attribute /相应通话按钮的实例private PrimeThread mainThread;/设备集合Vector devices = new Vector();/服务集合Vector records = new Vector();/服务搜索的事务id集合int transIDs;HelloMidlet midlet;public ClientBox(hello.HelloMidlet midlet) super();this.midlet = midlet;/this.append(result);this.addCommand(new Command(”
8、 取消,Command.EXIT, 1); this.addCommand(com_1);this.addCommand(com_2);this.append(input);this.setCommandListener(this);new Thread(this).start();public void commandAction(Command arg0, Displayable arg1) if (arg0.getCommandType() = Command.EXIT) if( mainThread!=null)mainThread.distroy();this.midlet.exit
9、MIDlet(); /midlet.showMainMenu();else if (arg0 = com_1) input.setString(” 通话开始”);Thread fetchThread = new Thread() public void run() for (int i = 0; i records.size(); i+) ServiceRecord sr = (ServiceRecord) records.elementAt(i); javax.bluetooth.DataElement de = (DataElement)sr.getAttributeValue(0 x01
10、00); String serverName = (String)de.getValue();/*if(serverNpareTo(CKCService) 0) else if( !serverName.equals(CKCService) )continue ;*/if (accessService(sr) break;fetchThread.start(); else if(mainThread != null) mainThread.distroy();input.setStringC 通话结束);private boolean accessService(ServiceRecord s
11、r) boolean result = false; try String url = sr.getConnectionURL( ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false); conn = (StreamConnection) Connector.open(url); / mainThread = new PrimeThread(conn,this); mainThread.start(); result = true;catch (IOException e) return result;public void showInfo( Strin
12、g s) this.input.setString(s);public synchronized void run() /发现设备和服务的过程中,给用户以 GaugeGauge g = new Gauge(null, false, Gauge.INDEFINITE, Gauge.CONTINUOUS_RUNNING); this.append(g);showInfo( 蓝牙初始化.);boolean isBTReady = false;try LocalDevice localDevice = LocalDevice.getLocalDevice();discoveryAgent = loca
13、lDevice.getDiscoveryAgent();isBTReady = true;catch (Exception e) e.printStackTrace();if (!isBTReady) showInfo( 蓝牙不可用);/ 删除 Gaugethis.delete(1);return;uuidSet = new UUID2;/标志我们的响应服务的 UUID 集合 uuidSet0 = new UUID(0 x0100);/ uuidSet0 =ECHO_SERVER_UUID; uuidSet1 = ECHO_SERVER_UUID;try discoveryAgent.star
14、tInquiry(DiscoveryAgent.GIAC, this);catch (BluetoothStateException e) try /阻塞,由inquiryCompleted()回调方法唤醒wait();catch (InterruptedException e1) e1.printStackTrace();if (devices.size() 0) RemoteDevice rd1 = (RemoteDevice) devices.elementAt(0); String name = ;try name = rd1.getFriendlyName(true); catch
15、(IOException ex) ex.printStackTrace();showinfo (设备搜索完毕,共找到+ devices.size() + 个设备,Name= + name.toString() + 开始搜索服务);else showinfo(设备搜索完毕,共找到0个设备,不能提供服务。);transIDs = new intdevices.size();for (int i = 0; i 0) DataElementserviceNameElement=(ServiceRecord)records.elementAt(0).getAttributeValue(0 x0100);
16、/get the Service NameString serviceName = (String)serviceNameElement.getValue();showInfo( 服 务 搜 索 完 毕 , 共 找 到 + records.size() + 个 服 务 ,Name =+serviceName.toString();this.addCommand(new Command(” 开始说话,Command.OK, 3);else showInfo(服务搜索完毕,共找到+ records.size() + 个服务+n+,服务搜索完毕,没有 找到服务。 );/删除 Gaugethis.de
17、lete(1);public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) if (devices.indexOf(btDevice) = -1) devices.addElement(btDevice);public void inquiryCompleted(int discType) synchronized (this) notify();public void servicesDiscovered(int transID, ServiceRecord servRecord) for (int i = 0;
18、i servRecord.length; i+) records.addElement(servRecordi);public void serviceSearchCompleted(int transID, int respCode) for (int i = 0; i transIDs.length; i+) if (transIDsi = transID) transIDsi = -1;break;/如果所有的设备都已经搜索服务完毕,则唤醒初始化线程。boolean finished = true;for (int i = 0; i transIDs.length; i+) if (tr
19、ansIDsi != -1) finished = false;break;if (finished) synchronized (this) notify();class PrimeThread extends Thread private java.io.DataOutputStream dos;private java.io.DataInputStream dis;ClientBox cbs;Player register;Player play;javax.microedition.media.control.RecordControl rc;StreamConnection conn
20、 ;PrimeThread(StreamConnection conn ,ClientBox c ) this.conn = conn;cbs = c;public void run() tryregister = Manager.createPlayer(capture:/audio);register.realize();rc (javax.microedition.media.control.RecordControl)register.getControl(RecordControl); dos = conn.openDataOutputStream();rc.setRecordStr
21、eam(dos);cbs.input.setString(” 开始录音);rc.startRecord();register.start();this.currentThread().sleep(3000);mit();register.close();cbs.input.setString(” 录音结束”);dos.close();this.currentThread().sleep(1000);dis = conn.openDataInputStream();byte arry = new byte44032;cbs.input.setString(” 开始接收数据”);for( int i = 0;i43;i+) if(i = 43) dis.read(arry,i*1024,44844-(1024*i);cbs.input.setString(开始接收数据+i); else dis.read(arry,i*1024,1024);cbs.input.setString(开始接收数据+i);dis.close();cbs.input.setString( cbs.input.getString()+接收数据结束”);ByteArrayInputStream baInputs = new ByteArrayInputS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨国公司财务管理中的现金流管理
- 高效能工作环境下安全操作流程的生产计划制定
- 跨境电商平台用户行为分析与营销策略优化
- 高中语文作文甩开步子踏出精彩人生
- 高效能办公人员的体能提升策略
- 财务风险管理在医疗领域的应用
- 高效筹备学校运动会的策略与实践
- 时尚耳环售后合同范本
- 跨文化交流中的语言学习与适应
- 质押融资合同范本
- 高中雷雨完整省公开课金奖全国赛课一等奖微课获奖课件
- 施工现场安全标准化施工手册(汇编)
- 《串珠》教案-2024鲜版
- 药物超敏反应综合征并人类免疫缺陷病毒感染1例及文献复习
- 经济数学(高等职业)全套教学课件
- 口腔种植学试题
- 网络传播概论(彭兰第5版) 课件全套 第1-8章 网络媒介的演变-网络传播中的“数字鸿沟”
- 口服止痛药物健康宣教
- 超载限位器调试报告
- 智能微电网应用技术
- 被执行人生活费申请书范文
评论
0/150
提交评论