




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北交通职业技术学院《民族与文化地理》2023-2024学年第一学期期末试卷
- 重庆五一职业技术学院《临床微生物学检验(一)》2023-2024学年第二学期期末试卷
- 怀化学院《文化哲学》2023-2024学年第一学期期末试卷
- 涿鹿县2024-2025学年三年级数学第二学期期末综合测试试题含解析
- 绵阳市江油市2025届数学四年级第二学期期末调研模拟试题含解析
- 湖南省浏阳市浏阳河中学2024-2025学年初三年级模拟考试(一)语文试题含解析
- 上海市闵行区24校联考2025届初三下学期期中练习化学试题试卷含解析
- 新乡医学院《铸造工艺与装备》2023-2024学年第二学期期末试卷
- 采购合同履行合同管理标准更新重点基础知识点
- 2025年工人个人工作总结范文(12篇)
- 2024年药学服务技能大赛(省赛)备考试题库(含答案)
- 教科版科学四下《1.8凤仙花的一生》课件
- 第10课 养成遵纪守法好习惯(课时2)(课件)-【中职专用】中职思想政治《职业道德与法治》高效课堂课件+教案(高教版2023·基础模块)
- 自然资源调查监测技能竞赛理论考试题库大全-中(多选题)
- 初中地理实验设计案例
- 读《孟尝君传》课件
- 2024AHA心肺复苏指南解读
- 2025年4月自考03009精神障碍护理学押题及答案
- 人教版数学七年级上册1.2.2《数轴》训练习题(有答案)
- 建筑工程《拟投入本项目的主要施工设备表及试验检测仪器设备表》
- 医院医保季度分析报告总结
评论
0/150
提交评论