我正在开发一个J2ME应用程序,以便在公共区域运行,例如超市,购物中心等。所以,我希望能够通过蓝牙在附近的每个手机上安装我的应用程序。我的目的是创建一个单独的J2SE应用程序来执行设备发现并查找OBEX服务。之后,请用户安装该应用程序。
我尝试过使用javax.microedition.io.Connector,但它总是需要双方(客户端和服务器)密钥。
OBEXClientSessionImpl conn = (OBEXClientSessionImpl) Connector.open(serviceUrl);
我还找到了obex-install,这可以做我想要的但配对问题仍然存在。
有没有办法通过蓝牙以编程方式发送/安装.jar文件而无需配对或使用固定的PIN码,所以我不能在服务器端重复它?
提前致谢, 费尔南多
答案 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
)。