android+stduidio+http+proxy,详解Android系统中跨应用数据分享功能的实现

一个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列出所有的应用供用户选择(一个选择器),如下图

15059139191.png?201631152757

可能你觉得上面的代码很简单,我很容易就能写出来,可是你发现了没有,当我们的手机里面没有地图类型的应用程序,你执行startActivity方法,你的程序就会出现Crash(崩溃),所以我们需要先判断下系统是否有这类型的应用程序,判断也很简单

public boolean hasApplication(Intent intent){

PackageManager packageManager = getPackageManager();

//查询是否有该Intent的Activity

List 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)));

主要下面几点:

你可以使用MIME type为“ */*”,他只会匹配处理一般数据流的Activity

接收应用程序需要Uri指定数据的访问权限

在SD卡的文件,我们使用File file = new File(filePath); Uri.fromFile(file),然后把他传递给Intent

在应用程序的目录中,openFileOutput的模式为MODE_WORLD_READABLE,然后我们可以使用getFileStreamPath()返回一个File,然后利用Uri.fromFile(file)传递给Intent

可以扫描图像,视频和音频等媒体文件,添加到系统MediaStore使用SCANFILE()来扫描文件,扫描完成后会调用 onScanCompleted()回调方法来返回一个Uri

图片使用insertImage()方法插入到系统MediaStore也会返回一个图片的Uri

下面是共享图片的例子:

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空间后,图片就显示在那里了,如下图

15059139202.png?20163115296

我们要共享多个二进制内容利用Action为ACTION_SEND_MULTIPLE,下面是我们共享多张图片

ArrayList imageUris = new ArrayList();

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类型

text/plain(纯文本)

text/html(HTML文档)

application/xhtml+xml(XHTML文档)

image/gif(GIF图像)

image/jpeg(JPEG图像)【PHP中为:image/pjpeg】

image/png(PNG图像)【PHP中为:image/x-png】

video/mpeg(MPEG动画)

application/octet-stream(任意的二进制数据)

application/pdf(PDF文档)

application/msword(Microsoft Word文件)

message/rfc822(RFC 822形式)

multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)

application/x-www-form-urlencoded(使用HTTP的POST方法提交的表单)

multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)

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,下面我们举个简单的例子,相信大家知道举一反三,下面的例子我们的应用程序可以处理文本,文本文件,单一的图片和多张图片,我们定义Manifest文件如下

package="com.example.sharedcontext"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="8"

android:targetSdkVersion="16" />

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name="com.example.sharedcontext.MainActivity"

android:label="@string/app_name" >

当一个应用程序构建上面那样子的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,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 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 list;

public GridAdapter(Context mContext,ArrayList 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);

}else{

imageView = (ImageView) convertView;

}

imageView.setImageURI(list.get(position));

return imageView;

}

}

}

运行程序之后,然后我们选择系统图库,选择多张图片(如图一)进行分享,我们自己的应用程序分享多张界面(如图二)点击我们应用程序的item,选择分享单张图片(如图三)我们继续选择我们自己的应用程序来显示(如图四),新建一个备忘录保存,长按备忘录进行分享(如图五),分享文本文件的显示界面(如图六)

15059139203.jpg?201631153837

15059139214.png?201631153732

15059139225.jpg?201631153856

15059139226.png?201631153917

15059139237.png?201631153940

15059139238.png?201631153959

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值