Android DownloadManager

Я использую Android DownloadManager для загрузки некоторого файла, скажем, XMB, если DownloadManager завершит загрузку, он отправит broadcast действия android.intent.action.DOWNLOAD_COMPLETE в обычном сценарии.

Мой вопрос в том, что если интернет-соединение потеряется между ними. Будет ли он посылать какие-либо трансляции? Тот же случай между ними, если сервер перестает обслуживать то, что делает DownloadManager. Может быть, это глупый вопрос, у меня очень маленький файл, поэтому я не могу проверить этот сценарий.

Может ли кто-нибудь сказать мне, что DownloadManager делает в таких сценариях?


person Sharanabasu Angadi    schedule 28.05.2014    source источник


Ответы (2)


Трансляция будет отправлена. Вам нужно проверить статус DownloadManager, чтобы определить, был ли он успешным. Например:

private DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
            long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
            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)) {
                    // handle data
                } else if (DownloadManager.STATUS_FAILED == c.getInt(columnIndex)) {
                    // handle error
                }
            }
        }
    }
};

Полный пример см. по этой ссылке. Способы определения причины сбоя см. в разделе . эта ссылка.

person kraxor    schedule 28.05.2014
comment
то есть вы хотите сказать, что каждый раз, когда эфир успешно или неудачно, он будет отправлять трансляцию действия android.intent.action.DOWNLOAD_COMPLETE? - person Sharanabasu Angadi; 28.05.2014

Предоставлено: пример Android DownloadManager

Я регистрирую свой приемник только для трансляции DownloadManager.ACTION_DOWNLOAD_COMPLETE. Это вызывается только тогда, когда загрузка успешно завершена

Выполните следующие три шага

Создайте BroadcastReceiver, как показано во фрагменте ниже. Внутри приемника мы просто проверяем, предназначена ли полученная трансляция для нашей загрузки, сопоставляя полученный идентификатор загрузки с нашей загрузкой в ​​​​очереди.

private BroadcastReceiver onDownloadComplete = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
           //Fetching the download id received with the broadcast
           long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
           //Checking if the received broadcast is for our enqueued download by matching download id
           if (downloadID == id) {
               Toast.makeText(MainActivity.this, "Download Completed", Toast.LENGTH_SHORT).show();
           }
       }
   };

После создания BroadcastReceiver вы можете зарегистрироваться для ACTION_DOWNLOAD_COMPLETE в методе onCreate вашей активности.

@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       registerReceiver(onDownloadComplete,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

   }

Также важно отменить регистрацию BroadcastReceiver в onDestroy. Это гарантирует, что вы слушаете эту трансляцию только до тех пор, пока активность активна.

@Override
  public void onDestroy() {
      super.onDestroy();
      unregisterReceiver(onDownloadComplete);
  }

Полный пример здесь

person IrshadKumail    schedule 29.08.2018