Android隐式启动匹配:action,category,data

来源:互联网 发布:windows server2012吧 编辑:程序博客网 时间:2024/05/17 03:38

简介

Android开发中,Activity,Service 和 BroadcastReceiver 启动有两种方式,显示启动和隐式启动。

为方便下面描述,我以Activity启动为例。

显示启动便是直接指定上下文和启动的Activity的类:

Intent intent = new Intent(this,Activity.class);startActivity(intent);

隐式启动则灵活的多,通过action,category 和 data 的组合,实现多种匹配方法来启动Activity。

下面简单介绍一下隐式启动。


隐式启动

前面说过,隐式启动匹配主要靠 action,category 和 data。

特别要注意,隐式启动的Activity在AndroidManifest配置中务必加上
<category android:name="android.intent.category.DEFAULT"/>


1.根据 action 和 categories 来进行匹配

通过Intent设置action和category值来匹配启动Activity。

AndroidManifest.xml 对 Activity 进行相应定义

<activity android:name=".Activity">    <intent-filter>        <action android:name="me.pwcong.demo.activity"/>        <category android:name="android.intent.category.DEFAULT"/>        <category android:name="android.intent.category.DEMO"/>    </intent-filter></activity>

类文件

Intent intent = new Intent();//指定AndroidManifest里配置的action标签的name值intent.setAction("me.pwcong.demo.activity") //可不添加category,因为默认会添加 Intent.CATEGORY_DEFAULTintent.addCategory(Intent.CATEGORY_DEFAULT); intent.addCategory("android.intent.category.DEMO"); startActivity(intent);

要点

  1. 若有多个不同的Activity在AndroidManifest中配置了相同的 action和category,则执行启动方法是系统会弹出启动列表供用户选择启动哪个

  2. 单靠category不能进行匹配,需结合action匹配使用。
    因为单靠category进行匹配之时,若执行启动方法后,系统只通过category进行匹配找不到需要启动的activity就会报错。例如:
    AndroidManifest.xml

<activity android:name=".MyActivityTwo">    <intent-filter>    <category android:name="android.intent.category.DEFAULT" />    <category android:name="me.pwcong.demo.hello"></category>    </intent-filter></activity>

类文件

Intent intent = new Intent();intent.addCategory(Intent.CATEGORY_DEFAULT);intent.addCategory("me.pwcong.demo.hello");startActivity(intent);

2.根据 data 来进行匹配

如果在AndroidManifest.xml里面指定了这行,那么,需要匹配到它的话,在代码里必须要设置intent的data,如intent.setData(uri)

AndroidManifest.xml配置

<activity android:name=".Activity">    <intent-filter>        <action android:name="me.pwcong.demo.activity"/>        <category android:name="android.intent.category.DEFAULT"/>        <data android:scheme="content"             host="pwcong.me"             port="8080"            path="/hello"/>    </intent-filter></activity>

类文件

Uri uri = Uri.parse("content://pwcong.me:8080/hello");Intent intent = new Intent();//可不添加category,因为默认会添加 Intent.CATEGORY_DEFAULTintent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(uri);startActivity(intent);

要点

  1. Data的语法
<data android:host="string"      android:mimeType="string"      android:path="string"      android:pathPattern="string"      android:pathPrefix="string"      android:port="string"      android:scheme="string" />

Uri的格式: scheme://host:port/path or pathPrefix or pathPattern

  1. 如果scheme没有指定,那其它的属性均无效;

  2. 如果host没有指定,那么port,path,pathPrefix,pathPattern均无效;

  3. 可以有多个data,只需匹配其中一个即可


3.根据 action 和 mimeType 来进行匹配

Intent-Filter中的有一个 mimeType 属性. 它的作用是告诉Android系统本Activity可以处理的文件的类型。如设置为 “text/plain”表示可以处理“.txt”文件。

常用mimeType表如下:

