【问题标题】:how to create a system update for my mobile app [closed]如何为我的移动应用程序创建系统更新 [关闭]
【发布时间】:2012-09-12 08:38:48
【问题描述】:

我正在开发一款适用于 Android 和 BlackBerry 的移动应用程序。

我已通过将版本代码和版本名称包含在服务器上的纯文本文件中,上传了用于 OTA 安装的最新应用程序。

在我的应用程序中,如何将代码版本和版本名称从服务器上的纯文本格式转换为字符串。我想这样做是为了让应用程序将它的当前版本与服务器上可用的版本进行比较,这样如果服务器上有更新的版本,就会为用户提供下载更新。

【问题讨论】:

    标签: android blackberry updates


    【解决方案1】:

    假设您将文件上传到服务器,其中包含一行:

    1.2.3.4
    

    Android 和 BB 的流程类似:

    1- 从服务器检索文件。结果可能是一个字节数组。

    2- 将其转换为具有正确编码的字符串。如果 txt 仅包含数字和点,则编码并不重要,因为它们是 ASCII 字符,并且 ASCII 字符与大多数常用的默认编码(如 UTF-8 和 ISO-8859)兼容。所以我们可以在不处理编码的情况下实例化字符串,就像这样:String fileContent = new String(byte[] downloadedData)。否则,请确保您事先知道 txt 文件编码并使用该编码实例化字符串。

    3- 使用点作为分隔符拆分字符串。在 Android 中,您可以这样做:String[] splitted = String.split(fileContent, '.'),或使用StringTokenizer。在 BB 中,由于它基于 CLDC,因此 String 中的此方法不可用,因此您应该自己编写代码,或者使用/移植一个经过良好测试的库(如 Apache Commons 的 org.apache.commons.lang3.StringUtils.split )。在这一步之后,您将拥有一个字符串数组,每个字符串都是一个数字(示例中为 {"1","2","3","4"})。

    4- 现在创建一个长度相同的 int 数组,并将数组中的每个字符串转换为其等效的 int,在每个元素 i 上使用 Integer.parseInt(splitted[i])

    5- 获取应用的版本并执行相同的步骤来获取 int 数组。在BB,您可以拨打ApplicationDescriptor.currentApplicationDescriptor().getVersion()。在 Android 中,PackageInfo.versionCodePackageInfo.versionName,取决于您在清单中指定的内容。

    6- 注意两个数组不需要具有相同的长度。您可以在 txt 中写入“1.2.3.4”,但在 AndroidManifest.xml 或 BlackBerry_App_Descriptor.xml 中包含“1.2.3”。将两个生成的 int 数组标准化为具有相同的长度(较长的数组的长度),并用零填充添加的元素。现在您将拥有两个 int 数组(在示例中,txtVersion = {1,2,3,4} 和 appVersion = {1,2,3,0})。逐一迭代比较版本。规则是:如果 txtVersion[i] > appVersion[i],那么你已经过时了,需要升级。

    【讨论】:

    • 太酷了,理论上我明白了,但还是没有出路,你能不能给我一个解决方案?如果您提供实现代码,我会很高兴:)
    • 你哪里有问题?
    • android 已修复 :),但我需要您对黑莓的帮助:)
    【解决方案2】:

    此答案仅适用于 android 部分。

    要从您的应用程序中获取应用程序版本号和名称,您可以执行以下操作(如 @ColorWP.com 建议的那样

    获取应用版本和名称:

    String version_number = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
    String version_name = getPackageManager().getPackageInfo(getPackageName(), 0).versionNumber;
    

    从网上读取您的文件:

    URL url = new URL("http://www.your.site/your.txt");
    URLConnection connect = url.openConnection();
    
    BufferedReader txtreader = new BufferedReader(new InputStreamReader(connect.getInputStream()));
    String line = txtreader.readLine();
    while (line != null) {
        /* Code to Read your variables in this loop 
          (let us assume these would be:
          server_app_version
          server_app_name)
        */
     }
    

    确保按照@ColorWP.com 的建议添加 Internet 权限

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    

    比较版本:

    if (server_app_version.compareTo(version_number) != 0 || server_app_name.compareTo(version_name) != 0){
        // Notify user to download the new version
    }
    

    【讨论】:

    • 我忘记了我的应用不会上传到 google play 或应用世界,但我会将其上传到我的网站,例如,这是我的 url,其中包含版本代码的描述“@987654323 @" 我如何访问该 URI,以便我可以从 android/blackberry 读取 .txt 的内容
    • 您是在谈论应用程序本身的代码吗?我将编辑我的答案。对于 Google Play,您需要一个加密密钥来发布您的应用。
    • 顺便说一句,您的文本文件似乎无法访问。
    • 我的意思是,我需要手动代码,而不是谷歌播放,因为我知道如果我上传到谷歌播放,谷歌会自动通知应用程序感谢编辑,我会先尝试:)
    • 我试过你的代码,但有很多错误,请帮助我:'(
    【解决方案3】:

    最好从你的服务器输出 JSON,而不是使用 txt 文件(Android 提供了一些有用的 JSON 解码和编码方法)。

    在更新活动中设置将 JSON 输出为静态最终变量的页面的 URL,使用您喜欢的任何方法下载它。以下answer 可能有用。

    然后,使用this answer中的代码解析JSON字符串。

    当您从服务器以字符串或整数形式获取应用程序的最新版本时,您可以将其与您可以使用的本地应用程序版本进行比较:

    PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
    String version = pInfo.versionCode;
    // To get the version name use pInfo.versionName
    

    记得添加 INTERNET 权限,以便您的应用可以在线连接:

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    

    【讨论】:

    • 你的建议可能更有用,但我还没有真正理解 jason 的用法,你能解释一下还是给我更多的教程谢谢:)
    • 我同意 JSON 可能更标准,但实际上使用 txt 文件并没有什么不好。就检索到的信息长度而言,它可以像 JSON 一样短或更长,并且像 Nginx 这样的一些服务器可以为文件提供比 REST/SOAP 调用更好的性能。
    • so,你觉得哪个更适合我用,请给个教程
    • @user1665082:我认为下面的教程 (androidhive.info/2012/01/android-json-parsing-tutorial) 会有所帮助。它描述了如何(从您的服务器)检索 JSON 格式化程序远程文件以及如何在您的 Android 应用程序中解析它。另外,如果您觉得此答案有用,请不要忘记接受它。
    • android 已修复 :),但我需要您对黑莓的帮助:)
    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 2014-01-17
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多