下载完成后如何进行apk自动安装

时间:2016-03-07 11:27:42

标签: java android download-manager

大家好,我想知道是否有一些我可以使用的代码会在下载完成后自动安装应用程序?

我的应用程序中有一个下载部分。我正在使用Google云端硬盘来处理下载。但是我遇到了一些设备的问题。所以我决定放弃谷歌

我现在使用媒体火作为我的主持人。我的应用使用直接下载。但它总是使用下载管理器下载。我希望它能做的更像是Google Drive如何直接下载。这使我可以选择在下载完成后立即安装。我现在用这几行代码解决了这个问题

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new 
File(Environment.getExternalStorageDirectory() + "/download/" + "app.apk")), 
"application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

有没有办法在下载文件之前检查下载文件夹。如果文件已经存在安装,如果没有到网页下载。而是它说解析错误然后转到网页或多次下载相同的文件。

一如既往地感谢您。

1 个答案:

答案 0 :(得分:0)

您可以在下载完成后获取已下载的Uri,因此您无需指定要保存的文件名。如果您使用DownloadManager,则下面是一个简单示例。

    final DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse("http://remotehost/your.apk"));
    final long id = downloadManager.enqueue(request);
    BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
                Intent installIntent = new Intent(Intent.ACTION_VIEW);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                    installIntent.setDataAndType(downloadManager.getUriForDownloadedFile(id),
                            "application/vnd.android.package-archive");
                } else {
                    Cursor cursor = downloadManager.query(new DownloadManager.Query().setFilterById(id));
                    try {
                        if (cursor != null && cursor.moveToFirst()) {
                            int status = cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS));
                            String localUri = cursor.getString(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_URI));
                            if (status == DownloadManager.STATUS_SUCCESSFUL) {
                                installIntent.setDataAndType(Uri.parse(localUri), "application/vnd.android.package-archive");
                            }
                        }
                    } finally {
                        if (cursor != null) {
                            cursor.close();
                        }
                    }
                }
                installIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.sendBroadcast(installIntent);
            }
        }
    };
    registerReceiver(broadcastReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));