快速业务通道

在Java ME中通过蓝牙发现设备并传送文件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

在Java ME中通过蓝牙发现设备并传送文件

时间:2011-10-07 IT专家网

在Java ME设备上执行蓝牙应用程序的首要步骤之一就是发现过程(discovery process)。简而言之就 是,发现过程就是带有蓝牙的设备互相找到彼此的过程,然后一起携手找出它们各个可以支持的服务。下 一步就是要学习如何在这些两两设备之间传送数据。

在本篇技术小文章中,我将向你展示如何创建一个可以互相查找设备的一个MIDlet,然后让用户发送 一个简单的消息到其中一个被找到的设备中。我已经在Nokia N95的机器上测试并核实了这个MIDlet的工 作了,通过启用蓝牙支持,它可以连接到一个运行Windows Vista的电脑上。

我把整个过程分成以下几个步骤:

1. 开始发现过程。

2. 查询在发现过程中找到的设备所支持的服务。

3. 使用支持服务的URL开始并处理一个OBEX数据交换。

以下各段将详细说明这些步骤。在这些步骤中遵循代码片段可以查阅这个MIDlet的整个源代码。源代 码可以在最后的Resources下的压缩文件中获得。

第一步:开始发现过程

发现过程是用来告诉本地蓝牙堆栈可以和在附近任何蓝牙设备进行配对。在这个MIDlet中,这个堆栈 可以通过你的设备提供者所提供的JSR 82来完成。这个发现过程通过发现在本地设备中的代理来开始的, 如以下代码所示:

// get the local discovery agent   agent = LocalDevice.getLocalDevice ().getDiscoveryAgent();   // start the inquiry for general unlimited inquiry   agent.startInquiry(DiscoveryAgent.GIAC, this);

一旦发现代理启动发现过程,它将在一个执行DiscoveryListener接口的类上调用各种调回方法。就我 们而言,这是我们的MIDlet类。

具体来说,必须执行这个接口的四个方法,其中两个是在发现阶段我们所感兴趣的: deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) 和 inquiryCompleted(int discType)。 这两个方法处理一个设备的发现并完成发现过程。在以下所展示的来自MIDlet的代码中,一旦它们被发现 或是当程序结束的时候,我们使用这些方法来添加我们的设备上的UI。

public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {   try {   // add the devices using the friendly names   listofDevices.append (btDevice.getFriendlyName(false), null);   // add to the devices hashtable   devices.put(new Long(listofDevices.size()), btDevice);   } catch(Exception ex) { handleError(ex); }   }   public void inquiryCompleted(int discType) {   // once the inquiry is completed, show the list of devices to the user   if(listofDevices.size() == 0) {   display.setCurrent(nothing, noteBox);   } else {   display.setCurrent(listofDevices);   }       }

在Java ME中通过蓝牙发现设备并传送文件(2)

时间:2011-10-07 IT专家网

第二步: 在已发现的设备上开始服务发现(service discovery)

由于本文的目的是让数据从我们的MIDlet中传输到一个兼容的设备上,我们需要在已发现的设备上找 到这些服务来实现这个目标。为了达到这个目的,我们需要在服务发现过程中定义正确的属性和UUIDs。 以下代码将显示如何来做这个:

agent.searchServices(   null,   new UUID[] {new UUID(0x1105L)}, // we want the OBEX PUSH Profile   device,   this);

正如你所猜到的,这些代码使用我们以前用过的本地代理来查找设备。我们不是在一组特定的属性之 后,所以我们需要用null作为第一个参数,但是UUID必须是OBEX PUSH配置文件,因为这是传输数据的一 个最开放式的方法。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号