如何在不配对的情况下在远程设备中安装 J2ME .jar 文件?

Posted

技术标签:

【中文标题】如何在不配对的情况下在远程设备中安装 J2ME .jar 文件?【英文标题】:How to install J2ME .jar files in remote devices without pairing? 【发布时间】:2009-12-07 14:22:35 【问题描述】:

我正在开发一个 J2ME 应用程序以在公共场所运行,如超市、购物中心等。因此,我希望通过蓝牙将我的应用程序安装在附近的每部手机上。我的目的是创建一个单独的 J2SE 应用程序来执行设备发现并寻找 OBEX 服务。之后,要求用户安装应用程序。

我尝试过使用 javax.microedition.io.Connector,但它总是需要双方(客户端和服务器)的密码。

OBEXClientSessionImpl conn = (OBEXClientSessionImpl) Connector.open(serviceUrl);

我还找到了obex-install,它可以满足我的需求,但配对问题仍然存在。

有没有办法通过蓝牙以编程方式发送/安装 .jar 文件,无需配对或使用固定 PIN 码,因此我无法在服务器端重复它?

提前致谢, 费尔南多

【问题讨论】:

可能相关:uberthings.com/mobile/#provisioning 【参考方案1】:

我开发了一个 java 应用程序,使用 bluecove 完全按照您的设想(扫描并尝试将文件传输到找到的所有设备),它在初始测试中运行良好。我正在考虑在中期内将该工具开源或出售。

回答你的问题我使用的是这样的(简化版):

    // @todo: scan for devices
    // @todo: for each device search obex push service
    String deviceObexUrl = serviceRecords[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);

    // send file
    ClientSession clientSession = (ClientSession) Connector.open(deviceObexUrl);
    HeaderSet hsConnectReply = clientSession.connect(null);
    if (hsConnectReply.getResponseCode() != ResponseCodes.OBEX_HTTP_OK) 
        return false;
    

    byte data[] = readAllFile(file);

    HeaderSet headerSet = clientSession.createHeaderSet();
    headerSet.setHeader(HeaderSet.NAME, file.getName());
    headerSet.setHeader(HeaderSet.TYPE, mimeType);
    headerSet.setHeader(HeaderSet.LENGTH, new Long(data.length));
    Operation op = clientSession.put(headerSet);

    OutputStream outputStream = op.openOutputStream();
    // @todo: write all data and close outputStream, op and clientSession

【讨论】:

谢谢 rjlopes。但是我的手机总是需要一个 PIN 码才能连接到它的服务。有什么方法可以避免这种行为吗? NOAUTHENTICATE_NOENCRYPT 应该可以,但我没有在所有手机上测试:bluecove.org/bluecove/apidocs/javax/bluetooth/…【参考方案2】:

使用http OTA下载会更容易。将您的 j2me jar 文件放在网站上,然后您可以让您的客户端重定向到该网站以下载 jar 文件。您不需要 OTA 下载的密码。

【讨论】:

谢谢史蒂夫,但我正在寻找蓝牙解决方案。【参考方案3】:

您尝试执行的操作(通过 OBEX 将文件发送到移动设备)应该完全可以在没有配对的情况下完成。听起来您正在尝试使用身份验证进行连接。

尝试在您的连接 URL 中包含参数“authenticate=false”(例如btgoep://0123456789abcde:1;authenticate=false)。

【讨论】:

funkybro,我的服务已经包含了这个参数。 btgoep://001BAFE7B45F:11;authenticate=false;encrypt=false;master=false

以上是关于如何在不配对的情况下在远程设备中安装 J2ME .jar 文件?的主要内容,如果未能解决你的问题,请参考以下文章