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

时间:2009-12-07 14:22:36

标签: java java-me bluetooth

我正在开发一个J2ME应用程序,以便在公共区域运行,例如超市,购物中心等。所以,我希望能够通过蓝牙在附近的每个手机上安装我的应用程序。我的目的是创建一个单独的J2SE应用程序来执行设备发现并查找OBEX服务。之后,请用户安装该应用程序。

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

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

我还找到了obex-install,这可以做我想要的但配对问题仍然存在。

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

提前致谢, 费尔南多

3 个答案:

答案 0 :(得分:1)

使用http OTA下载会更容易。把你的j2me jar文件放在一个网站上,然后你可以让你的客户端重定向到这个网站下载jar文件。你不需要传递密钥来进行OTA下载。

答案 1 :(得分:1)

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

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

    // @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

答案 2 :(得分:0)

你想要做的事情(通过OBEX将文件发送到移动设备)应该完全没有配对。听起来您正在尝试使用身份验证进行连接。

尝试在您的连接网址中加入参数“authenticate=false”(例如btgoep://0123456789abcde:1;authenticate=false)。