1

Android N имеет новую кнопку Отмена в уведомлении диспетчера загрузки.Android N - кнопка отмены уведомлений диспетчера загрузки

Я хотел бы выслать некоторый код в моем приложении, чтобы остановить индикатор прогресса, когда пользователь нажмет эту кнопку. Если какой-либо, какой метод вызывается?

Обратите внимание, что действие фильтра Intent DownloadManager.ACTION_NOTIFICATION_CLICKED запускается только тогда, когда пользователь нажимает на само уведомление, а не когда он нажимает кнопку «Отмена».

if_downloadManager = new IntentFilter(); 
    if_downloadManager.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE); 
    if_downloadManager.addAction(DownloadManager.ACTION_NOTIFICATION_CLICKED); 

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

      if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { 
       .... 
      } 

      if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) { 
       // This code is not executed when the user presses the Cancel Button in the Download Manager Notification 
      }  
     } 
    }; 

Заранее спасибо.

+0

ли вы найти решение? У меня такая же проблема. – Malko

ответ

0

Malko, я не нашел решение, но пока использую следующее обходное решение. Я использую Android Обработчик для запуска каждые 10 секунд resetProgressIfNoOngoingDMRequest() ниже:

public int numberOfOngoingDMRequest() { 
    cursor = downloadManager.query(new Query()); 
    int res = cursor.getCount(); 
    cursor.close(); 
    return res; 
} 

public boolean resetProgressIfNoOngoingDMRequest() { 
    if (numberOfOngoingDMRequest() == 0) { 
     refreshUpdateAllButton(false); 
     resetEpisodesDownloadIds(); 
     act.misc.notifyEpisodesDataSetChanged(); 
     return true; 
    } 
    return false; 
} 

Не так хорошо, но это делает работу. И я делаю это только в том случае, если приложение находится на переднем плане.

0

Другим решением является использование ContentObserver.

Содержание uri для менеджера загрузки должно быть content://downloads/my_downloads, мы можем отслеживать изменение этой базы данных. Когда вы начнете загрузку с идентификатора загрузки, будет создана строка content://downloads/my_downloads/{downloadId}. Мы можем проверить этот курсор, чтобы узнать, отменена ли эта задача или нет. Если возвращаемый курсор пуст или пуст, в базе данных нет записи, эта задача загрузки отменяется пользователем.

 // get the download id from DownloadManager#enqueue 
     getContentResolver().registerContentObserver(Uri.parse("content://downloads/my_downloads"), 
       true, new ContentObserver(null) { 
        @Override 
        public void onChange(boolean selfChange, Uri uri) { 
         super.onChange(selfChange, uri); 
         if (uri.toString().matches(".*\\d+$")) { 
          long changedId = Long.parseLong(uri.getLastPathSegment()); 
          if (changedId == downloadId[0]) { 
           Log.d(TAG, "onChange: " + uri.toString() + " " + changedId + " " + downloadId[0]); 
           Cursor cursor = null; 
           try { 
            cursor = getContentResolver().query(uri, null, null, null, null); 
            if (cursor != null && cursor.moveToFirst()) { 
             Log.d(TAG, "onChange: running"); 
            } else { 
             Log.w(TAG, "onChange: cancel"); 
            } 
           } finally { 
            if (cursor != null) { 
             cursor.close(); 
            } 
           } 
          } 
         } 
        } 
       }); 

увидеть ответ here

Смежные вопросы