Я работаю над частью моего приложения, которая требует, чтобы пользователю был представлен инструмент выбора файлов (чтобы выбрать нужный файл из хранилища), а затем он должен отобразить содержимое. Раньше я делал это, просто жестко кодируя имя файла
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();
}
}