BOB(中国)官方入口-BOB平台在线入口

栏目分类
热点资讯
BOB体育首页
你的位置:BOB(中国)官方入口-BOB平台在线入口 > BOB体育首页 > BOB体育首页 详细分析IntentFilter的匹配规则
BOB体育首页 详细分析IntentFilter的匹配规则

发布日期:2021-11-18 00:03    点击次数:58

序言 BOB体育首页

平时的Android开发中,吾们会用到IntentFilter的匹配规则。IntentFilter的主要规则分为action、category、data三个类别,只有完善匹配才能成功启动现在的Activity;

今天吾们就讲解下;

一、Activity的调用模式

Activity的调用模式有两栽:显式调用和隐式调用;

1、显式调用

大无数情况下吾们最常接触到的就是显式调用了:

Intent intent = new Intent; 

其实厉格讲,这个也不算是显式调用,由于在显式调用的意义中必要清晰之处被启动的对象的组件新闻,包括包名和类名,这边并异国之处包名:

Intent intent = new Intent; 
2、隐式调用

必要Intent能匹配现在的组件的IntentFilter中所竖立的过滤新闻.倘若不匹配将无法启动现在的Activity;

Intent intent = new Intent; 
二、IntentFilter匹配规则详解

1、Action的匹配规则 action是一个字符串,编制预定义了一些action,同时吾们也能够在行使中定义本身的action; 它的匹配规则是Intent中的action必须能够和过滤规则中的action匹配,这边说的是指action的字符串值十足相通; action中的内容是区分大幼写的; Intent中倘若异国指定action,则视为匹配战败; 一个过滤规则中有多个action,那么只要Intent中的action能够和Activity过滤规则中的任何一个action相通即可匹配成功;

 <activity android:name=".BActivity" >             <intent-filter>                 <action android:name="com.ysl.test"/>                 <action android:name="com.ysl.test1"/>                 //必须增补category android:name="android.intent.category.DEFAULT"否则报错                 <category android:name="android.intent.category.DEFAULT"/>             </intent-filter>         </activity>         <activity android:name=".AActivity" >             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity> btn_skip_b.setOnClickListener {             //A中点击按钮启动B             var intent = Intent         } 

常见action如下BOB体育首页

Intent.ACTION_MAIN,标识Activity为一个程序的开起 Intent.ACTION_VIEW,表现用户的数据 Intent.ACTION_DIAL,用户拨号面板 Intent.ACTION_SENDTO,发送新闻 Intent.ACTION_PICK,从列外中选择新闻,清淡用于选择有关人或者等 Intent.ACTION_ANSWER,处理呼入的电话 Intent.ACTION_CHOOSER,表现一个Activity选择器,比如常见的选择分享到那里 2、category的匹配规则

category是一个字符串,编制预定义了一些category,同时吾们也能够在行使中定义本身的category;

category的匹配规则是:

Intent中能够异国category,但是倘若一旦有category,不管有几个,每个都要能够和过滤规则中的任何一个category匹配; 一个Intent能够竖立多个category,且Intent中的一切category都必须匹配到Activity中; 也能够不竖立category,这时编制会自动匹配android.intent.category.DEFAULT; 这边能够感觉和action很像,但是只要稍微仔细一下就能够发现Intent是setAction和addCategory,也就是说action只有一个,而category能够有许多个且一切的category都必须出现在Activity的category荟萃;

仔细:

由于强制请求一个Activity必要一个,于是吾们不必将这个categoty增补到intent中往匹配; 倘若单独只addCategory是异国用的,必须setAction之后才走;

<!--SecondActivity的intent-filter--> <intent-filter>  <action android:name="com.axe.mg.what" />  <category android:name="com.yu.hu.category1"/>  <category android:name="com.yu.hu.category2"/>  <category android:name = "android.intent.category.DEFAULT" /> </intent-filter> <!--ThirdActivity的intent-filter--> <intent-filter>  <action android:name="com.axe.mg.what" />  <category android:name = "android.intent.category.DEFAULT" />  <category android:name="com.yu.hu.category1"/>  <category android:name="com.yu.hu.category2"/>  <category android:name="com.yu.hu.category3"/> </intent-filter> <!--FourthActivity的intent-filter--> <intent-filter>  <action android:name="com.axe.mg.what" />  <category android:name = "android.intent.category.DEFAULT" />  <category android:name="com.yu.hu.category2"/> </intent-filter> Intent intent = new Intent; 
3、data的匹配规则

data的匹配规则:Intent中必须含有data数据,并且data数据能够十足匹配过滤规则中的某一个data;

data的语法格式

<data android:scheme="string"     android:host="string"     android:port="string"     android:path="string"     android:pathPattern="string"     android:pathPrefix="string"     android:mimeType="string" /> 

data由两片面构成:mimeType和URI,URI经历如下格式,BOB体育首页包括scheme、host、port、path、pathPrefix和pathPattern;

<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>] 

详细的参数注释:

mimeType:指媒体类型比如image/jpeg、audio/mpeg4-generic、vidio/等能够外示、文本、视频等迥异的媒体格式; scheme:URI的模式如http、file、content等倘若URI中异国指定scheme那么整个URI的其他参数无效这也意味着URI是无效的; host:URI的主机名如blog.csdn.net倘若host未指定那么整个URI中的其他参数无效这也意味着URI是无效的; port:URI中的端口号比如80进档URI中指定了scheme和host参数的时候port参数才是有意义的; path:外述路径的完善新闻; pathPrefix:外述路径的前缀新闻; pathPattern:外述路径的完善新闻但它内里能够包含通配符*外示0个或肆意字符; data的仔细事项 URI能够不竖立但倘若竖立了则scheme和host属性必须要竖立; URI的scheme属性有默认值默认值为content或者file因此就算在intent-filter中异国为data竖立URI也必要在匹配的时候竖立scheme和host两个属性且scheme属性的值必须是content或者file;

<intent-filter>    <action android:name="xx" />    <category android:name="android.intent.category.DEFAULT" />    <data      android:host="www.baidu.com"      android:pathPrefix="/imgs"      android:port="8080"      android:scheme="https" />  </intent-filter>   Intent intent = new Intent; 
三、IntentFilter总结 1、IntentFilter匹配优先级

查望Intent的过滤器根据以下优先有关查找:action->data->category;

2、隐式intent;

每一个经历startActivity手段发出的隐式Intent都至稀奇一个category就是android.intent.category.DEFAULT于是只要是想授与一个隐式Intent的Activity都答该包括android.intent.category.DEFAULTcategory不然将导致Intent匹配战败

说一个activity组件要想被其他组件经历隐式intent调用则其在AndroiddManifest.xml中的声明如下:

<activity android:name="com..test.MainActivity">      <intent-filter>              <action android:name="com.test.test" />            <category android:name="android.intent.category.DEFAULT" />  </intent-filter>  </activity> 
总结

快岁暮了行家要辛勤学习能够找个益做事;

本文转载自微信公多号「Android开发程」

Linux编制中成功恢复已删除的文件 别的程序员都有NFT了老铁你等啥呢? 网络坦然行家发现经微柔WHQL认证的FiveSys驱动实际上是款凶意程序 对比WiFi6与WiFi5就差在这三项 Windows11最强功能终于了安卓柔件真的能够搪塞下

BOB电竞平台 BOB体育首页 BOB综合体育在线