出现这个问题的原因是因为使用ContentResolver.openFileDescriptor()打开文件时没有将FileDescriptor对象正确的传递到应用程序中。可以使用以下代码来解决这个问题:
1.打开文件时传递FileDescriptor对象
Uri uri = Uri.parse("content://com.example.fileprovider/document/file.pdf"); FileDescriptor fd = null; try { ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(uri, "r"); fd = pfd.getFileDescriptor(); } catch (FileNotFoundException e) { e.printStackTrace(); }
2.使用FileInputStream打开文件
InputStream stream = getContentResolver().openInputStream(uri); FileDescriptor fd = ((FileInputStream) stream).getFD(); stream.close();
注意:使用以上代码可以解决这个问题。但是如果使用过时的方法,可能会在某些设备上出现问题。建议使用最新的API版本来处理这个问题。