尝试从本地文件安装 apk 时未发现活动错误

Jim*_*Jim 5 installation android android-activity

我制作了一个应用程序,我从内部服务器下载 APK,将其保存在本地并希望提示用户安装它。
我的代码如下:

protected void onPostExecute(String path) {
    Intent promptInstall = new Intent(Intent.ACTION_VIEW);
    promptInstall.setDataAndType(Uri.parse(path), "application/vnd.android.package-archive");
    promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(promptInstall);
}
Run Code Online (Sandbox Code Playgroud)

该路径包含 APK 文件,因此下载没有问题,但在尝试启动活动时,我得到:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/storage/sdcard/download/internalLocalApplication.apk typ=application/vnd.android.package-archive flg=0x10000000 }
     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1765)
     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1602)
     at android.app.Activity.startActivityFromFragment(Activity.java:4340)
     at android.app.Activity.startActivityFromFragment(Activity.java:4312)
     at android.app.Fragment.startActivity(Fragment.java:1075)
     at android.app.Fragment.startActivity(Fragment.java:1054)
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

更新:
似乎如果我按如下方式更改代码,它会起作用!好像Uri有问题?

@Override
protected void onPostExecute(String path) {
    Uri fileLoc = Uri.fromFile(new File(path));
    Intent promptInstall = new Intent(Intent.ACTION_VIEW);
    promptInstall.setDataAndType(fileLoc, "application/vnd.android.package-archive");
    promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(promptInstall);
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ser 4

当您调用 时Uri.parse(path)path参数需要包含如下内容:

file:///storage/sdcard/download/internalLocalApplication.apk
Run Code Online (Sandbox Code Playgroud)

目前您的path参数不包含方案(即:部分file://),这就是无法正确解析它的原因。

然后,当 Android 寻找Activity可以查看此 URI 的对象时,它找不到匹配的对象,因为该 URI 没有“方案”。