3gp video/3gppaab application/x-authoware-binaam application/x-authoware-mapaas application/x-authoware-segai application/postscriptaif audio/x-aiffaifc audio/x-aiffaiff audio/x-aiffals audio/X-Alpha5amc application/x-mpegani application/octet-streamapk application/vnd.android.package-archiveasc text/plainasd application/astoundasf video/x-ms-asfasn application/astoundasp application/x-asapasx video/x-ms-asfau audio/basicavb application/octet-streamavi video/x-msvideoawb audio/amr-wbbcpio application/x-bcpiobin application/octet-streambld application/bldbld2 application/bld2bmp image/bmpbpk application/octet-streambz2 application/x-bzip2cal image/x-calsccn application/x-cnccco application/x-cocoacdf application/x-netcdfcgi magnus-internal/cgichat application/x-chatclass application/octet-streamclp application/x-msclipcmx application/x-cmxco application/x-cult3d-objectcod image/cis-codcpio application/x-cpiocpt application/mac-compactprocrd application/x-mscardfilecsh application/x-cshcsm chemical/x-csmlcsml chemical/x-csmlcss text/csscur application/octet-streamdcm x-lml/x-evmdcr application/x-directordcx image/x-dcxdhtml text/htmldir application/x-directordll application/octet-streamdmg application/octet-streamdms application/octet-streamdoc application/msworddot application/x-dotdvi application/x-dvidwf drawing/x-dwfdwg application/x-autocaddxf application/x-autocaddxr application/x-directorebk application/x-expandedbookemb chemical/x-embl-dl-nucleotideembl chemical/x-embl-dl-nucleotideeps application/postscripteri image/x-eries audio/echospeechesl audio/echospeechetc application/x-earthtimeetx text/x-setextevm x-lml/x-evmevy application/x-envoyexe application/octet-streamfh4 image/x-freehandfh5 image/x-freehandfhc image/x-freehandfif image/fiffm application/x-makerfpx image/x-fpxfvi video/isivideogau chemical/x-gaussian-inputgca application/x-gca-compressedgdb x-lml/x-gdbgif image/gifgps application/x-gpsgtar application/x-gtargz application/x-gziphdf application/x-hdfhdm text/x-hdmlhdml text/x-hdmlhlp application/winhlphqx application/mac-binhex40htm text/htmlhtml text/htmlhts text/htmlice x-conference/x-cooltalkico application/octet-streamief image/iefifm image/gififs image/ifsimy audio/melodyins application/x-NET-Installips application/x-ipscriptipx application/x-ipixit audio/x-moditz audio/x-modivr i-world/i-vrmlj2k image/j2kjad text/vnd.sun.j2me.app-descriptorjam application/x-jamjar application/java-archivejnlp application/x-java-jnlp-filejpe image/jpegjpeg image/jpegjpg image/jpegjpz image/jpegjs application/x-javascriptjwc application/jwckjx application/x-kjxlak x-lml/x-laklatex application/x-latexlcc application/fastmanlcl application/x-digitallocalcr application/x-digitallocalgh application/lghlha application/octet-streamlml x-lml/x-lmllmlpack x-lml/x-lmlpacklsf video/x-ms-asflsx video/x-ms-asflzh application/x-lzhm13 application/x-msmediaviewm14 application/x-msmediaviewm15 audio/x-modm3u audio/x-mpegurlm3url audio/x-mpegurlma1 audio/ma1ma2 audio/ma2ma3 audio/ma3ma5 audio/ma5man application/x-troff-manmap magnus-internal/imagemapmbd application/mbedletmct application/x-mascotmdb application/x-msaccessmdz audio/x-modme application/x-troff-memel text/x-vmelmi application/x-mifmid audio/midimidi audio/midimif application/x-mifmil image/x-calsmio audio/x-miommf application/x-skt-lbsmng video/x-mngmny application/x-msmoneymoc application/x-mochamocha application/x-mochamod audio/x-modmof application/x-yumekaramol chemical/x-mdl-molfilemop chemical/x-mopac-inputmov video/quicktimemovie video/x-sgi-moviemp2 audio/x-mpegmp3 audio/x-mpegmp4 video/mp4mpc application/vnd.mpohun.certificatempe video/mpegmpeg video/mpegmpg video/mpegmpg4 video/mp4mpga audio/mpegmpn application/vnd.mophun.applicationmpp application/vnd.ms-projectmps application/x-mapservermrl text/x-mrmlmrm application/x-mrmms application/x-troff-msmts application/metastreammtx application/metastreammtz application/metastreammzv application/metastreamnar application/zipnbmp image/nbmpnc application/x-netcdfndb x-lml/x-ndbndwn application/ndwnnif application/x-nifnmz application/x-screamnokia-op-logo image/vnd.nok-oplogo-colornpx application/x-netfpxnsnd audio/nsndnva application/x-neva1oda application/odaoom application/x-AtlasMate-Pluginpac audio/x-pacpae audio/x-epacpan application/x-panpbm image/x-portable-bitmappcx image/x-pcxpda image/x-pdapdb chemical/x-pdbpdf application/pdfpfr application/font-tdpfrpgm image/x-portable-graymappict image/x-pictpm application/x-perlpmd application/x-pmdpng image/pngpnm image/x-portable-anymappnz image/pngpot application/vnd.ms-powerpointppm image/x-portable-pixmappps application/vnd.ms-powerpointppt application/vnd.ms-powerpointpqf application/x-cprplayerpqi application/cprplayerprc application/x-prcproxy application/x-ns-proxy-autoconfigps application/postscriptptlk application/listenuppub application/x-mspublisherpvx video/x-pv-pvxqcp audio/vnd.qcelpqt video/quicktimeqti image/x-quicktimeqtif image/x-quicktimer3t text/vnd.rn-realtext3dra audio/x-pn-realaudioram audio/x-pn-realaudiorar application/x-rar-compressedras image/x-cmu-rasterrdf application/rdf+xmlrf image/vnd.rn-realflashrgb image/x-rgbrlf application/x-richlinkrm audio/x-pn-realaudiormf audio/x-rmfrmm audio/x-pn-realaudiormvb audio/x-pn-realaudiornx application/vnd.rn-realplayerroff application/x-troffrp image/vnd.rn-realpixrpm audio/x-pn-realaudio-pluginrt text/vnd.rn-realtextrte x-lml/x-gpsrtf application/rtfrtg application/metastreamrtx text/richtextrv video/vnd.rn-realvideorwc application/x-rogerwilcos3m audio/x-mods3z audio/x-modsca application/x-supercardscd application/x-msschedulesdf application/e-scoresea application/x-stuffitsgm text/x-sgmlsgml text/x-sgmlsh application/x-shshar application/x-sharshtml magnus-internal/parsed-htmlshw application/presentationssi6 image/si6si7 image/vnd.stiwap.sissi9 image/vnd.lgtwap.sissis application/vnd.symbian.installsit application/x-stuffitskd application/x-Koanskm application/x-Koanskp application/x-Koanskt application/x-Koanslc application/x-salsasmd audio/x-smdsmi application/smilsmil application/smilsmp application/studiomsmz audio/x-smdsnd audio/basicspc text/x-speechspl application/futuresplashspr application/x-spritesprite application/x-spritespt application/x-sptsrc application/x-wais-sourcestk application/hyperstudiostm audio/x-modsv4cpio application/x-sv4cpiosv4crc application/x-sv4crcsvf image/vndsvg image/svg-xmlsvh image/svhsvr x-world/x-svrswf application/x-shockwave-flashswfl application/x-shockwave-flasht application/x-trofftad application/octet-streamtalk text/x-speechtar application/x-tartaz application/x-tartbp application/x-timbuktutbt application/x-timbuktutcl application/x-tcltex application/x-textexi application/x-texinfotexinfo application/x-texinfotgz application/x-tarthm application/vnd.eri.thmtif image/tifftiff image/tifftki application/x-tkinedtkined application/x-tkinedtoc application/toctoy image/toytr application/x-trofftrk x-lml/x-gpstrm application/x-msterminaltsi audio/tsplayertsp application/dsptypetsv text/tab-separated-valuestsv text/tab-separated-valuesttf application/octet-streamttz application/t-timetxt text/plainult audio/x-modustar application/x-ustaruu application/x-uuencodeuue application/x-uuencodevcd application/x-cdlinkvcf text/x-vcardvdo video/vdovib audio/vibviv video/vivovivo video/vivovmd application/vocaltec-media-descvmf application/vocaltec-media-filevmi application/x-dreamcast-vms-infovms application/x-dreamcast-vmsvox audio/voxwarevqe audio/x-twinvq-pluginvqf audio/x-twinvqvql audio/x-twinvqvre x-world/x-vreamvrml x-world/x-vrmlvrt x-world/x-vrtvrw x-world/x-vreamvts workbook/formulaonewav audio/x-wavwax audio/x-ms-waxwbmp image/vnd.wap.wbmpweb application/vnd.xarawi image/waveletwis application/x-InstallShieldwm video/x-ms-wmwma audio/x-ms-wmawmd application/x-ms-wmdwmf application/x-msmetafilewml text/vnd.wap.wmlwmlc application/vnd.wap.wmlcwmls text/vnd.wap.wmlscriptwmlsc application/vnd.wap.wmlscriptcwmlscript text/vnd.wap.wmlscriptwmv audio/x-ms-wmvwmx video/x-ms-wmxwmz application/x-ms-wmzwpng image/x-up-wpngwpt x-lml/x-gpswri application/x-mswritewrl x-world/x-vrmlwrz x-world/x-vrmlws text/vnd.wap.wmlscriptwsc application/vnd.wap.wmlscriptcwv video/waveletwvx video/x-ms-wvxwxl application/x-wxlx-gzip application/x-gzipxar application/vnd.xaraxbm image/x-xbitmapxdm application/x-xdmaxdma application/x-xdmaxdw application/vnd.fujixerox.docuworksxht application/xhtml+xmlxhtm application/xhtml+xmlxhtml application/xhtml+xmlxla application/vnd.ms-excelxlc application/vnd.ms-excelxll application/x-excelxlm application/vnd.ms-excelxls application/vnd.ms-excelxlt application/vnd.ms-excelxlw application/vnd.ms-excelxm audio/x-modxml text/xmlxmz audio/x-modxpi application/x-xpinstallxpm image/x-xpixmapxsit text/xmlxsl text/xmlxul text/xulxwd image/x-xwindowdumpxyz chemical/x-pdbyz1 application/x-yz1z application/x-compresszac application/x-zaurus-zaczip application/zip
1 0
原创粉丝点击