为什么 ACTION_SEND 不像画廊的分享按钮?
Why does ACTION_SEND not behave like gallery's share button?
我实现了以下代码来分享视频:
// Copy video file to Fileprovider directory.
final String destFile = …
// Build FileProvider uri.
final Uri uri = FileProvider.getUriForFile(activity, AUTHORITY, destFile)
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
sendIntent.setType("video/*");
Log.d(TAG, "Sharing " + sendIntent.getType() + " for " + uri);
String title = "Share this content with";
Intent chooser = Intent.createChooser(sendIntent, title);
if (null != sendIntent.resolveActivity(activity.getPackageManager())) {
activity.startActivity(chooser);
}
此代码有效并显示了选择器。当我 select 像 Telegram 这样的消息传递应用程序时,我可以选择目标对话,但视频是作为文件附件发送的,这意味着用户只能看到一个文档图标,需要下载并从外部打开。但是,使用 OS 系统图库的同一视频将在他们的视频编辑器中打开 Telegram,他们可以在其中 cut/edit 媒体,发送后将在对话中内联显示。
我错过了什么才能获得相同的行为?查看 Android git 存储库,我没有看到与此共享内容有任何不同,所以我不知道我缺少什么。我用这段代码得到的日志看起来像
Sharing video/* for content://com.app.android.fileprovider/share/video-a.mp4
所以它不仅有 mime 类型而且文件扩展名也有帮助。当我更改代码以对图像使用不同的 MIME 类型时,我得到了相同的行为,其中图像被内嵌到 Telegram 的聊天中。
出于某种原因,罪魁祸首是 FileProvider
。一旦我删除了 FileProvider
并直接传入 file://
URI,一切正常。
我实现了以下代码来分享视频:
// Copy video file to Fileprovider directory.
final String destFile = …
// Build FileProvider uri.
final Uri uri = FileProvider.getUriForFile(activity, AUTHORITY, destFile)
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
sendIntent.setType("video/*");
Log.d(TAG, "Sharing " + sendIntent.getType() + " for " + uri);
String title = "Share this content with";
Intent chooser = Intent.createChooser(sendIntent, title);
if (null != sendIntent.resolveActivity(activity.getPackageManager())) {
activity.startActivity(chooser);
}
此代码有效并显示了选择器。当我 select 像 Telegram 这样的消息传递应用程序时,我可以选择目标对话,但视频是作为文件附件发送的,这意味着用户只能看到一个文档图标,需要下载并从外部打开。但是,使用 OS 系统图库的同一视频将在他们的视频编辑器中打开 Telegram,他们可以在其中 cut/edit 媒体,发送后将在对话中内联显示。
我错过了什么才能获得相同的行为?查看 Android git 存储库,我没有看到与此共享内容有任何不同,所以我不知道我缺少什么。我用这段代码得到的日志看起来像
Sharing video/* for content://com.app.android.fileprovider/share/video-a.mp4
所以它不仅有 mime 类型而且文件扩展名也有帮助。当我更改代码以对图像使用不同的 MIME 类型时,我得到了相同的行为,其中图像被内嵌到 Telegram 的聊天中。
出于某种原因,罪魁祸首是 FileProvider
。一旦我删除了 FileProvider
并直接传入 file://
URI,一切正常。