如何在不配对的情况下在远程设备中安装 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 版本