我想实现一个点击事件,提示用户下载一个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应用程序的扫描。
知道我做错了什么吗?
编辑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的下载和安装。
最佳答案
编辑:
收集了所有信息以便我们有一个检查表
检查应用程序是否具有写入外部存储的权限
检查应用程序是否为权限请求安装程序包
检查设备中是否有足够的空间
如果您的url是http,那么浏览器是否支持http?
要安装的apk必须与安装启动请求的实例的apk同名。
有关于这只猫的可疑信息吗?
上一个:
你得到外部写作的许可了吗?
This类似于你的问题
关于android - Android APK Intent 链接错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52282862/