Загрузка файла в папку кеша
Привет, ребята, я пытаюсь загрузить файл OTA в каталог кэша.
try{ otaFile = new File(Environment.getDownloadCacheDirectory().getAbsolutePath() + File.separator + "update_unsigned" + ".zip");
Uri uri = Uri.parse(data.getFileUrl());
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setTitle(data.getVersionUpdate()).
setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationUri(Uri.fromFile(otaFile));
downloadManager = (DownloadManager) context.getSystemService(DOWNLOAD_SERVICE);
downloadId = downloadManager.enqueue(request);
emitter.onSuccess("saving to " + otaFile + " id - " + downloadId);
} catch (Exception e) {
emitter.onError(new Throwable(e.getMessage()));
}
Когда я вызываю этот код, я сталкиваюсь с исключением: неподдерживаемый путь /chche/update_unsigned.zip
Мое приложение имеет следующие разрешения:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />/
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
и я запускаю свой AP в качестве системного приложения.
Также я знаю, что в диспетчере загрузок есть скрытый метод setDestinationToSystemCache(), но когда я пытаюсь получить его с помощью отражения, я не могу его найти.
Class cls;
cls = Class.forName("android.app.DownloadManager");
Method m;
m = cls.getMethod("setDestinationToSystemCache", new Class[]{});
m.setAccessible(true);
m.invoke(null);
Помогите, пожалуйста, найти способ хранения файла в папке кэша, так как это только одна папка, которая приемлема при изготовлении устройства.
1 ответ
Ты можешь использовать request.setDestinationToSystemCache();
сохранить файл в / кеш.
request.setDestinationUri(Uri.fromFile(otaFile));
не позволит вам указать путь к каким-либо внутренним каталогам, таким как / cache Определение метода говорит, что оно устанавливает локальное назначение для загруженного файла. Должен быть файловый URI для пути во внешнем хранилище, и вызывающее приложение должно иметь разрешение WRITE_EXTERNAL_STORAGE.