j2me蓝牙连接

客户端:

首先:初始化蓝牙

private LocalDevice localDevice; //本地设备实例
String localBTAddress; //本地蓝牙地址
String localBTName; //蓝牙名称
DiscoveryAgent agent; //发现代理

transIDs = new int[devices.size()]; //保存搜索到的设备ID

try
{localDevice = LocalDevice.getLocalDevice();//取得本地设备实例
localBTAddress = localDevice.getBluetoothAddress();//记录蓝牙地址
localBTName = localDevice.getFriendlyName(); //记录蓝牙名称
agent = localDevice.getDiscoveryAgent(); //取得蓝牙代理
} catch(Exception e){
System.err.println(“初始化蓝牙设备失败: ”+e); }

其次:利用蓝牙代理搜索设备和服务

discoveryAgent.startInquiry(DiscoveryAgent.GIAC,this); wait(); //等待synchronized 块

transIDs[i] = discoveryAgent.searchServices(attrSet, uuids,rd, this); wait();

实现DiscoveryListener 接口 :

public void deviceDiscovered() {remoteDevice.getFriendlyName(false);}//发现设备时调用,保存设备名

public void inquiryCompleted() {synchronized (this) {notify();}} //设备搜索结束时调用,唤醒线程

public void servicesDiscovered(){vector.addElement(serviceRecord[i]);}//发现服务时调用,保存serviceRecord

public void serviceSearchCompleted(){synchronized (this) {notify();}} //服务搜索结束时调用,唤醒线程

第三:与服务器连接(需要服务器创建连接之后才有效)

String url = serviceRecord.getConnectionURL(int requiredSecurity,boolean mustBeMaster);
L2CAPConnection con = (L2CAPConnection)Connector.open(url);



服务器端:

首先:初始化蓝牙(同客户端,只不过多了一条设置服务可发现!)

private LocalDevice localDevice; //本地设备实例
String localBTAddress; //本地蓝牙地址
String localBTName; //蓝牙名称
DiscoveryAgent agent; //发现代理

try
{localDevice = LocalDevice.getLocalDevice();//取得本地设备实例
if(! localDevice.setDiscoverable(DiscoveryAgent.GIAC)){//设置服务器可发现 return false; }
localBTAddress = localDevice.getBluetoothAddress();//记录蓝牙地址
localBTName = localDevice.getFriendlyName(); //记录蓝牙名称
agent = localDevice.getDiscoveryAgent(); //取得蓝牙代理
} catch(Exception e){
System.err.println(“初始化蓝牙设备失败: ”+e); }

其次:创建服务器端连接

L2CAPConnectionNotifier notifier = (L2CAPConnectionNotifier) Connector.open(localBTAddress);//建立一个连接, 同时创建一个蓝牙服务

L2CAPConnection con = notifier.acceptAndOpen();//自动将服务注册到蓝牙发现数据库中(SDDB), 之后该服务就可以被客户端搜索了


总结步骤:

① 服务器和客户端同时初始化(服务器端设置服务发现localDevice.setDiscoverable,客户端需获得发现代理DiscoveryAgent )。

②服务器端通过Connector.open(URL【自定义的】) 强制转换成L2CAPConnectionNotifier 或StreamConnectionNotifier 建立一个连接, 同时创建一个蓝牙服务。然后调用acceptAndOpen()方法, 该方法会自动将服务注册到蓝牙发现数据库中(SDDB), 之后该服务就可以被客户端搜索了。——>属于服务器的初始化范围内的

③客户端利用蓝牙代理搜索设备和服务,同时用DiscoveryListener 接口获得 RemoteDevice、ServiceRecord实例对象。

④客户端再通过Connector.open(URL【通过serviceRecord.getConnectionURL()取得的】)强制转换成L2CAPConnection 或StreamConnection 建立一个连接。

客户端:

首先:初始化蓝牙

private LocalDevice localDevice; //本地设备实例
String localBTAddress; //本地蓝牙地址
String localBTName; //蓝牙名称
DiscoveryAgent agent; //发现代理

transIDs = new int[devices.size()]; //保存搜索到的设备ID

try
{localDevice = LocalDevice.getLocalDevice();//取得本地设备实例
localBTAddress = localDevice.getBluetoothAddress();//记录蓝牙地址
localBTName = localDevice.getFriendlyName(); //记录蓝牙名称
agent = localDevice.getDiscoveryAgent(); //取得蓝牙代理
} catch(Exception e){
System.err.println(“初始化蓝牙设备失败: ”+e); }

其次:利用蓝牙代理搜索设备和服务

discoveryAgent.startInquiry(DiscoveryAgent.GIAC,this); wait(); //等待synchronized 块

transIDs[i] = discoveryAgent.searchServices(attrSet, uuids,rd, this); wait();

实现DiscoveryListener 接口 :

public void deviceDiscovered() {remoteDevice.getFriendlyName(false);}//发现设备时调用,保存设备名

public void inquiryCompleted() {synchronized (this) {notify();}} //设备搜索结束时调用,唤醒线程

public void servicesDiscovered(){vector.addElement(serviceRecord[i]);}//发现服务时调用,保存serviceRecord

public void serviceSearchCompleted(){synchronized (this) {notify();}} //服务搜索结束时调用,唤醒线程

第三:与服务器连接(需要服务器创建连接之后才有效)

String url = serviceRecord.getConnectionURL(int requiredSecurity,boolean mustBeMaster);
L2CAPConnection con = (L2CAPConnection)Connector.open(url);



服务器端:

首先:初始化蓝牙(同客户端,只不过多了一条设置服务可发现!)

private LocalDevice localDevice; //本地设备实例
String localBTAddress; //本地蓝牙地址
String localBTName; //蓝牙名称
DiscoveryAgent agent; //发现代理

try
{localDevice = LocalDevice.getLocalDevice();//取得本地设备实例
if(! localDevice.setDiscoverable(DiscoveryAgent.GIAC)){//设置服务器可发现 return false; }
localBTAddress = localDevice.getBluetoothAddress();//记录蓝牙地址
localBTName = localDevice.getFriendlyName(); //记录蓝牙名称
agent = localDevice.getDiscoveryAgent(); //取得蓝牙代理
} catch(Exception e){
System.err.println(“初始化蓝牙设备失败: ”+e); }

其次:创建服务器端连接

L2CAPConnectionNotifier notifier = (L2CAPConnectionNotifier) Connector.open(localBTAddress);//建立一个连接, 同时创建一个蓝牙服务

L2CAPConnection con = notifier.acceptAndOpen();//自动将服务注册到蓝牙发现数据库中(SDDB), 之后该服务就可以被客户端搜索了


总结步骤:

① 服务器和客户端同时初始化(服务器端设置服务发现localDevice.setDiscoverable,客户端需获得发现代理DiscoveryAgent )。

②服务器端通过Connector.open(URL【自定义的】) 强制转换成L2CAPConnectionNotifier 或StreamConnectionNotifier 建立一个连接, 同时创建一个蓝牙服务。然后调用acceptAndOpen()方法, 该方法会自动将服务注册到蓝牙发现数据库中(SDDB), 之后该服务就可以被客户端搜索了。——>属于服务器的初始化范围内的

③客户端利用蓝牙代理搜索设备和服务,同时用DiscoveryListener 接口获得 RemoteDevice、ServiceRecord实例对象。

④客户端再通过Connector.open(URL【通过serviceRecord.getConnectionURL()取得的】)强制转换成L2CAPConnection 或StreamConnection 建立一个连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值