Я пытаюсь загрузить изображение через DownloadManager, чтобы оно отображалось в приложении «Галерея», но ничего из того, что я делаю, не работает. Согласно документации, я подумал, что этого кода будет достаточно:
public void downloadImage(String url) {
Uri Download_Uri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(Download_Uri);
request.allowScanningByMediaScanner();
download_id = downloadManager.enqueue(request);
}
Но когда файл загружается, он не отображается в приложении «Галерея». Поэтому я попытался загрузить приемник, чтобы добавить его вручную, например:
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(downloadId);
Cursor c = downloadManager.query(query);
if (c.moveToFirst()) {
int columnIndex = c
.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
String uriString = downloadManager.getUriForDownloadedFile(download_id).toString();
//c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
Log.i("filname", uriString);
MediaScannerConnection.scanFile(ArticleActivity.this,
new String[] { uriString }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("Media Scanner", "Scanned " + path + ":");
Log.i("Media Scanner", "-> uri=" + uri);
}
});
}
}
}
}
};
Это тоже не работает. URI, напечатанный с тегом «имя файла», выглядит примерно так: «content://downloads/my_downloads/97» вместо имени фактического загруженного файла. В приложении для загрузки имя файла такое же, как и на сервере. Uri, зарегистрированный с тегом «Сканер мультимедиа», имеет значение null.
Я пропустил что-то простое здесь? Я рвал на себе волосы несколько часов.