与ACTION_SEND意图共享未知文件类型时,设置内容类型时应使用*/*
还是application/octet-stream
?
根据 Mozilla 的Complete list of MIME types
两种主要的MIME类型对于默认类型的作用很重要:
- text / plain是文本文件的默认值。文本文件应该是人类可读的,不得包含二进制数据。
- application / octet-stream是所有其他情况的默认值。未知的文件类型应使用此类型。浏览器在操作这些文件时要特别小心,试图保护用户以防止危险行为。
实施例
Intent intent = new Intent(Intent.ActionSend);
Uri uri = Uri.FromFile(file);
intent.PutExtra(Intent.ExtraStream, uri);
string fileType = GetMimeTypeByUri(uri);
if (fileType == null)
{
fileType = "*/*"; // ?
fileType = "application/octet-stream"; // ?
fileType = "application/x-binary" // ?
}
intent.SetType(fileType);
StartActivity(Intent.CreateChooser(intent, "Send to..."));
,其中
private String GetMimeTypeByUri(Uri uri)
{
if (uri.Scheme.Equals(ContentResolver.SchemeContent))
return ContentResolver.GetType(uri);
else
return Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(
Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(uri.Path).ToLower()
);
}
}
答案 0 :(得分:1)
fileType =“* / *”;
如果您无法从系统中确定mime类型的“* / *”(它为空),则会触发相应的选择应用程序对话框。
fileType =“application / octet-stream”;
通常,它是必须在应用程序中打开的应用程序或文档,例如电子表格或文字处理程序。 The "octet-stream" subtype is used to indicate that a body contains arbitrary binary data
fileType =“application / x-binary”
这只是重复“八位字节流”的非标准方式。
查看链接以获取详细信息MIME types,MIME Utils
希望这可能会使你感到高兴。