在通过OTA(BIS)将BlackBerry应用程序安装到用户设备并且该应用程序具有“检查更新”按钮的情况下,一种简单的方法是使用.jad的地址启动浏览器然后该文件将向用户显示“您已安装1.0版,是否要下载并安装1.1版?”对话。但即使没有更新,用户也会得到“你有1.0,你想用1.0对话替换它”,这很麻烦而且没有意义。
有更好的方法以更加无缝的方式执行此操作吗?例如,应用程序是否接受检查服务器更新的方式(在用户许可的情况下),通知用户是否有可用的更新,并安装更新OTA而无需通过浏览器/ jad / ota / replace / restart设备循环?
针对RIM OS 4.1 +
谢谢。
答案 0 :(得分:2)
一种方法是使用应用程序中的HTTP连接获取JAD文件,解析服务器上可用的版本,只有在有更新版本可用时启动浏览器,或者在另外询问用户是否升级之后是理想的。
API中有一些元素可以让你自己获取COD文件并安装模块,但这似乎只是增加了潜在的bug空间,除非你真的需要避免使用Browser OTA安装。 / p>
答案 1 :(得分:2)
一种类似的方法,但我觉得它比Richard上面的想法要好一些,因为客户端不需要这种方式的硬编码JAD路径(因为不同的BB OS版本的JAD文件可能不同,所以很重要):
创建一个简单的网页(php,jsp,servlet,cgi,等等),接受应用名称和当前应用版本作为输入;如果需要,还可以在输入中包含操作系统版本。
客户通过获取适当的数据(详情如下)并将其附加到已知的基本URL来构建此URL。
网页将解析信息,并计算要运行的正确版本。
<强>参考强>
获取应用程序版本
import net.rim.device.api.system.ApplicationDescriptor;
...
// Returns current app version in the format Major.Minor.Minor.Build, eg 1.5.1.123
String version = ApplicationDescriptor.currentApplicationDescriptor().getVersion();
获取硬件和平台信息
import net.rim.device.api.system.ApplicationDescriptor;
...
// Obtain the platform version string in the format A.B.C.DDD, eg 5.0.0.464
String softwareVersion = DeviceInfo.getSoftwareVersion();
// Obtain the hardware name:
String hardwareName = DeviceInfo.getDeviceName();
启动HTTP网址
import net.rim.blackberry.api.browser.Browser;
Browser.getDefaultSession().displayPage("http://example.com");
读取HTTP文件
String url = "full/url/assembled/with/data/above"
// YOU assemble "url" value - and include more error handling than is here in this sample:
HttpConnection conn;
try {
conn = ConnectionHelper.getHttpConnection(url);
LineInputStream stream = new LineInputStream(conn.openInputStream());
String lineOneYesNo = stream.readLine(true);
String lineTwoCurrentVersion = stream.readLine(true))
String lineThreeDownloadURL = stream.readLine(true))
// ***
// * Parse the data above and handle as described.
// ***
return data;
} catch (IOException e) {
// Add appropriate erorro handling here
return;
}
getHttpConnection Implementation
public static HttpConnection getHttpConnection(String URL) throws IOException {
HttpConnection c = null;
StringBuffer conn = new StringBuffer(URL);
// *** IMPORTANT ***
// YOU must define this method below, as it will append
// values to the connection string based on connection
// type (MDS, TCP, WIFI, WAP2, etc)
//
configureConnectionString(conn);
c = (HttpConnection) Connector.open(conn.toString());
int rc = c.getResponseCode();
if (rc != HttpConnection.HTTP_OK) {
throw new IOException("HTTP Error: " + rc);
}
return c;
}
参考:简单的LineInputStream实现
http://svn.bbssh.org/trunk/BBSSH_Common/src/org/bbssh/io/LineInputStream.java
示例输入网址1 此URL由客户端构造并发送到服务器:
http://example.com/versioncheck.do/app-name/hardware-name/os-version/app-version
e.g. http://example.com/versioncheck.do/MyApplication/Bold9000/5.0.466/1.5.1.0
示例输入网址2 同一事物的替代格式:
http://example.com/versioncheck.php?appName=A&hardwareName=B&osVersion=C&appVersion=D
e.g. http://example.com/versioncheck.php?appName=?MyApplication&hardwareName=Bold9000?osVersion=5.0.466&appVersion=1.5.1.0
示例输出
y
1.3.1.125
http://example.com/ota/5.0.0/MyApp.jad