我正在为Android和BlackBerry开发移动应用程序。
我已经上传了我最新的OTA安装应用程序,它将版本代码和版本名称包含在服务器上的纯文本文件中。
在我的应用程序中,如何将代码版本和版本名称从我的服务器上的纯文本格式转换为字符串。我想这样做,所以我可以让应用程序将它的当前版本与服务器上的可用版本进行比较,这样如果服务器上有更新的版本,将向用户提供下载更新。
答案 0 :(得分:2)
假设您将文件上传到服务器,其中包含一行:
1.2.3.4
Android和BB的流程类似:
1-从服务器检索文件。你可能会得到一个字节数组。
2-使用正确的编码将其转换为String。如果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中的此方法不可用,因此您应该自己编写代码,或者从经过良好测试的库中使用/ port one(如Apache Commons的org.apache.commons.lang3.StringUtils.split) )。在此步骤之后,您将拥有一个字符串数组,每个字符串都是一个数字(示例中为{“1”,“2”,“3”,“4”})。
4-现在创建一个长度相同的int数组,并在每个元素Integer.parseInt(splitted[i])
上使用i
将数组中的每个字符串转换为等效的int。
5-获取应用程序的版本并执行相同的步骤以获取int数组。在BB中,您可以拨打ApplicationDescriptor.currentApplicationDescriptor().getVersion()
。在Android中,PackageInfo.versionCode
或PackageInfo.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})。迭代逐个比较版本。规则是:if txtVersion [i]> appVersion [i],那么你已经过时了,需要进行升级。
答案 1 :(得分:1)
这个答案仅适用于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
的建议添加互联网权限<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
}
答案 2 :(得分:0)
不使用txt文件,最好从服务器输出JSON(Android提供了一些有用的JSON解码和编码方法)。
将URL设置为在Update活动中将JSON作为静态最终变量输出的页面,使用您喜欢的任何方法下载它。以下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>