我想实施一个on click事件,该事件提示用户下载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消失,浏览器转到测试前我最近访问的页面。 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的下载和安装。
答案 0 :(得分:2)
我知道了。您要安装的APK必须与产生尝试下载实例的APK的名称相同。我试图在APK名称中引入一个版本号,这就是打破它的原因。非常感谢您的协助!
编辑:请参阅@kelalaka的答案,该答案更完整。
答案 1 :(得分:1)
编辑: 收集了所有信息,以便我们可以查看清单
上一个: 您获得写外部许可的权限吗?
This与您的问题类似