【发布时间】:2019-02-16 08:50:04
【问题描述】:
我想实现一个点击事件,提示用户下载 APK 以将我的应用更新到最新版本:
public void f(View view) {
Uri uri = Uri.parse("https://www.example.com/app-release.apk");
startActivity(new Intent(Intent.ACTION_VIEW, uri));
}
我构建了应用程序并将其部署到我的手机上。我启动应用程序并单击按钮。浏览器打开。在地址栏中,我非常简要地看到了 APK 的 URL。然后这个 URL 消失,浏览器转到我在测试前最近访问的任何页面。 APK 未下载。
我已确保要安装的 APK 的版本号超过我测试按钮点击的应用的版本号。 APK 的 URL 是有效的,如果我在浏览器中明确访问该 URL,APK 就会安装。我在清单中启用了 android.permission.INTERNET。在手机上我允许安装来自未知来源的应用程序,在 Play 商店中我关闭了对非 Playstore 应用程序的扫描。
知道我做错了什么吗?
编辑#1:我不想在我的应用中实现代码以将 APK 下载到本地存储。我只是想启动一个指向 APK 的 URL 的浏览器窗口。我正在尝试类似于此处描述的方法:
https://juristr.com/blog/2011/02/coding-update-functionality-for-your/
在该解决方案中,提示下载 APK 的代码是:
Intent updateIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://some-public-url/deploy/MyApplication.apk"));
startActivity(updateIntent);
这就是我想做的。但它不会开始下载。 URL 在地址栏中短暂闪烁,但随后浏览器会返回到之前所在的任何页面。
编辑#2:如果我使用调试器和虚拟设备启动它,代码的行为与我预期的一样。如果我将 APK 安装到我的物理设备上,然后单击那里的按钮,它就会出现如上所述的故障。物理设备和虚拟设备都是 Nexus 5。
我创建了两个版本的 APK,一个“版本 1”和一个“版本 2”。从版本 1 中,我想触发版本 2 的下载和安装。
【问题讨论】:
-
如果你想直接下载东西,你应该看看 Android 的下载管理器 API。这很简单,而且会更可靠。
标签: android