如何在不配对的情况下在远程设备中安装 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将其添加到目录的情况下在多个团队中安装机器人?

如何在不使用 pip 的情况下在 Linux 终端中查看 pysnmp 版本

Linux命令行如何接受没有pin的蓝牙设备配对

如何在没有 root 用户的情况下在 Linux (CentOS) 中安装软件包并进行自动依赖处理?

如何允许远程访问 PostgreSQL 数据库

如何在不使用 artisan 的情况下在远程 ubuntu 服务器上连接 Laravel 7.12 项目的数据库