一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享
当你构建Intent的时候,必须要指定Intent的Action触发,定义Intent的Action例如ACTION_SEND,你大概可以猜到指定Action为ACTION_SEND的Intent的作用是从一个Activity发送数据到另一个Activity,甚至跨越不同的进程,将数据发送给另一个Activity,你需要指定数据和他的类型,系统将识别接收的Activity,并显示他们给用户(假如有多个选择的时候)或者立即启动Activity(只要一个选择的时候)
1.发送文本内容:
最直接最常用的是用ACTION_SEND来从一个应用发送文本内容到另一个应用,例如,我们的内置浏览器可以与任何页面当前的URL来共享文字,下面的例子就是共享文本内容
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); //这里是你发送的文本 sendIntent.putExtra(Intent.EXTRA_TEXT, \"我用手机测试分享内容\"); sendIntent.setType(\"text/plain\"); startActivity(sendIntent);
假如你安装了过滤Action为ACTION_SEND,MIMEtype为“text/plain”的应用程序,这个系统就会启动,假如系统匹配到多个这样子的应用程序,他就会弹出一个Dialog列出所有的应用供用户选择(一个选择器),如下图
可能你觉得上面的代码很简单,我很容易就能写出来,可是你发现了没有,当我们的手机里面没有地图类型的应用程序,你执行startActivity方法,你的程序就会出现Crash(崩溃),所以我们需要先判断下系统是否有这类型的应用程序,判断也很简单
public boolean hasApplication(Intent intent){
PackageManager packageManager = getPackageManager();
//查询是否有该Intent的Activity
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
//activities里面不为空就有,否则就没有
return activities.size() > 0 ? true : false;
所以我们在startActivity的时候要做上面的判断,这样子我们开发出来的程序才会更加的健壮,少一些Crash用户体验也会更好,假如每次都要判断你师傅会觉得烦?所以我们也可以使用Intent的Intent.createChooser方法
他有如下优点
1.1 即使用户选择了默认的方式,选择器仍然会弹出来
1.2 如果没有匹配到这样的应用程序,系统就会提示消息
1.3 你可以指定选择器Dialog的标题
Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, \"我用手机测试分享内容\"); sendIntent.setType(\"text/plain\"); startActivity(Intent.createChooser(sendIntent, \"我是弹出框的标题\"));
注:某些邮件类应用程序,如Gmail,我们可以使用putExtra(Intent.EXTRA_EMAIL, String[]) 添加一个字符串数组到Intent中
2.发送二进制内容
二进制内容的共享使用Action为ACTION_SEND,在设置适当的MIME类型,并且添加putExtra(Intent.EXTRA_STREAM, URI),下面是一个常用的共享图片的代码,也可以共享任何类型的二进制内容
Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage); shareIntent.setType(\"image/jpeg\"); startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));
主要下面几点:
下面是共享图片的例子:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
File file = new File(\"mnt/sdcard/share.png\");
System.out.println(Uri.fromFile(file));
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
shareIntent.setType(\"image/jpeg\");
startActivity(Intent.createChooser(shareIntent, \"共享图片\"));
选择QQ空间后,图片就显示在那里了,如下图
我们要共享多个二进制内容利用Action为ACTION_SEND_MULTIPLE,下面是我们共享多张图片
ArrayList<Uri> imageUris = new ArrayList<Uri>(); imageUris.add(imageUri1); // Add your image URIs here imageUris.add(imageUri2); Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); shareIntent.setType(\"image/*\"); startActivity(Intent.createChooser(shareIntent, \"Share images to..\"));
下面我列出几个常用的MIME type类型
Android所有支持的MIME type
sMimeTypeMap.loadEntry(\"application/andrew-inset\", \"ez\");
sMimeTypeMap.loadEntry(\"application/dsptype\", \"tsp\");
sMimeTypeMap.loadEntry(\"application/futuresplash\", \"spl\");
sMimeTypeMap.loadEntry(\"application/hta\", \"hta\");
sMimeTypeMap.loadEntry(\"application/mac-binhex40\", \"hqx\");
sMimeTypeMap.loadEntry(\"application/mac-compactpro\", \"cpt\");
sMimeTypeMap.loadEntry(\"application/mathematica\", \"nb\");
sMimeTypeMap.loadEntry(\"application/msaccess\", \"mdb\");
sMimeTypeMap.loadEntry(\"application/oda\", \"oda\");
sMimeTypeMap.loadEntry(\"application/ogg\", \"ogg\");
sMimeTypeMap.loadEntry(\"application/pdf\", \"pdf\");
sMimeTypeMap.loadEntry(\"application/pgp-keys\", \"key\");
sMimeTypeMap.loadEntry(\"application/pgp-signature\", \"pgp\");
sMimeTypeMap.loadEntry(\"application/pics-rules\", \"prf\");
sMimeTypeMap.loadEntry(\"application/rar\", \"rar\");
sMimeTypeMap.loadEntry(\"application/rdf+xml\", \"rdf\");
sMimeTypeMap.loadEntry(\"application/rss+xml\", \"rss\");
sMimeTypeMap.loadEntry(\"application/zip\", \"zip\");
sMimeTypeMap.loadEntry(\"application/vnd.android.package-archive\",
\"apk\");
sMimeTypeMap.loadEntry(\"application/vnd.cinderella\", \"cdy\");
sMimeTypeMap.loadEntry(\"application/vnd.ms-pki.stl\", \"stl\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.database\", \"odb\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.formula\", \"odf\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.graphics\", \"odg\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.graphics-template\",
\"otg\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.image\", \"odi\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.spreadsheet\", \"ods\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.spreadsheet-template\",
\"ots\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.text\", \"odt\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.text-master\", \"odm\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.text-template\", \"ott\");
sMimeTypeMap.loadEntry(
\"application/vnd.oasis.opendocument.text-web\", \"oth\");
sMimeTypeMap.loadEntry(\"application/msword\", \"doc\");
sMimeTypeMap.loadEntry(\"application/msword\", \"dot\");
sMimeTypeMap.loadEntry(
\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",
\"docx\");
sMimeTypeMap.loadEntry(
\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\",
\"dotx\");
sMimeTypeMap.loadEntry(\"application/vnd.ms-excel\", \"xls\");
sMimeTypeMap.loadEntry(\"application/vnd.ms-excel\", \"xlt\");
sMimeTypeMap.loadEntry(
\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",
\"xlsx\");
sMimeTypeMap.loadEntry(
\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\",
\"xltx\");
sMimeTypeMap.loadEntry(\"application/vnd.ms-powerpoint\", \"ppt\");
sMimeTypeMap.loadEntry(\"application/vnd.ms-powerpoint\", \"pot\");
sMimeTypeMap.loadEntry(\"application/vnd.ms-powerpoint\", \"pps\");
sMimeTypeMap.loadEntry(
\"application/vnd.openxmlformats-officedocument.presentationml.presentation\",
\"pptx\");
sMimeTypeMap.loadEntry(
\"application/vnd.openxmlformats-officedocument.presentationml.template\",
\"potx\");
sMimeTypeMap.loadEntry(
\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\",
\"ppsx\");
sMimeTypeMap.loadEntry(\"application/vnd.rim.cod\", \"cod\");
sMimeTypeMap.loadEntry(\"application/vnd.smaf\", \"mmf\");
sMimeTypeMap.loadEntry(\"application/vnd.stardivision.calc\", \"sdc\");
sMimeTypeMap.loadEntry(\"application/vnd.stardivision.draw\", \"sda\");
sMimeTypeMap.loadEntry(
\"application/vnd.stardivision.impress\", \"sdd\");
sMimeTypeMap.loadEntry(
\"application/vnd.stardivision.impress\", \"sdp\");
sMimeTypeMap.loadEntry(\"application/vnd.stardivision.math\", \"smf\");
sMimeTypeMap.loadEntry(\"application/vnd.stardivision.writer\",
\"sdw\");
sMimeTypeMap.loadEntry(\"application/vnd.stardivision.writer\",
\"vor\");
sMimeTypeMap.loadEntry(
\"application/vnd.stardivision.writer-global\", \"sgl\");
sMimeTypeMap.loadEntry(\"application/vnd.sun.xml.calc\", \"sxc\");
sMimeTypeMap.loadEntry(
\"application/vnd.sun.xml.calc.template\", \"stc\");
sMimeTypeMap.loadEntry(\"application/vnd.sun.xml.draw\", \"sxd\");
sMimeTypeMap.loadEntry(
\"application/vnd.sun.xml.draw.template\", \"std\");
sMimeTypeMap.loadEntry(\"application/vnd.sun.xml.impress\", \"sxi\");
sMimeTypeMap.loadEntry(
\"application/vnd.sun.xml.impress.template\", \"sti\");
sMimeTypeMap.loadEntry(\"application/vnd.sun.xml.math\", \"sxm\");
sMimeTypeMap.loadEntry(\"application/vnd.sun.xml.writer\", \"sxw\");
sMimeTypeMap.loadEntry(
\"application/vnd.sun.xml.writer.global\", \"sxg\");
sMimeTypeMap.loadEntry(
\"application/vnd.sun.xml.writer.template\", \"stw\");
sMimeTypeMap.loadEntry(\"application/vnd.visio\", \"vsd\");
sMimeTypeMap.loadEntry(\"application/x-abiword\", \"abw\");
sMimeTypeMap.loadEntry(\"application/x-apple-diskimage\", \"dmg\");
sMimeTypeMap.loadEntry(\"application/x-bcpio\", \"bcpio\");
sMimeTypeMap.loadEntry(\"application/x-bittorrent\", \"torrent\");
sMimeTypeMap.loadEntry(\"application/x-cdf\", \"cdf\");
sMimeTypeMap.loadEntry(\"application/x-cdlink\", \"vcd\");
sMimeTypeMap.loadEntry(\"application/x-chess-pgn\", \"pgn\");
sMimeTypeMap.loadEntry(\"application/x-cpio\", \"cpio\");
sMimeTypeMap.loadEntry(\"application/x-debian-package\", \"deb\");
sMimeTypeMap.loadEntry(\"application/x-debian-package\", \"udeb\");
sMimeTypeMap.loadEntry(\"application/x-director\", \"dcr\");
sMimeTypeMap.loadEntry(\"application/x-director\", \"dir\");
sMimeTypeMap.loadEntry(\"application/x-director\", \"dxr\");
sMimeTypeMap.loadEntry(\"application/x-dms\", \"dms\");
sMimeTypeMap.loadEntry(\"application/x-doom\", \"wad\");
sMimeTypeMap.loadEntry(\"application/x-dvi\", \"dvi\");
sMimeTypeMap.loadEntry(\"application/x-flac\", \"flac\");
sMimeTypeMap.loadEntry(\"application/x-font\", \"pfa\");
sMimeTypeMap.loadEntry(\"application/x-font\", \"pfb\");
sMimeTypeMap.loadEntry(\"application/x-font\", \"gsf\");
sMimeTypeMap.loadEntry(\"application/x-font\", \"pcf\");
sMimeTypeMap.loadEntry(\"application/x-font\", \"pcf.Z\");
sMimeTypeMap.loadEntry(\"application/x-freemind\", \"mm\");
sMimeTypeMap.loadEntry(\"application/x-futuresplash\", \"spl\");
sMimeTypeMap.loadEntry(\"application/x-gnumeric\", \"gnumeric\");
sMimeTypeMap.loadEntry(\"application/x-go-sgf\", \"sgf\");
sMimeTypeMap.loadEntry(\"application/x-graphing-calculator\", \"gcf\");
sMimeTypeMap.loadEntry(\"application/x-gtar\", \"gtar\");
sMimeTypeMap.loadEntry(\"application/x-gtar\", \"tgz\");
sMimeTypeMap.loadEntry(\"application/x-gtar\", \"taz\");
sMimeTypeMap.loadEntry(\"application/x-hdf\", \"hdf\");
sMimeTypeMap.loadEntry(\"application/x-ica\", \"ica\");
sMimeTypeMap.loadEntry(\"application/x-internet-signup\", \"ins\");
sMimeTypeMap.loadEntry(\"application/x-internet-signup\", \"isp\");
sMimeTypeMap.loadEntry(\"application/x-iphone\", \"iii\");
sMimeTypeMap.loadEntry(\"application/x-iso9660-image\", \"iso\");
sMimeTypeMap.loadEntry(\"application/x-jmol\", \"jmz\");
sMimeTypeMap.loadEntry(\"application/x-kchart\", \"chrt\");
sMimeTypeMap.loadEntry(\"application/x-killustrator\", \"kil\");
sMimeTypeMap.loadEntry(\"application/x-koan\", \"skp\");
sMimeTypeMap.loadEntry(\"application/x-koan\", \"skd\");
sMimeTypeMap.loadEntry(\"application/x-koan\", \"skt\");
sMimeTypeMap.loadEntry(\"application/x-koan\", \"skm\");
sMimeTypeMap.loadEntry(\"application/x-kpresenter\", \"kpr\");
sMimeTypeMap.loadEntry(\"application/x-kpresenter\", \"kpt\");
sMimeTypeMap.loadEntry(\"application/x-kspread\", \"ksp\");
sMimeTypeMap.loadEntry(\"application/x-kword\", \"kwd\");
sMimeTypeMap.loadEntry(\"application/x-kword\", \"kwt\");
sMimeTypeMap.loadEntry(\"application/x-latex\", \"latex\");
sMimeTypeMap.loadEntry(\"application/x-lha\", \"lha\");
sMimeTypeMap.loadEntry(\"application/x-lzh\", \"lzh\");
sMimeTypeMap.loadEntry(\"application/x-lzx\", \"lzx\");
sMimeTypeMap.loadEntry(\"application/x-maker\", \"frm\");
sMimeTypeMap.loadEntry(\"application/x-maker\", \"maker\");
sMimeTypeMap.loadEntry(\"application/x-maker\", \"frame\");
sMimeTypeMap.loadEntry(\"application/x-maker\", \"fb\");
sMimeTypeMap.loadEntry(\"application/x-maker\", \"book\");
sMimeTypeMap.loadEntry(\"application/x-maker\", \"fbdoc\");
sMimeTypeMap.loadEntry(\"application/x-mif\", \"mif\");
sMimeTypeMap.loadEntry(\"application/x-ms-wmd\", \"wmd\");
sMimeTypeMap.loadEntry(\"application/x-ms-wmz\", \"wmz\");
sMimeTypeMap.loadEntry(\"application/x-msi\", \"msi\");
sMimeTypeMap.loadEntry(\"application/x-ns-proxy-autoconfig\", \"pac\");
sMimeTypeMap.loadEntry(\"application/x-nwc\", \"nwc\");
sMimeTypeMap.loadEntry(\"application/x-object\", \"o\");
sMimeTypeMap.loadEntry(\"application/x-oz-application\", \"oza\");
sMimeTypeMap.loadEntry(\"application/x-pkcs12\", \"p12\");
sMimeTypeMap.loadEntry(\"application/x-pkcs7-certreqresp\", \"p7r\");
sMimeTypeMap.loadEntry(\"application/x-pkcs7-crl\", \"crl\");
sMimeTypeMap.loadEntry(\"application/x-quicktimeplayer\", \"qtl\");
sMimeTypeMap.loadEntry(\"application/x-shar\", \"shar\");
sMimeTypeMap.loadEntry(\"application/x-shockwave-flash\", \"swf\");
sMimeTypeMap.loadEntry(\"application/x-stuffit\", \"sit\");
sMimeTypeMap.loadEntry(\"application/x-sv4cpio\", \"sv4cpio\");
sMimeTypeMap.loadEntry(\"application/x-sv4crc\", \"sv4crc\");
sMimeTypeMap.loadEntry(\"application/x-tar\", \"tar\");
sMimeTypeMap.loadEntry(\"application/x-texinfo\", \"texinfo\");
sMimeTypeMap.loadEntry(\"application/x-texinfo\", \"texi\");
sMimeTypeMap.loadEntry(\"application/x-troff\", \"t\");
sMimeTypeMap.loadEntry(\"application/x-troff\", \"roff\");
sMimeTypeMap.loadEntry(\"application/x-troff-man\", \"man\");
sMimeTypeMap.loadEntry(\"application/x-ustar\", \"ustar\");
sMimeTypeMap.loadEntry(\"application/x-wais-source\", \"src\");
sMimeTypeMap.loadEntry(\"application/x-wingz\", \"wz\");
sMimeTypeMap.loadEntry(\"application/x-webarchive\", \"webarchive\");
sMimeTypeMap.loadEntry(\"application/x-x509-ca-cert\", \"crt\");
sMimeTypeMap.loadEntry(\"application/x-x509-user-cert\", \"crt\");
sMimeTypeMap.loadEntry(\"application/x-xcf\", \"xcf\");
sMimeTypeMap.loadEntry(\"application/x-xfig\", \"fig\");
sMimeTypeMap.loadEntry(\"application/xhtml+xml\", \"xhtml\");
sMimeTypeMap.loadEntry(\"audio/3gpp\", \"3gpp\");
sMimeTypeMap.loadEntry(\"audio/basic\", \"snd\");
sMimeTypeMap.loadEntry(\"audio/midi\", \"mid\");
sMimeTypeMap.loadEntry(\"audio/midi\", \"midi\");
sMimeTypeMap.loadEntry(\"audio/midi\", \"kar\");
sMimeTypeMap.loadEntry(\"audio/mpeg\", \"mpga\");
sMimeTypeMap.loadEntry(\"audio/mpeg\", \"mpega\");
sMimeTypeMap.loadEntry(\"audio/mpeg\", \"mp2\");
sMimeTypeMap.loadEntry(\"audio/mpeg\", \"mp3\");
sMimeTypeMap.loadEntry(\"audio/mpeg\", \"m4a\");
sMimeTypeMap.loadEntry(\"audio/mpegurl\", \"m3u\");
sMimeTypeMap.loadEntry(\"audio/prs.sid\", \"sid\");
sMimeTypeMap.loadEntry(\"audio/x-aiff\", \"aif\");
sMimeTypeMap.loadEntry(\"audio/x-aiff\", \"aiff\");
sMimeTypeMap.loadEntry(\"audio/x-aiff\", \"aifc\");
sMimeTypeMap.loadEntry(\"audio/x-gsm\", \"gsm\");
sMimeTypeMap.loadEntry(\"audio/x-mpegurl\", \"m3u\");
sMimeTypeMap.loadEntry(\"audio/x-ms-wma\", \"wma\");
sMimeTypeMap.loadEntry(\"audio/x-ms-wax\", \"wax\");
sMimeTypeMap.loadEntry(\"audio/x-pn-realaudio\", \"ra\");
sMimeTypeMap.loadEntry(\"audio/x-pn-realaudio\", \"rm\");
sMimeTypeMap.loadEntry(\"audio/x-pn-realaudio\", \"ram\");
sMimeTypeMap.loadEntry(\"audio/x-realaudio\", \"ra\");
sMimeTypeMap.loadEntry(\"audio/x-scpls\", \"pls\");
sMimeTypeMap.loadEntry(\"audio/x-sd2\", \"sd2\");
sMimeTypeMap.loadEntry(\"audio/x-wav\", \"wav\");
sMimeTypeMap.loadEntry(\"image/bmp\", \"bmp\");
sMimeTypeMap.loadEntry(\"image/gif\", \"gif\");
sMimeTypeMap.loadEntry(\"image/ico\", \"cur\");
sMimeTypeMap.loadEntry(\"image/ico\", \"ico\");
sMimeTypeMap.loadEntry(\"image/ief\", \"ief\");
sMimeTypeMap.loadEntry(\"image/jpeg\", \"jpeg\");
sMimeTypeMap.loadEntry(\"image/jpeg\", \"jpg\");
sMimeTypeMap.loadEntry(\"image/jpeg\", \"jpe\");
sMimeTypeMap.loadEntry(\"image/pcx\", \"pcx\");
sMimeTypeMap.loadEntry(\"image/png\", \"png\");
sMimeTypeMap.loadEntry(\"image/svg+xml\", \"svg\");
sMimeTypeMap.loadEntry(\"image/svg+xml\", \"svgz\");
sMimeTypeMap.loadEntry(\"image/tiff\", \"tiff\");
sMimeTypeMap.loadEntry(\"image/tiff\", \"tif\");
sMimeTypeMap.loadEntry(\"image/vnd.djvu\", \"djvu\");
sMimeTypeMap.loadEntry(\"image/vnd.djvu\", \"djv\");
sMimeTypeMap.loadEntry(\"image/vnd.wap.wbmp\", \"wbmp\");
sMimeTypeMap.loadEntry(\"image/x-cmu-raster\", \"ras\");
sMimeTypeMap.loadEntry(\"image/x-coreldraw\", \"cdr\");
sMimeTypeMap.loadEntry(\"image/x-coreldrawpattern\", \"pat\");
sMimeTypeMap.loadEntry(\"image/x-coreldrawtemplate\", \"cdt\");
sMimeTypeMap.loadEntry(\"image/x-corelphotopaint\", \"cpt\");
sMimeTypeMap.loadEntry(\"image/x-icon\", \"ico\");
sMimeTypeMap.loadEntry(\"image/x-jg\", \"art\");
sMimeTypeMap.loadEntry(\"image/x-jng\", \"jng\");
sMimeTypeMap.loadEntry(\"image/x-ms-bmp\", \"bmp\");
sMimeTypeMap.loadEntry(\"image/x-photoshop\", \"psd\");
sMimeTypeMap.loadEntry(\"image/x-portable-anymap\", \"pnm\");
sMimeTypeMap.loadEntry(\"image/x-portable-bitmap\", \"pbm\");
sMimeTypeMap.loadEntry(\"image/x-portable-graymap\", \"pgm\");
sMimeTypeMap.loadEntry(\"image/x-portable-pixmap\", \"ppm\");
sMimeTypeMap.loadEntry(\"image/x-rgb\", \"rgb\");
sMimeTypeMap.loadEntry(\"image/x-xbitmap\", \"xbm\");
sMimeTypeMap.loadEntry(\"image/x-xpixmap\", \"xpm\");
sMimeTypeMap.loadEntry(\"image/x-xwindowdump\", \"xwd\");
sMimeTypeMap.loadEntry(\"model/iges\", \"igs\");
sMimeTypeMap.loadEntry(\"model/iges\", \"iges\");
sMimeTypeMap.loadEntry(\"model/mesh\", \"msh\");
sMimeTypeMap.loadEntry(\"model/mesh\", \"mesh\");
sMimeTypeMap.loadEntry(\"model/mesh\", \"silo\");
sMimeTypeMap.loadEntry(\"text/calendar\", \"ics\");
sMimeTypeMap.loadEntry(\"text/calendar\", \"icz\");
sMimeTypeMap.loadEntry(\"text/comma-separated-values\", \"csv\");
sMimeTypeMap.loadEntry(\"text/css\", \"css\");
sMimeTypeMap.loadEntry(\"text/html\", \"htm\");
sMimeTypeMap.loadEntry(\"text/html\", \"html\");
sMimeTypeMap.loadEntry(\"text/h323\", \"323\");
sMimeTypeMap.loadEntry(\"text/iuls\", \"uls\");
sMimeTypeMap.loadEntry(\"text/mathml\", \"mml\");
// add it first so it will be the default for ExtensionFromMimeType
sMimeTypeMap.loadEntry(\"text/plain\", \"txt\");
sMimeTypeMap.loadEntry(\"text/plain\", \"asc\");
sMimeTypeMap.loadEntry(\"text/plain\", \"text\");
sMimeTypeMap.loadEntry(\"text/plain\", \"diff\");
sMimeTypeMap.loadEntry(\"text/plain\", \"po\"); // reserve \"pot\" for vnd.ms-powerpoint
sMimeTypeMap.loadEntry(\"text/richtext\", \"rtx\");
sMimeTypeMap.loadEntry(\"text/rtf\", \"rtf\");
sMimeTypeMap.loadEntry(\"text/texmacs\", \"ts\");
sMimeTypeMap.loadEntry(\"text/text\", \"phps\");
sMimeTypeMap.loadEntry(\"text/tab-separated-values\", \"tsv\");
sMimeTypeMap.loadEntry(\"text/xml\", \"xml\");
sMimeTypeMap.loadEntry(\"text/x-bibtex\", \"bib\");
sMimeTypeMap.loadEntry(\"text/x-boo\", \"boo\");
sMimeTypeMap.loadEntry(\"text/x-c++hdr\", \"h++\");
sMimeTypeMap.loadEntry(\"text/x-c++hdr\", \"hpp\");
sMimeTypeMap.loadEntry(\"text/x-c++hdr\", \"hxx\");
sMimeTypeMap.loadEntry(\"text/x-c++hdr\", \"hh\");
sMimeTypeMap.loadEntry(\"text/x-c++src\", \"c++\");
sMimeTypeMap.loadEntry(\"text/x-c++src\", \"cpp\");
sMimeTypeMap.loadEntry(\"text/x-c++src\", \"cxx\");
sMimeTypeMap.loadEntry(\"text/x-chdr\", \"h\");
sMimeTypeMap.loadEntry(\"text/x-component\", \"htc\");
sMimeTypeMap.loadEntry(\"text/x-csh\", \"csh\");
sMimeTypeMap.loadEntry(\"text/x-csrc\", \"c\");
sMimeTypeMap.loadEntry(\"text/x-dsrc\", \"d\");
sMimeTypeMap.loadEntry(\"text/x-haskell\", \"hs\");
sMimeTypeMap.loadEntry(\"text/x-java\", \"java\");
sMimeTypeMap.loadEntry(\"text/x-literate-haskell\", \"lhs\");
sMimeTypeMap.loadEntry(\"text/x-moc\", \"moc\");
sMimeTypeMap.loadEntry(\"text/x-pascal\", \"p\");
sMimeTypeMap.loadEntry(\"text/x-pascal\", \"pas\");
sMimeTypeMap.loadEntry(\"text/x-pcs-gcd\", \"gcd\");
sMimeTypeMap.loadEntry(\"text/x-setext\", \"etx\");
sMimeTypeMap.loadEntry(\"text/x-tcl\", \"tcl\");
sMimeTypeMap.loadEntry(\"text/x-tex\", \"tex\");
sMimeTypeMap.loadEntry(\"text/x-tex\", \"ltx\");
sMimeTypeMap.loadEntry(\"text/x-tex\", \"sty\");
sMimeTypeMap.loadEntry(\"text/x-tex\", \"cls\");
sMimeTypeMap.loadEntry(\"text/x-vcalendar\", \"vcs\");
sMimeTypeMap.loadEntry(\"text/x-vcard\", \"vcf\");
sMimeTypeMap.loadEntry(\"video/3gpp\", \"3gpp\");
sMimeTypeMap.loadEntry(\"video/3gpp\", \"3gp\");
sMimeTypeMap.loadEntry(\"video/3gpp\", \"3g2\");
sMimeTypeMap.loadEntry(\"video/dl\", \"dl\");
sMimeTypeMap.loadEntry(\"video/dv\", \"dif\");
sMimeTypeMap.loadEntry(\"video/dv\", \"dv\");
sMimeTypeMap.loadEntry(\"video/fli\", \"fli\");
sMimeTypeMap.loadEntry(\"video/m4v\", \"m4v\");
sMimeTypeMap.loadEntry(\"video/mpeg\", \"mpeg\");
sMimeTypeMap.loadEntry(\"video/mpeg\", \"mpg\");
sMimeTypeMap.loadEntry(\"video/mpeg\", \"mpe\");
sMimeTypeMap.loadEntry(\"video/mp4\", \"mp4\");
sMimeTypeMap.loadEntry(\"video/mpeg\", \"VOB\");
sMimeTypeMap.loadEntry(\"video/quicktime\", \"qt\");
sMimeTypeMap.loadEntry(\"video/quicktime\", \"mov\");
sMimeTypeMap.loadEntry(\"video/vnd.mpegurl\", \"mxu\");
sMimeTypeMap.loadEntry(\"video/x-la-asf\", \"lsf\");
sMimeTypeMap.loadEntry(\"video/x-la-asf\", \"lsx\");
sMimeTypeMap.loadEntry(\"video/x-mng\", \"mng\");
sMimeTypeMap.loadEntry(\"video/x-ms-asf\", \"asf\");
sMimeTypeMap.loadEntry(\"video/x-ms-asf\", \"asx\");
sMimeTypeMap.loadEntry(\"video/x-ms-wm\", \"wm\");
sMimeTypeMap.loadEntry(\"video/x-ms-wmv\", \"wmv\");
sMimeTypeMap.loadEntry(\"video/x-ms-wmx\", \"wmx\");
sMimeTypeMap.loadEntry(\"video/x-ms-wvx\", \"wvx\");
sMimeTypeMap.loadEntry(\"video/x-msvideo\", \"avi\");
sMimeTypeMap.loadEntry(\"video/x-sgi-movie\", \"movie\");
sMimeTypeMap.loadEntry(\"x-conference/x-cooltalk\", \"ice\");
sMimeTypeMap.loadEntry(\"x-epoc/x-sisx-app\", \"sisx\");
3.接收图片
下面要分享的是从其他的应用程序接收内容,比如你开发了一个社交网络的应用,你其中的某个Activity可以接受人们从其他的应用分享的东西,例如分享文字或者从图库分享图片等等,接下来我们利用一个例子来讲解从其他的应用接受内容
我们新建一个Android工程,名字为SharedContext,修改Manifest文件
我们需要在Manifest文件中定义这个Activity能接收什么样的Intent,我们需要创建Intent过滤器,使用 <intent-filter> 元素来过滤我们能接收的Intent,下面我们举个简单的例子,相信大家知道举一反三,下面的例子我们的应用程序可以处理文本,文本文件,单一的图片和多张图片,我们定义Manifest文件如下
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"
package=\"com.example.sharedcontext\"
android:versionCode=\"1\"
android:versionName=\"1.0\" >
<uses-sdk
android:minSdkVersion=\"8\"
android:targetSdkVersion=\"16\" />
<application
android:allowBackup=\"true\"
android:icon=\"@drawable/ic_launcher\"
android:label=\"@string/app_name\"
android:theme=\"@style/AppTheme\" >
<activity
android:name=\"com.example.sharedcontext.MainActivity\"
android:label=\"@string/app_name\" >
<!-- 应用程序的启动 Intent,我们例子只有一个Activity-->
<intent-filter>
<action android:name=\"android.intent.action.MAIN\" />
<category android:name=\"android.intent.category.LAUNCHER\" />
</intent-filter>
<!-- 处理文字的Intent 我们需要定义action, category, 和文字对应的MIME -->
<intent-filter>
<action android:name=\"android.intent.action.SEND\" />
<category android:name=\"android.intent.category.DEFAULT\" />
<data android:mimeType=\"text/*\" />
</intent-filter>
<!-- 处理单张图片的Intent -->
<intent-filter>
<action android:name=\"android.intent.action.SEND\" />
<category android:name=\"android.intent.category.DEFAULT\" />
<data android:mimeType=\"image/*\" />
</intent-filter>
<!-- 处理多张图片的Intent -->
<intent-filter>
<action android:name=\"android.intent.action.SEND_MULTIPLE\" />
<category android:name=\"android.intent.category.DEFAULT\" />
<data android:mimeType=\"image/*\" />
</intent-filter>
</activity>
</application
</manifest>
当一个应用程序构建上面那样子的Intent,并吧它传递给StartActivity(),我们的应用程序就会被列在Intent选择器中,当用户选择该应用程序就进入相对应的Activity(上面的例子是MainActivity),我们只需要在MainActivity处理这样内容并用相对应的UI显示, MainActivity如下
package com.example.sharedcontext;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
//获得Intent的Action
String action = intent.getAction();
//获得Intent的MIME type
String type = intent.getType();
if(Intent.ACTION_SEND.equals(action) && type != null){
//我们这里处理所有的文本类型
if(type.startsWith(\"text/\")){
//处理获取到的文本,这里我们用TextView显示
handleSendText(intent);
}
//图片的MIME type有 image/png , image/jepg, image/gif 等,
else if(type.startsWith(\"image/\")){
//处理获取到图片,我们用ImageView显示
handleSendImage(intent);
}
}
else if(Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null){
if (type.startsWith(\"image/\")) {
//处理多张图片,我们用一个GridView来显示
handleSendMultipleImages(intent);
}
}
}
/**
* 用TextView显示文本
* 可以打开一般的文本文件
* @param intent
*/
private void handleSendText(Intent intent){
TextView textView = new TextView(this);
//一般的文本处理,我们直接显示字符串
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if(sharedText != null){
textView.setText(sharedText);
}
//文本文件处理,从Uri中获取输入流,然后将输入流转换成字符串
Uri textUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if(textUri != null){
try {
InputStream inputStream = this.getContentResolver().openInputStream(textUri);
textView.setText(inputStream2Byte(inputStream));
} catch (Exception e) {
e.printStackTrace();
}
}
//设置给Activity
setContentView(textView);
}
/**
* 将输入流转换成字符串
* @param inputStream
* @return
* @throws IOException
*/
private String inputStream2Byte(InputStream inputStream) throws IOException{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte [] buffer = new byte[1024];
int len = -1;
while((len = inputStream.read(buffer)) != -1){
bos.write(buffer, 0, len);
}
bos.close();
//指定编码格式为UIT-8
return new String(bos.toByteArray(), \"UTF-8\");
}
/**
* 用ImageView显示单张图片
* @param intent
*/
private void handleSendImage(Intent intent) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
ImageView imageView = new ImageView(this);
imageView.setImageURI(imageUri);
setContentView(imageView);
}
}
/**
* 用GridView显示多张图片
* @param intent
*/
private void handleSendMultipleImages(Intent intent) {
final ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (imageUris != null) {
GridView gridView = new GridView(this);
//设置item的宽度
gridView.setColumnWidth(130);
//设置列为自动适应
gridView.setNumColumns(GridView.AUTO_FIT);
gridView.setAdapter(new GridAdapter(this, imageUris));
setContentView(gridView);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
//点击GridView的item 可以分享图片给其他应用
//这里可以参考http://blog.csdn.net/xiaanming/article/details/9395991
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, imageUris.get(position));
intent.setType(\"image/*\");
startActivity(Intent.createChooser(intent, \"共享图片\"));
}
});
}
}
/**
* 重写BaseAdapter
* @author xiaanming
*
*/
public class GridAdapter extends BaseAdapter{
private Context mContext;
private ArrayList<Uri> list;
public GridAdapter(Context mContext, ArrayList<Uri> list){
this.list = list;
this.mContext = mContext;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if(convertView == null){
imageView = new ImageView(mContext);
imageView.setPadding(8, 8, 8, 8);
}else{
imageView = (ImageView) convertView;
}
imageView.setImageURI(list.get(position));
return imageView;
}
}
}
运行程序之后,然后我们选择系统图库,选择多张图片(如图一)进行分享,我们自己的应用程序分享多张界面(如图二)点击我们应用程序的item,选择分享单张图片(如图三)我们继续选择我们自己的应用程序来显示(如图四),新建一个备忘录保存,长按备忘录进行分享(如图五),分享文本文件的显示界面(如图六)
本文地址:https://www.stayed.cn/item/17121
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我