Загрузка файла в папку кеша

Привет, ребята, я пытаюсь загрузить файл 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.

Другие вопросы по тегам