Android无法打开内部目录PDF文件问题求助
Let's work through the issues preventing your PDF from opening. Since you can't copy the file, we'll focus on correcting your FileProvider setup and permission handling to make the internal file accessible to PDF readers.
1. Verify FileProvider Configuration
The most common issue here is incorrect path mapping in your FileProvider setup. Your PDF is in the User subdirectory of your app's internal files folder, so you need to explicitly include this path in your FileProvider's XML configuration.
Step 1: Update AndroidManifest.xml
Ensure your FileProvider is registered correctly with the right authority and grant permissions:
<provider android:name="androidx.core.content.FileProvider" android:authorities="@string/file_provider_authority" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
Note: Make sure the authorities value matches the string you're using in context.getString(R.string.file_provider_authority).
Step 2: Create/Update res/xml/file_paths.xml
Add a files-path entry that maps to the User subdirectory:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Maps the /files/User/ directory to the "user_files" alias --> <files-path name="user_files" path="User/" /> </paths>
This tells FileProvider to expose files in the User subfolder of your internal storage.
2. Fix Permission Granting
While FLAG_GRANT_READ_URI_PERMISSION works in some cases, many PDF readers require explicit permission grants. Modify your code to grant permissions to all eligible apps:
File PDFFile = new File(context.getFilesDir(), "User/751f8052e.pdf"); // Ensure this points to your file Uri imageUri; if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { imageUri = FileProvider.getUriForFile(context, context.getString(R.string.file_provider_authority), PDFFile); } else { imageUri = Uri.fromFile(PDFFile); } Intent viewIntent = new Intent(Intent.ACTION_VIEW); viewIntent.setDataAndType(imageUri, "application/pdf"); viewIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // Grant permission to all apps that can handle this intent List<ResolveInfo> resolveInfoList = context.getPackageManager().queryIntentActivities(viewIntent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo resolveInfo : resolveInfoList) { String packageName = resolveInfo.activityInfo.packageName; context.grantUriPermission(packageName, imageUri, Intent.FLAG_GRANT_READ_URI_PERMISSION); } // Use a chooser to let the user select a PDF reader context.startActivity(Intent.createChooser(viewIntent, "Open PDF with"));
3. Validate File Existence and Accessibility
Before attempting to open the file, add checks to ensure it exists and is readable:
if (!PDFFile.exists()) { Log.e("PDF_ERROR", "File does not exist: " + PDFFile.getAbsolutePath()); return; } if (!PDFFile.canRead()) { Log.e("PDF_ERROR", "File cannot be read: " + PDFFile.getAbsolutePath()); return; }
This will help you rule out issues like a missing file or incorrect file permissions.
4. Double-Check MIME Type
Ensure you're using the correct MIME type "application/pdf"—avoid typos like "pdf" or "application/PDF" (case matters on some devices).
After applying these fixes, your PDF should open correctly in any installed PDF reader without needing to copy the file to another directory.
内容的提问来源于stack exchange,提问作者Syeda Zunaira

