使用 FileProvider 共享 DocumentFile
Sharing DocumentFile using FileProvider
如果我想共享 File
类型的 sourceFile
,我会使用 FileProvider 与权限。片段:
val intent = Intent(Intent.ACTION_SEND)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.putExtra(
Intent.EXTRA_STREAM, FileProvider.getUriForFile(
context,
context.applicationContext.packageName + ".provider",
sourceFile
)
)
intent.type = "audio/ogg"
startActivity(context, Intent.createChooser(intent, context.getString(R.string.share_audio)), null)
如果 sourceFile
是 DocumentFile
而不是 File
,正确的方法是什么?
我找不到与 DocumentFile
兼容的 getUriForFile
的任何替代品。目前我只是将文件复制到缓存然后从那里共享它,但我想应该有更好的方法。
What is a proper way to do that if sourceFile is a DocumentFile instead of File?
在那种情况下您不需要 FileProvider
。相反,在 DocumentFile
上调用 getUri()
,并在 Intent
中使用 Uri
。
Uri fileUri = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
try {
fileUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".myfileprovider", file);
} catch (Exception e) {
e.printStackTrace();
}
} else {
fileUri = Uri.parse("file://" + file.getAbsolutePath());
}
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("audio/ogg");
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(Intent.createChooser(share, "Share"), 201);
如果我想共享 File
类型的 sourceFile
,我会使用 FileProvider 与权限。片段:
val intent = Intent(Intent.ACTION_SEND)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.putExtra(
Intent.EXTRA_STREAM, FileProvider.getUriForFile(
context,
context.applicationContext.packageName + ".provider",
sourceFile
)
)
intent.type = "audio/ogg"
startActivity(context, Intent.createChooser(intent, context.getString(R.string.share_audio)), null)
如果 sourceFile
是 DocumentFile
而不是 File
,正确的方法是什么?
我找不到与 DocumentFile
兼容的 getUriForFile
的任何替代品。目前我只是将文件复制到缓存然后从那里共享它,但我想应该有更好的方法。
What is a proper way to do that if sourceFile is a DocumentFile instead of File?
在那种情况下您不需要 FileProvider
。相反,在 DocumentFile
上调用 getUri()
,并在 Intent
中使用 Uri
。
Uri fileUri = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
try {
fileUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".myfileprovider", file);
} catch (Exception e) {
e.printStackTrace();
}
} else {
fileUri = Uri.parse("file://" + file.getAbsolutePath());
}
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("audio/ogg");
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(Intent.createChooser(share, "Share"), 201);