1. 增加Intent-Filter,使得当前应用会出现在特定文件共享功能菜单里
以下示例代码表示任何类型的文件"共享"(Share via)菜单都会出现当前应用。以下intent-filter可以添加到任意activity上,也可以同时添加多个activity上
- <intent-filter>
- <action android:name="android.intent.action.SEND" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="*/*" />
- </intent-filter>
http://www.iana.org/assignments/media-types
常见类型:
- {".3gp", "video/3gpp"},
- {".apk", "application/vnd.android.package-archive"},
- {".asf", "video/x-ms-asf"},
- {".avi", "video/x-msvideo"},
- {".bin", "application/octet-stream"},
- {".bmp", "image/bmp"},
- {".c", "text/plain"},
- {".class", "application/octet-stream"},
- {".conf", "text/plain"},
- {".cpp", "text/plain"},
- {".doc", "application/msword"},
- {".exe", "application/octet-stream"},
- {".gif", "image/gif"},
- {".gtar", "application/x-gtar"},
- {".gz", "application/x-gzip"},
- {".h", "text/plain"},
- {".htm", "text/html"},
- {".html", "text/html"},
- {".jar", "application/java-archive"},
- {".java", "text/plain"},
- {".jpeg", "image/jpeg"},
- {".jpg", "image/jpeg"},
- {".js", "application/x-javascript"},
- {".log", "text/plain"},
- {".m3u", "audio/x-mpegurl"},
- {".m4a", "audio/mp4a-latm"},
- {".m4b", "audio/mp4a-latm"},
- {".m4p", "audio/mp4a-latm"},
- {".m4u", "video/vnd.mpegurl"},
- {".m4v", "video/x-m4v"},
- {".mov", "video/quicktime"},
- {".mp2", "audio/x-mpeg"},
- {".mp3", "audio/x-mpeg"},
- {".mp4", "video/mp4"},
- {".mpc", "application/vnd.mpohun.certificate"},
- {".mpe", "video/mpeg"},
- {".mpeg", "video/mpeg"},
- {".mpg", "video/mpeg"},
- {".mpg4", "video/mp4"},
- {".mpga", "audio/mpeg"},
- {".msg", "application/vnd.ms-outlook"},
- {".ogg", "audio/ogg"},
- {".pdf", "application/pdf"},
- {".png", "image/png"},
- {".pps", "application/vnd.ms-powerpoint"},
- {".ppt", "application/vnd.ms-powerpoint"},
- {".prop", "text/plain"},
- {".rar", "application/x-rar-compressed"},
- {".rc", "text/plain"},
- {".rmvb", "audio/x-pn-realaudio"},
- {".rtf", "application/rtf"},
- {".sh", "text/plain"},
- {".tar", "application/x-tar"},
- {".tgz", "application/x-compressed"},
- {".txt", "text/plain"},
- {".wav", "audio/x-wav"},
- {".wma", "audio/x-ms-wma"},
- {".wmv", "audio/x-ms-wmv"},
- {".wps", "application/vnd.ms-works"},
- //{".xml", "text/xml"},
- {".xml", "text/plain"},
- {".z", "application/x-compress"},
- {".zip", "application/zip"},
- {"", "*/*"}
如果需要匹配特定类型,特定文件,可以用正则表达式,这里给出<data>参考链接:
http://developer.android.com/guide/topics/manifest/data-element.html
2.添加相应的处理代码
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Intent intent = getIntent();
- Bundle extras = intent.getExtras();
- String action = intent.getAction();
- // 判断Intent是否是“分享”功能(Share Via)
- if (Intent.ACTION_SEND.equals(action))
- {
- if (extras.containsKey(Intent.EXTRA_STREAM))
- {
- try
- {
- // 获取资源路径Uri
- Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM);
- Log.i(TAG, "uri:" + uri.toString());
- //解析Uri资源
- ContentResolver cr = getContentResolver();
- InputStream is = cr.openInputStream(uri);
- // Get binary bytes for encode
- byte[] data = getBytesFromFile(is);
- return;
- }
- catch (Exception e)
- {
- Log.e(this.getClass().getName(), e.toString());
- }
- }
- else if (extras.containsKey(Intent.EXTRA_TEXT))
- {
- return;
- }
- }