首先,我想告诉你,我对黑莓的发展是陌生的。
不知何故,我在BB 5.0.0及以上版本中开发了一个应用程序。
我有一个功能来实现我可以下载BB应用程序(如.cod文件)并从我的应用程序中升级它。
升级后的应用程序将保存在我的公司服务器上,当我调用服务器并找到升级版本时,我可以通过编程方式升级它。
我引用了这链接,并最初找到了这里引用
无法用上述解决方案完成此任务。我认为上面的网址解决方案需要BB AppWorld作为中介或升级版本来保存在BB应用服务器上。
请让我知道我是否可以升级我的BB应用程序,从它内部下载和替换,执行一些代码,而不保持它在BB应用世界,如果是,那么我是否可以实现上述链接。
这在安卓和J2ME中是可能的,在iOS中是不可能的,但不知道黑莓的情况。
编辑:
我实现了安装程序的代码,给出的官方黑莓开发者网站,并得到以下例外。看看我的日志。
{"FileSize":2338776,"FileName":"MyApp_3.0.1.cod","LatestBuild":"2","LatestVersion":"3.0.1","DownloadURL":"http://myserver.link/uploads/116/MyApp_3.0.1.cod"}
0:08:38.025: MyApp is being upgraded to version 3.0.1
0:10:31.509: [AppWorld] - 01/23 11:38:00 INFO Updater run() Update check at: Thu Jan 23 11:38:00 GMT 2014
0:10:31.511: [AppWorld] - 01/23 11:38:00 DEBUG AbstractDatabase readDatabase()
0:10:31.513: [AppWorld] - 01/23 11:38:00 DEBUG Updater run() Updater Content Installs 5
0:10:31.516: [AppWorld] - 01/23 11:38:00 DEBUG Connecting to: 80bba47723dae059a32abfff7844cea89fbb7bc1e90e3ed8159e626b8427aeac825047d8b3dbc418dbf3b04b6dfd17a6f063f3d7cd6a0ed860be0c9f81cf58f488916d58a1d5b3fc52f1806693b9f8179b9fc9de5643c62f2bf92f4945716455af200982fa
0:10:31.518: 1618056b5bddb91f830ae1d11076db1ec2adb6
0:10:31.519: [AppWorld] - 01/23 11:38:00 DEBUG Connection Method: DEVICE
0:10:31.940: [AppWorld] - 01/23 11:38:00 INFO AppStoreConnection: HTTP 200 , Content-Length: 2497
0:10:31.942: [AppWorld] - 01/23 11:38:00 INFO Appworld server reporting minimum version: 4.0.0.55 our local version is: 2.1.4.13
0:10:31.944: [AppWorld] - 01/23 11:38:00 22 ERROR An error has occur while updating. Updater load() id1 null
0:10:31.948: VM:PISVt=0,h=4d1e,id=d15a33128dfbb5d9
0:10:31.949: VM:LNTDa=commit,t=1,p=net_rim_bb_appworld_updater,h=135
0:10:31.951: [AppWorld] - 01/23 11:38:00 22 ERROR An error has occur while updating. null
0:10:31.954: VM:PISVt=0,h=4d1e,id=d15a33128dfbb5d9
0:10:31.956: VM:LNTDa=commit,t=1,p=net_rim_bb_appworld_updater,h=135
0:10:31.957: [AppWorld] - 01/23 11:38:00 INFO Updater rescheduleUpdateTime() Attempting to schedule Next Update at Thu Jan 23 12:08:00 GMT 2014
0:10:31.959: AM: App net_rim_bb_appworld_updater is trying to schedule for time: 1390478880504
0:10:31.960: AM: Scheduled net_rim_bb_appworld_updater for 1390478880000
0:10:31.962: [AppWorld] - 01/23 11:38:00 INFO AppWorld Updater Rescheduled @ Thu Jan 23 12:08:00 GMT 2014
0:10:31.971: Process net_rim_bb_appworld_updater(303) cleanup started
0:10:31.972: Process net_rim_bb_appworld_updater(303) cleanup done
0:10:38.055: Exception: java.io.InterruptedIOException: Local connection timed out after ~ 120000 downloading URL: http://myserver.link/uploads/116/MyApp_3.0.1.cod
0:10:38.059: FD Back On
0:10:38.061: Exception during install of MyApp java.lang.NullPointerException
0:10:38.064: MyApp 3.0.1 failed to upgrade.
0:10:38.117: FocusHistory: Focus gained; App net_rim_services_impl; Component net.rim.device.api.ui.component.ButtonField更新
我在我的应用程序中为我的目的保存了安装程序代码:
CodeModuleGroup cmGroup = new CodeModuleGroup(appInfo.getModuleGroupName());
cmGroup.setFriendlyName(appInfo.getModuleGroupFriendlyName());
cmGroup.setVersion(appInfo.getVersion());
cmGroup.setVendor(appInfo.getVendor());
//Download and save all of the cod files.
//for(int count = 0; count < numOfCods; ++count)
//{
byte[] codData = downloadFile(appInfo.getDescriptorURL());
// if (codData != null)
// {
//Create the new cod file.
moduleHandles = CodeModuleManager.createNewModule(codData.length, codData, codData.length);
//Save the module
int result = CodeModuleManager.saveNewModule(moduleHandles, true);
log("Result code :"+result);
//Ensure that the cod file was saved.
if (result != CodeModuleManager.CMM_OK && result != CodeModuleManager.CMM_OK_MODULE_OVERWRITTEN)
{
//The cod file was not saved.
throw new Exception("Failed to save cod."+result);
}
//Add the CodeModule to the CodeModuleGroup.
cmGroup.addModule(CodeModuleManager.getModuleName(moduleHandles)); 我得到的结果= 10是CodeModuleManager.CMM_HANDLE_INVALID,现在由于下一个条件抛出异常等等,现在我发现文件实际上是被下载的,但是当它试图保存时,int result = CodeModuleManager.saveNewModule(moduleHandles, true);在这一行我得到了CMM_HANDLE_INVALID。如果有人知道这个问题,请告诉我。
提前谢谢。
发布于 2014-01-23 13:54:00
您引用了一篇官方的KB文章:
可编程安装升级应用程序ns
这篇文章是这样写的:注意:应用程序本身不能升级。
因此,为了实现您想要做的事情,您必须创建一个安装程序应用程序,如KB文章所述。
这意味着您必须从程序中的公司服务器下载所需的文件,因此您可能会遇到常见的网络问题。我注意到,您在另一个线程中报告了一个超时问题作为评论。很抱歉,你可能需要花点时间让你的网络代码正常工作。
除此之外,您在另一个链接中找到的选项和信息:
在我看来是对你选择的一个相当完整的描述。
更新
我涉水浏览了你提供的日志,并从中找出了一条似乎与此相关的信息:
例外情况: java.io.InterruptedIOException:在~ 120000下载URL:3.0.1.cod后本地连接超时
因此,您有一个网络错误或问题,试图检索鳕鱼。这是一个网络问题,与安装程序完全无关。我建议您了解为什么安装程序试图引用该文件,以及服务器为什么不提供该文件。如果URL是有效的,那么您可能必须更新MIME参数,以便服务器知道.cod文件扩展名应该被视为二进制文件。
进一步更新
您已经对所提供的代码进行了更改,包括删除对同一应用程序的多个cod文件的支持。我可以建议您使用所提供的安装程序和代码来测试下载代码吗?如果您有问题,我们可以更容易地重新创建和/或测试它。
--一项建议
与其这样做,不如由应用程序检查它是否是最新的,如果不是,不要启动,而是启动网页的浏览器,这是当前应用程序的OTA下载。然后,您只需维护OTA -应用程序可以检查jad,以查看其中的版本是否与当前版本相同。您已经编写了有效完成此部分的代码,您可以将其插入应用程序,然后您将不需要安装程序。这只是个想法。
https://stackoverflow.com/questions/21308134
复制相似问题