Как сохранить загруженные файлы в папке кеша памяти приложения? - PullRequest
0 голосов
/ 11 октября 2018

Мне известно, что подобные вопросы задавались ранее, но на самом деле не существует рабочего решения.Я загружаю несколько файлов PDF с помощью DownloadManager и хочу сохранить эти файлы в папке кэша памяти приложения, но не могу найти способ сделать это.

Это мой код:

public class MainActivity extends AppCompatActivity {

    Button btn;
    DownloadManager downloadManager;
    List<String> myList = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myList.add("https://doc.lagout.org/programmation/Actionscript%20-%20Flash%20-%20Flex%20-%20Air/Flash%20Development%20for%20Android%20Cookbook%20-%20Labrecque%20-%20Packt%20%282011%29/Flash%20Development%20for%20Android%20Cookbook%20-%20Labrecque%20-%20Packt%20%282011%29.pdf");
        myList.add("http://www.csc.kth.se/utbildning/kth/kurser/DD143X/dkand11/Group1Mads/andreas.ulvesand.daniel.eriksson.report.pdf");
        myList.add("http://enos.itcollege.ee/~jpoial/allalaadimised/reading/Android-Programming-Cookbook.pdf");
        myList.add("https://x.coe.phuket.psu.ac.th/warodom/242-320/ebook/9781785883262-ANDROID_PROGRAMMING_FOR_BEGINNERS.pdf");
        myList.add("https://www.cs.cmu.edu/~bam/uicourse/830spring09/BFeiginMobileApplicationDevelopment.pdf");
        myList.add("https://commonsware.com/Android/Android-1_0-CC.pdf");

        btn = findViewById(R.id.download_btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                downloadManager = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
                for(int i = 0; i < myList.size(); i++) {
                    Uri uri = Uri.parse(myList.get(i));
                    DownloadManager.Request request = new DownloadManager.Request(uri);
                    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    Long reference = downloadManager.enqueue(request);
                }
            }
        });
    }
}

Ответы [ 2 ]

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

Из документации

Внутреннее хранилище :

  • Всегда доступно.Сохраненные здесь файлы доступны только вашему приложению
  • .Когда пользователь удаляет ваше приложение, система удаляет все файлы приложения
  • из внутреннего хранилища.

Встроенный менеджер загрузки Android не может получить доступ к внутреннему хранилищу вашего приложенияТаким образом, вы можете сохранить свои файлы только во внешнем каталоге, просто позвонив по номеру setDestinationInExternalFilesDir или setDestinationInExternalPublicDir.

Но если вы хотите сохранить их во внутреннем хранилище, просто зарегистрируйте прием, а затем скопируйте файлыс внешнего на внутреннее хранилище.

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

вы можете установить локальное назначение для загруженного файла, используя.

request.setDestinationUri(Uri uri) 

вам нужно использовать context.getCacheDir(), чтобы получить каталог кеша и сохранить ваш файл в кеш.

Наконец, в ваших путях xml добавьте код ниже, чтобы позволить провайдеру получить uri.

<cache-path name="cache_files" path="."  />
...