
本文档旨在指导Android开发者如何从设备的指定文件夹中读取PDF文件,并将这些文件显示在RecyclerView中。我们将涵盖必要的权限申请、文件读取以及如何在RecyclerView中展示这些文件,确保代码在Android API 30及以上版本也能正常运行。
在Android应用中访问外部存储,需要申请相应的权限。在AndroidManifest.xml文件中添加以下权限声明:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<application
android:requestLegacyExternalStorage="true"
...>
</application>android:requestLegacyExternalStorage="true" 属性是为了兼容旧版本的Android系统,允许应用访问外部存储。
在代码中动态申请权限:
private static final int REQUEST_PERMISSIONS = 123;
private boolean boolean_permission;
private void fn_permission() {
if ((ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) ||
(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) {
if ((ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), android.Manifest.permission.READ_EXTERNAL_STORAGE))) {
// 可以向用户解释为什么需要此权限
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_PERMISSIONS);
}
if ((ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE))) {
// 可以向用户解释为什么需要此权限
} else {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_PERMISSIONS);
}
} else {
boolean_permission = true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSIONS) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
boolean_permission = true;
// 权限已授予,可以执行文件操作
} else {
// 权限被拒绝,给出提示
Toast.makeText(getActivity(), "请授予存储权限以访问文件", Toast.LENGTH_SHORT).show();
}
}
}注意事项:
以下代码展示了如何从指定文件夹中读取PDF文件:
private List<PdfModel> readFilesFromSpecificDir() {
List<PdfModel> list = new ArrayList<>();
File filePath = new File(getDefaultStorageLocation());
File[] fileList = filePath.listFiles();
if (fileList != null) {
for (File file : fileList) {
if (file.isFile() && file.getName().toLowerCase().endsWith(".pdf")) {
// 创建 PdfModel 对象,并添加到列表中
PdfModel pdfModel = new PdfModel(file.getName(), "123", 1.12, "pdf", file.getPath());
list.add(pdfModel);
Log.e(TAG, "readFilesFromSpecificDir: working list of files are given below ______________________________________________" + file.getName());
}
}
} else {
Toast.makeText(getActivity(), "List empty...", Toast.LENGTH_SHORT).show();
}
return list;
}
public String getDefaultStorageLocation() {
File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "/YourFolderName/");
Log.e(TAG, "getDefaultStorageLocation: __________________________________" + dir);
if (!dir.exists()) {
boolean isDirectoryCreated = dir.mkdir();
if (!isDirectoryCreated) {
Toast.makeText(getActivity(), "Directory cannot be created", Toast.LENGTH_SHORT).show();
Log.e("Error", "Directory could not be created");
}
}
return dir.getAbsolutePath() + "/";
}代码解释:
注意事项:
首先,需要在布局文件中添加 RecyclerView:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />然后,创建 RecyclerView 的 Adapter:
public class PdfAdapter extends RecyclerView.Adapter<PdfAdapter.ViewHolder> {
private List<PdfModel> pdfList;
public PdfAdapter(List<PdfModel> pdfList) {
this.pdfList = pdfList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_pdf, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
PdfModel pdfModel = pdfList.get(position);
holder.fileNameTextView.setText(pdfModel.getFileName());
// 其他数据绑定
}
@Override
public int getItemCount() {
return pdfList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView fileNameTextView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
fileNameTextView = itemView.findViewById(R.id.file_name_text_view);
// 其他 View 的初始化
}
}
}代码解释:
最后,在 Activity 或 Fragment 中使用 RecyclerView:
RecyclerView recyclerView = findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); List<PdfModel> pdfList = readFilesFromSpecificDir(); PdfAdapter adapter = new PdfAdapter(pdfList); recyclerView.setAdapter(adapter);
代码解释:
本文档详细介绍了如何在Android应用中从指定文件夹读取PDF文件,并将这些文件显示在RecyclerView中。通过正确申请权限、读取文件以及使用RecyclerView,可以轻松实现文件浏览功能。请注意,代码示例需要根据实际应用场景进行适当修改。
以上就是Android教程:从指定文件夹读取PDF文件并在RecyclerView中显示的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号