应用OTA更新

5
我正在开发一个应用程序,将会在网站上提供(可能也会在市场上)。我目前遇到的问题是如何处理应用程序的更新。我知道如何检查版本是否与当前版本相同,并且我知道是否需要更新它。问题是...如何做?
有没有办法从网站下载APK并开始安装过程?当然,用户必须确认,但我只想能够为他启动它。目前我正在进行以下操作:
private void doUpgrade() {
    // TODO Auto-generated method stub
    Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(getString(R.string.upgrade));
    builder.setIcon(R.drawable.help);
    builder.setMessage(getString(R.string.needUpgrade));
    builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub

            Map<String, String> data = new HashMap<String, String>();

            try {
                HttpResponse re = Registration.doPost("http://www.android-town.com/appRelease/AndroidTown.apk",data);

                int statusCode = re.getStatusLine().getStatusCode();
                closeApp();

            } catch (ClientProtocolException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
                closeApp();
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
                closeApp();
            }
        }
    });
    builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            dialog.cancel();
            closeApp();
        }
    });
    builder.show();
}

但其实它什么都没做...我应该用URL打开一个webView吗?还是新建一个可运行的线程?还有其他方式吗?请帮忙 :)

谢谢

3个回答

3
最简单的方法是启动一个Intent来在浏览器中打开下载链接。这样可以下载APK文件,用户可以通过点击下载管理器中的文件来安装它。
你是说这将处理OTA与市场分开,因此用户在最初安装您的应用程序时应已禁用“允许来自非市场来源的应用程序”。

我的理解是你建议他仍然应该自己下载apk文件,然后从磁盘安装。 - alexanderblom

1

请注意,这种方法可能不太可行:大多数设备都默认禁用了“允许来自非市场来源的应用程序”选项(在“设置”>“应用程序”下)。

这意味着当您启动安装应用程序的意图时,用户将会收到一个警告对话框,并且安装将失败。

虽然您可以检查外部源以获取新的更新(例如,在您的服务器上检查文本文件并通知用户),但我建议将他们重定向到Android市场本身进行升级。


嗯...真遗憾。但我猜如果没有其他办法,那就只能这样了。只是为了测试目的,有这样一个功能而不必让测试人员下载apk文件并将其传输到手机上安装,会非常好。 - Bostjan
1
如果只是给测试人员使用,我相信你可以让他们启用“非市场”选项。 - Christopher Orr

1

众所周知,“允许来自非市场来源的应用程序”选项可能会给您带来很多麻烦,因为除了测试人员或类似人员之外,其他人出于各种原因可能不会对此选项感兴趣。尝试使用Testflight,它应该会有所帮助。https://testflightapp.com/android/


1
Burstly 公司已被苹果收购,该公司制作了 Testflight。未来很有可能不再支持 Android。另外,这也是一个不错的 OTA 服务:https://www.otaupdatecenter.pro/。 - Bart Burg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接