Android APK意图链接错误

时间:2018-09-11 19:21:25

标签: android

我想实施一个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的下载和安装。

2 个答案:

答案 0 :(得分:2)

我知道了。您要安装的APK必须与产生尝试下载实例的APK的名称相同。我试图在APK名称中引入一个版本号,这就是打破它的原因。非常感谢您的协助!

编辑:请参阅@kelalaka的答案,该答案更完整。

答案 1 :(得分:1)

编辑: 收集了所有信息,以便我们可以查看清单

  • 检查应用程序是否具有WRITE_EXTERNAL_STORAGE权限
  • 检查该应用程序是否具有权限REQUEST_INSTALL_PACKAGES
  • 检查设备中是否有足够的空间
  • 如果您的URL是http,那么浏览器是否支持http?
  • 您要安装的APK必须与安装启动请求实例的APK的名称相同。
  • Logcat上有任何可疑信息吗?

上一个: 您获得写外部许可的权限吗?

This与您的问题类似