Подтвердить что ты не робот

DownloadManager.ACTION_DOWNLOAD_COMPLETE, получающий один и тот же идентификатор загрузки более одного раза с разными статусами загрузки в Android

Я использую Android DownloadManger System Service для загрузки некоторых файлов следующим образом.

dwnId = mgr.enqueue(new DownloadManager.Request(serveruri)
        .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI |
                DownloadManager.Request.NETWORK_MOBILE)
                .setAllowedOverRoaming(false)
                .setTitle(getAlbumName())
                .setDescription(getTrackName())
                .setDestinationUri(deviceUri)
                .setShowRunningNotification(true));

где mgr - экземпляр диспетчера загрузки, dwnId - уникальный идентификатор. Я также регистрируюсь для ACTION_DOWNLOAD_COMPLETE

registerReceiver(onDownloadComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

и в методе onDownloadComplete BroadcastReceiver onReceive() я получаю download Id как

Long dwnId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);

После этого я запрашиваю диспетчер загрузки для статуса загрузки

Cursor c = downloadManager.query(new DownloadManager.Query().setFilterById(dwnId)); c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));

для констант DownloadManager.STATUS_ *.

Проблема в том, что я получаю тот же самый downId дважды (метод onReceive вызывается дважды), один раз с статусом DownloadManager.STATUS_SUCCESSFUL и один раз с статусом DownloadManager.STATUS_FAILED для того же dwnId. Я выдаю запрос на загрузку около 10 файлов одновременно, но в диспетчере загрузки устройств он показывает количество загрузок, как некоторые 12 или 13 в верхней части окна уведомлений. Я думаю, что Менеджер загрузки имеет некоторые проблемы при загрузке файлов и возобновлении или автоматически перезагружается, чтобы снова загрузить тот же файл. Вот почему существует разница между количеством файлов, которые я запросил для загрузки, и фактическим числом в очереди загрузки. Из-за этого я получаю одно и то же DownloadId полное действие дважды. Если это так, как ограничить его. Я ошибаюсь, что может быть причиной разницы в подсчетах между тем, что я запросил для фактической загрузки? Почему широковещательный приемник получает один и тот же идентификатор загрузки дважды. Может кто-нибудь, пожалуйста, дайте мне знать?

Спасибо заранее...

4b9b3361

Ответ 1

Об этом сообщается сообщение об ошибке: http://code.google.com/p/android/issues/detail?id=18462

Как я обнаружил, это проверить, был ли скачивание успешным, если не прерывать намерение или переупорядочить файл, если он никогда не был загружен...

Потерял пару часов, считая, что один: (

** Изменить: добавление примера кода **

/**
 * Check if download was valid, see issue
 * http://code.google.com/p/android/issues/detail?id=18462
 * @param long1
 * @return
 */
private boolean validDownload(long downloadId) {

    Log.d(TAG,"Checking download status for id: " + downloadId);

    //Verify if download is a success
    Cursor c= dMgr.query(new DownloadManager.Query().setFilterById(downloadId));

    if(c.moveToFirst()){            
        int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));

        if(status == DownloadManager.STATUS_SUCCESSFUL){
            return true; //Download is valid, celebrate
        }else{
            int reason = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON));
            Log.d(TAG, "Download not correct, status [" + status + "] reason [" + reason + "]");            
            return false;
        }   
    }               
    return false;                                   
}

Для полного кода см. https://github.com/flegare/JAV387_LaboWidget/blob/master/src/com/mobidroid/widgetfact/service/FactService.java