Android DownloadManager - Загрузите apk и установите его

Я искал везде, чтобы узнать, как скачать APK не с рынка. APK хранится на моем сервере. Все образцы не работали.

Я хочу, чтобы мое приложение загружало APK для моего сервера и предлагало пользователю установить его.

Пока мне удалось скачать apk на пользовательский sd. но я не могу получить путь, где он сохранен, и установить его.

private void downloadAPK() {
    String url="https://www.example.com/app.apk”;
    downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    request = new Request(Uri.parse(url));
    request.setTitle(“My App“);
    enqueue = downloadManager.enqueue(request);


      new Thread(new Runnable() {

        @Override
        public void run() {

            boolean downloading = true;

            while (downloading) {

                try {
                    Thread.sleep(10000);
                     DownloadManager.Query q = new DownloadManager.Query();
                        q.setFilterById(enqueue);

                        Cursor cursor = downloadManager.query(q);
                        cursor.moveToFirst();
                        int bytes_downloaded = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
                        int bytes_total = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));

                        if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
                            downloading = false;
                        }

                        final int dl_progress = (int) ((double)bytes_downloaded / (double)bytes_total * 100f);

                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {

                                Log.d("Prog", Integer.toString(dl_progress));
                            }
                        });


                        cursor.close();
                } catch (InterruptedException e) {

                }

            }

        }
    }).start();
}}


BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();


        if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
             Log.w(“”, “Downloaded”)

        }
        else {
            //do something here
       }

    }
};


onCreate ...
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

person Thiago    schedule 14.03.2015    source источник


Ответы (2)


Согласно documentation вы можете указать место, где вы хотите сохранить файл. Все, что вам нужно сделать, это добавить эту строку перед установкой запроса на de DownloadManager :

request.setDestinationInExternalFilesDir (context, dirType, subPath);
person andryr    schedule 14.03.2015

Вы можете запросить локальный файл загрузки, используя приведенный ниже код:

Обратите внимание, что : вернет null, если загрузка не удалась.

String path = Uri.parse(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))).getPath()
person Basbous    schedule 12.04.2015