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

来源:互联网 发布:爱家呐软件多少钱 编辑:程序博客网 时间:2024/05/20 05:11

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.         }  
0 0
原创粉丝点击