ACTION_SEND意图内容类型未知(* / * vs application / octet-stream)

时间:2017-08-21 20:20:55

标签: android android-intent xamarin.android

与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()
        );
    }
}

1 个答案:

答案 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 typesMIME Utils

希望这可能会使你感到高兴。