Получение файла pdf или doc из папки загрузок в Android

Я пробую множество способов открыть папку «Загрузки» пользователя и позволяю пользователю ТОЛЬКО выбирать файл doc или pdf для открытия. Большинство методов устарели, и их альтернативы, похоже, не работают для меня.

Текущий код:

// I've heavily altered the code but hope you guys understand the gist of it.


//Steps:
// Open the Downloads folder 
// Let user select the pdf or docx.
// Open the doc or pdf.

        // Adding Syllabus Function Method Here.
        addSyllabus = findViewById(R.id.add_syllabus_button);
        addSyllabus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                webview = (WebView) findViewById(R.id.webView);
                progressbar = (ProgressBar) findViewById(R.id.progressBar);
                webview.getSettings().setJavaScriptEnabled(true);
                String filename = "https://s25.q4cdn.com/967830246/files/doc_downloads/test.pdf";
                webview.loadUrl("http://docs.google.com/gview?embedded=true&url = " + filename);
                webview.setWebViewClient(new WebViewClient() {

                    public void onPageFinished(WebView view, String url) {
                        // do your stuff here
                        progressbar.setVisibility(View.GONE);
                    }
                });
            }

        });

Цените это, спасибо.

ways to open the Downloads folder of the user and allowing the user to ONLY select a doc or pdf file to open up. Выложенный вами код не имеет к этому никакого отношения. Или с темой вашего поста.
blackapps 09.12.2020 22:57

@blackapps Я прошел несколько итераций этого раздела и просто вставил все, что у меня было на данный момент. Поэтому я и сказал, если вы понимаете суть происходящего.

Jona 09.12.2020 23:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
2
940
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Intent от DocumentsProvider, вероятно, ваш лучший выбор.

Из этого Google Guide:

private void openFile(Uri pickerInitialUri) {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("application/pdf");

    // Optionally, specify a URI for the file that should appear in the
    // system file picker when it loads.
    intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri);

    startActivityForResult(intent, PICK_PDF_FILE);

Вы можете использовать setType, как показано, и если вы хотите по умолчанию использовать Загрузки, вы можете использовать putExtra, как показано. Измените pickerInitialUri на правильный URI, который, я думаю, можно найти как константу: Environment.DIRECTORY_DOWNLOADS.

Обновление: теперь я понимаю, что вам нужно более одного типа файла. По этой теме: вы можете использовать:

String [] mimeTypes = {"application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"};
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);

(Я получил строки типа MIME от mozilla.)

Что именно я должен передать в параметр?

Jona 10.12.2020 02:32

Я не совсем уверен, о каком параметре вы говорите. для вызова putExtra вам, вероятно, следует изменить второй параметр на Environment.DIRECTORY_DOWNLOADS, но я сам это не проверял. Кроме того, вам потребуются определенные разрешения, но для этого я направлю вас к другим темам; есть много. Смотрите мое редактирование, если вам нужно больше разъяснений по setType.

Sid 11.12.2020 03:54

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