0

我正在尝试在 Android 中安装非市场应用程序。它在以下位置下载:file:///mnt/sdcard/Download/App.apk

我正在做的是:

Intent promptInstall = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(uriString)).setType("application/vnd.android.package-archive");
startActivity(promptInstall);

其中 uriString 是 : file:///mnt/sdcard/Download/App.apk

但有一个例外:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=application/vnd.android.package-archive }

编辑

我正在使用 DownloadManager 下载应用程序:

DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request req = new DownloadManager.Request(Uri.parse(MY_PATH_TP_APK));
Request req.setTitle("Test")
       .setDescription("Something useful.")
       .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "App.apk");
long enqueue = dm.enqueue(req);

下载后:

_receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
            Query query = new Query();
            query.setFilterById(enqueue);
            Cursor c = dm.query(query);
            if (c.moveToFirst()) {
                int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
                if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
                    String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
                    Intent promptInstall = new  Intent(Intent.ACTION_VIEW)
                    .setData(Uri.parse(uriString))
                    .setType("application/vnd.android.package-archive");
                    startActivity(promptInstall);
                }
            }
        }
    }
};

如何解决?

4

2 回答 2

3

我在我的一个应用程序中使用此代码,它工作正常:

Uri fileUri = Uri.fromFile(new File("/mnt/sdcard/Download", "App.apk"));
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "application/vnd.android.package-archive");
startActivity(intent);

也许你的代码有太多的斜线(file:///mnt 而不是 file://mnt(这里不确定))。

于 2012-06-21T06:34:57.557 回答
1

代替

String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));

和:

c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
于 2012-07-29T04:05:43.147 回答