从Android 11开始,Google增强了沙盒策略。因此,应用程序不再能够访问其他应用的私有目录。这也导致非媒体文件的文件传输不起作用。但是,我们可以通过使用ContentProvider来实现非媒体文件的文件传输。
以下是示例代码:
public class MyContentProvider extends ContentProvider {
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
File file = new File(getContext().getFilesDir(), uri.getLastPathSegment());
int fileMode = ParcelFileDescriptor.parseMode(mode);
return ParcelFileDescriptor.open(file, fileMode);
}
// …
}
Uri fileUri = FileProvider.getUriForFile(getContext(), "com.example.mycontentprovider", new File(getContext().getFilesDir(), "filename"));
Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("/"); intent.putExtra(Intent.EXTRA_STREAM, fileUri); startActivity(Intent.createChooser(intent, "Share file"));
通过上述步骤,我们可以成功传输非媒体文件。