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

Android 尝试从本地文件安装apk时未发现活动错误,android,android-activity,installation,Android,Android Activity,Installation,我制作了一个应用程序,从内部服务器下载APK,在本地保存,并希望提示用户安装它。 我的代码如下: protected void onPostExecute(String path) { Intent promptInstall = new Intent(Intent.ACTION_VIEW); promptInstall.setDataAndType(Uri.parse(path), "application/vnd.android.package-archive");

我制作了一个应用程序,从内部服务器下载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);
}
路径包含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)
我做错了什么

更新:
似乎,如果我改变代码如下它的工作!似乎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);
}

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

file:///storage/sdcard/download/internalLocalApplication.apk
当前,您的
路径
参数不包含该方案(即
文件://
部分),这就是无法正确解析该方案的原因


然后,当Android查找可以查看此URI的
活动时,它找不到匹配的活动,因为URI没有“scheme”。

我在尝试打开由DownloadManager生成的URI时遇到了相同的错误,如
dm.getUriForDownloadedFile(id)

使用以下代码修复了它:

    Uri uri;

    Cursor q = dm.query(new DownloadManager.Query().setFilterById(id));
    if ( q == null ) {
        Toast.makeText(AppContext,
                "FAILED: Unable to read downloaded file" ,
                Toast.LENGTH_LONG).show();
        break;
    }

    q.moveToFirst();
    String path = "file://" + q.getString(q.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
    uri = Uri.parse(path);
    Log.d(TAG,"dm query: " + path );
    intent = new Intent(Intent.ACTION_VIEW);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.setDataAndType(uri, dm.getMimeTypeForDownloadedFile(id));

你好使用Android 7
DownloadManager.COLUMN\u LOCAL\u FILENAME
不推荐使用,代码失败。我怎样才能解决这个问题?