Есть способ добавить дополнительные объекты в намерение DownloadManager
, зарегистрированное для действия DownloadManager.ACTION_DOWNLOAD_COMPLETE
(например, получить булевское значение, установленное как дополнительное в намерении)?Комплект для BroadcastReceiver DownloadManager
Это, как я создаю запрос:
DownloadManager.Request req = new DownloadManager.Request(myuri);
// set request parameters
//req.set...
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.enqueue(req);
context.registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
И в моем OnComplete приемник:
private BroadcastReceiver onComplete = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
queryRequestParameters(context, intent);
}
};
private void queryRequestParameters(Context context, Intent intent) {
// get request bundle
Bundle extras = intent.getExtras();
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(extras.getLong(DownloadManager.EXTRA_DOWNLOAD_ID));
Cursor c = ((DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE)).query(q);
//get request parameters
if (c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
if (status == DownloadManager.STATUS_SUCCESSFUL) {
// find path in column local filename
String path = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
}
}
}
С intent.getExtras()
я могу получить только параметры запроса. Я попытался отправить Broadcast на тот же приемник с разными действиями (один с ACTION_DOWNLOAD_COMPLETED
, другой - обычным), но мне нужно отправить двойную трансляцию, чтобы она входила два раза в onReceive.
Я понял первую часть о моем вопросе, но не о втором. Что означает, что к моменту завершения загрузки мой процесс может отсутствовать? –
@Fondesa: Загрузки требуют времени. Ваш процесс не будет жить вечно. Возможно, он не будет достаточно долго для завершения загрузки. Если вы хотите узнать о загрузках, которые завершены после завершения процесса, вам нужно будет сделать что-то еще, кроме того, что вы делаете с 'registerReceiver()'. – CommonsWare
О, теперь я понимаю, спасибо! –