Открытие pdf файлов с помощью средства выбора файлов и их отображение - PullRequest
0 голосов
/ 23 марта 2020

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

File file = newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/math.pdf");
PDFView pdf = findViewById(R.id.pdfView);
pdf.fromFile(file).load();

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

File file = newFile(Environment.getExternalStorageDirectory().getAbsolutePath()+name);

, но это не сработало. Полный код можно найти ниже

package com.example.bookapp;

import android.content.Intent;
import android.os.Bundle;
import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.util.FitPolicy;
import com.nbsp.materialfilepicker.MaterialFilePicker;
import com.nbsp.materialfilepicker.ui.FilePickerActivity;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;
import java.io.File;
import java.util.regex.Pattern;

public class PDFViewer extends AppCompatActivity {
    public static String filepath = "";
    TextView tvView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pdfviewer);
        tvView = findViewById(R.id.textView3);
        new MaterialFilePicker()
                .withActivity(this)
                .withRequestCode(1)
                .withFilter(Pattern.compile(".*\\.pdf$")) // Filtering files and directories by file name using regexp
                .withFilterDirectories(true) // Set directories filterable (false by default)
                .withHiddenFiles(true) // Show hidden files and folders
                .start();
        loadPDF();
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1 && resultCode == RESULT_OK) {
           filepath = data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH);
            tvView.setText(filepath); // this path is shown to be correct
        }
    }
    // function to load specified pdf
    private void loadPDF(){
        File file = new File(filepath);
        PDFView pdf = findViewById(R.id.pdfView);
        pdf.fromFile(file).enableSwipe(true)
                .swipeHorizontal(false)
                .enableDoubletap(true)
                .defaultPage(0)
                .enableAnnotationRendering(false)
                .password(null)
                .scrollHandle(null)
                .enableAntialiasing(true)
                .spacing(0)
                .autoSpacing(true)
                .pageFitPolicy(FitPolicy.WIDTH)
                .fitEachPage(false)
                .nightMode(true)
                .load();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...