Android:添加自己的应用到“分享”->"发送文件"选项

Android:添加自己的应用到“分享”->"发送文件"选项

转载 2016年01月13日 15:50:45

1. 增加Intent-Filter,使得当前应用会出现在特定文件共享功能菜单里

以下示例代码表示任何类型的文件"共享"(Share via)菜单都会出现当前应用。以下intent-filter可以添加到任意activity上,也可以同时添加多个activity上

 

[html] view plaincopy
 
 
  1. <intent-filter>  
  2.      <action android:name="android.intent.action.SEND" />  
  3.   
  4.      <category android:name="android.intent.category.DEFAULT" />  
  5.   
  6.      <data android:mimeType="*/*" />  
  7.  </intent-filter>  

 

 

支持的MIME类型:
http://www.iana.org/assignments/media-types

 

常见类型:

 

[cpp] view plaincopy
 
 
  1. {".3gp", "video/3gpp"},  
  2.   {".apk", "application/vnd.android.package-archive"},  
  3.   {".asf", "video/x-ms-asf"},  
  4.   {".avi", "video/x-msvideo"},  
  5.   {".bin", "application/octet-stream"},  
  6.   {".bmp", "image/bmp"},  
  7.   {".c", "text/plain"},  
  8.   {".class", "application/octet-stream"},  
  9.   {".conf", "text/plain"},  
  10.   {".cpp", "text/plain"},  
  11.   {".doc", "application/msword"},  
  12.   {".exe", "application/octet-stream"},  
  13.   {".gif", "image/gif"},  
  14.   {".gtar", "application/x-gtar"},  
  15.   {".gz", "application/x-gzip"},  
  16.   {".h", "text/plain"},  
  17.   {".htm", "text/html"},  
  18.   {".html", "text/html"},  
  19.   {".jar", "application/java-archive"},  
  20.   {".java", "text/plain"},  
  21.   {".jpeg", "image/jpeg"},  
  22.   {".jpg", "image/jpeg"},  
  23.   {".js", "application/x-javascript"},  
  24.   {".log", "text/plain"},  
  25.   {".m3u", "audio/x-mpegurl"},  
  26.   {".m4a", "audio/mp4a-latm"},  
  27.   {".m4b", "audio/mp4a-latm"},  
  28.   {".m4p", "audio/mp4a-latm"},  
  29.   {".m4u", "video/vnd.mpegurl"},  
  30.   {".m4v", "video/x-m4v"},  
  31.   {".mov", "video/quicktime"},  
  32.   {".mp2", "audio/x-mpeg"},  
  33.   {".mp3", "audio/x-mpeg"},  
  34.   {".mp4", "video/mp4"},  
  35.   {".mpc", "application/vnd.mpohun.certificate"},  
  36.   {".mpe", "video/mpeg"},  
  37.   {".mpeg", "video/mpeg"},  
  38.   {".mpg", "video/mpeg"},  
  39.        {".mpg4", "video/mp4"},  
  40.   {".mpga", "audio/mpeg"},  
  41.   {".msg", "application/vnd.ms-outlook"},  
  42.   {".ogg", "audio/ogg"},  
  43.   {".pdf", "application/pdf"},  
  44.   {".png", "image/png"},  
  45.   {".pps", "application/vnd.ms-powerpoint"},  
  46.   {".ppt", "application/vnd.ms-powerpoint"},  
  47.   {".prop", "text/plain"},  
  48.   {".rar", "application/x-rar-compressed"},  
  49.   {".rc", "text/plain"},  
  50.   {".rmvb", "audio/x-pn-realaudio"},  
  51.   {".rtf", "application/rtf"},  
  52.   {".sh", "text/plain"},  
  53.   {".tar", "application/x-tar"},  
  54.   {".tgz", "application/x-compressed"},  
  55.   {".txt", "text/plain"},  
  56.   {".wav", "audio/x-wav"},  
  57.   {".wma", "audio/x-ms-wma"},  
  58.   {".wmv", "audio/x-ms-wmv"},  
  59.   {".wps", "application/vnd.ms-works"},  
  60.   //{".xml", "text/xml"},  
  61.   {".xml", "text/plain"},  
  62.   {".z", "application/x-compress"},  
  63.   {".zip", "application/zip"},  
  64.   {"", "*/*"}  

如果需要匹配特定类型,特定文件,可以用正则表达式,这里给出<data>参考链接:

 

http://developer.android.com/guide/topics/manifest/data-element.html

 

2.添加相应的处理代码

 

 

[java] view plaincopy
 
 
  1. @Override  
  2.     protected void onCreate(Bundle savedInstanceState)  
  3.     {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.activity_main);  
  6.   
  7.         Intent intent = getIntent();  
  8.         Bundle extras = intent.getExtras();  
  9.         String action = intent.getAction();  
  10.         // 判断Intent是否是“分享”功能(Share Via)  
  11.         if (Intent.ACTION_SEND.equals(action))  
  12.         {  
  13.             if (extras.containsKey(Intent.EXTRA_STREAM))  
  14.             {  
  15.                 try  
  16.                 {  
  17.                     // 获取资源路径Uri  
  18.                     Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);  
  19.                     Log.i(TAG, "uri:" + uri.toString());  
  20.                     //解析Uri资源  
  21.                     ContentResolver cr = getContentResolver();  
  22.                     InputStream is = cr.openInputStream(uri);  
  23.                     // Get binary bytes for encode  
  24.                     byte[] data = getBytesFromFile(is);  
  25.   
  26.                     return;  
  27.                 }  
  28.                 catch (Exception e)  
  29.                 {  
  30.                     Log.e(this.getClass().getName(), e.toString());  
  31.                 }  
  32.   
  33.             }  
  34.             else if (extras.containsKey(Intent.EXTRA_TEXT))  
  35.             {  
  36.                 return;  
  37.             }  
  38.         }  
 
posted @ 2018-03-22 13:07  sky20080101  阅读(484)  评论(0)    收藏  举报