Загруженное изображение отображается в Android Studio, но не в галерее - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь загрузить изображение с помощью URL-адреса через созданную мной службу, и когда я проверяю каталог файлов моего устройства с помощью отладчика Android Studio, я вижу файл на устройстве:

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

enter image description here

Я могу успешно видеть и открывать зеленыйфайл в приложении Галерея, но красный файл (и все остальные файлы, перечисленные в этом каталоге) не найден.Я не вижу их в проводнике Windows.Я должен идентифицировать их как изображения где-то в моем коде, чтобы файловая система знала, что это изображение?

Это часть, где я загружаю изображение:

Request.Builder builder = new Request.Builder();
builder = builder.url(downloadFileUrl);
builder = builder.addHeader("RANGE", "bytes=" + existLocalFileLength);
Request request = builder.build();

Call call = okHttpClient.newCall(request);
Response response = call.execute();

if (response != null && response.isSuccessful()) {
 RandomAccessFile downloadFile = new RandomAccessFile(existLocalFile, "rw");
 downloadFile.seek(existLocalFileLength);

 ResponseBody responseBody = response.body();
 InputStream inputStream = responseBody.byteStream();
 BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
 byte data[] = new byte[102400];

 long totalReadLength = 0;

 int readLength = bufferedInputStream.read(data);

 while (readLength != -1) {

  if (getDownloadManager().isDownloadPaused()) {
   ret = DOWNLOAD_PAUSED;
   break;
  } else if (getDownloadManager().isDownloadCanceled()) {
   ret = DOWNLOAD_CANCELED;
   break;
  } else {

   downloadFile.write(data, 0, readLength);

   totalReadLength = totalReadLength + readLength;

   int downloadProgress = (int)((totalReadLength + existLocalFileLength) * 100 / downloadFileLength);

   getDownloadManager().updateTaskProgress(downloadProgress);

   readLength = bufferedInputStream.read(data);
  }
 }
}

1 Ответ

0 голосов
/ 03 октября 2018

Вам необходимо отсканировать сохраненный файл, используя MediaScannerConnection:

private void scanFile(String path) {

    MediaScannerConnection.scanFile(context,
            new String[] { path }, null,
            new MediaScannerConnection.OnScanCompletedListener() {

                public void onScanCompleted(String path, Uri uri) {
                    Log.d("Tag", "Scan finished. You can view the image in the gallery now.");
                }
            });
}

Вызвать это по пути существующего локального файла:

scanFile(existLocalFile.getAbsolutePath());
...