Android APK意图转到错误链接

Android APK意图转到错误链接,android,Android,我想实施一个点击事件,提示用户下载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以将我的应用更新为最新版本:

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中,我关闭了对非Play Store应用程序的扫描

知道我做错了什么吗

编辑#1:我没有试图在我的应用程序中实现将APK下载到本地存储的代码。我只是想启动一个指向APK URL的浏览器窗口。我正在尝试类似于这里描述的方法:

在该解决方案中,提示下载APK的代码为:

Intent updateIntent = new Intent(Intent.ACTION_VIEW,
       Uri.parse("http://some-public-url/deploy/MyApplication.apk"));
startActivity(updateIntent);
这就是我想做的。但它并没有开始下载。URL在地址栏中短暂闪烁,但随后浏览器会返回到它之前所在的任何页面

编辑#2:如果我使用调试器和虚拟设备启动它,代码的行为与我预期的一样。如果我将APK安装到我的物理设备上,然后单击那里的按钮,它就会像我上面描述的那样出现故障。物理设备和虚拟设备都是Nexus5

我已经创建了APK的两个版本,一个是“版本1”,另一个是“版本2”。在版本1中,我希望触发版本2的下载和安装。

编辑: 收集了所有信息,以便我们可以有一个检查表

  • 检查应用程序是否具有写入外部存储的权限
  • 检查应用程序是否为权限请求\u安装\u软件包
  • 检查设备中是否有足够的空间
  • 如果您的URL是http,浏览器是否支持http
  • 要安装的APK必须与安装启动请求的实例的APK同名
  • 有关于Logcat的可疑信息吗
上一篇: 您是否获得了写外部文件的权限


与你的问题相似

我想出来了。要安装的APK必须与生成尝试下载的实例的APK同名。我试图在APK的名称中引入一个版本号,这就是破坏它的原因。非常感谢您的帮助


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

如果您想直接下载内容,请让我查看Android的下载管理器API。这很简单,而且会更可靠。谢谢你回复我。对我来说,WriteExternal似乎不太可能是相关的,它涉及到将文件下载到本地存储,我只是尝试启动一个指向APK URL的浏览器窗口。你链接的页面提到了权限请求\u安装\u软件包,我尝试添加,但没有帮助。手机设置是否打开了第三方安装?在手机上,我允许安装来自未知来源的应用程序,在Play Store中,我关闭了对非playstore应用程序的扫描。设备上有足够的空间吗?太棒了。非常感谢您的编辑。我接受了你的回答。我建议您编辑“您要安装的APK必须与APK同名…”并附加“…哪个安装了启动请求的实例。”