我想实现一个点击事件,提示用户下载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 Store中,我关闭了对非playstore应用程序的扫描。
知道我做错了什么吗?
APK #1APK1:我不会尝试在我的应用程序中实现代码来将下载到本地存储。我只是尝试启动一个指向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的下载和安装。
发布于 2018-09-12 04:53:25
编辑:收集了所有信息,这样我们就可以有一个检查表
WRITE_EXTERNAL_STORAGE
上一次:你有没有得到写外部的许可?
This与您的问题类似
发布于 2018-09-12 08:12:22
我想通了。要安装的APK必须与生成尝试下载的实例的APK同名。我试图在APK的名称中引入一个版本号,这就破坏了它。非常感谢大家的帮助!
编辑:查看@kelalaka的答案,它更完整。
https://stackoverflow.com/questions/52282862
复制相似问题