Android Activity和Intent机制进修条记(2)

(5)component(组件),指定Intent的的方针组件的类名称。凡是 Android会按照Intent 中包括的其它属性的信息,好比action、data/type、category举办查找,最终找到一个与之匹配的方针组件。可是,假如 component这个属性有指定的话,将直接利用它指定的组件,而不再执行上述查找进程。指定了这个属性今后,Intent的其它所有属性都是可选的。

(6)extras(附加信息),是其它所有附加信息的荟萃。利用extras可觉得组件提供扩展信息,好比,假如要执行“发送电子邮件”这个行动,可以将电子邮件的标题、正文等生存在extras里,传给电子邮件发送组件。

领略Intent的要害之一是领略清楚Intent的两种根基用法:一种是显式的Intent,即在结构Intent工具时就指定吸收者;另一种是隐式的Intent,即Intent的发送者在结构Intent工具时,并不知道也不体贴吸收者是谁,有利于低落发送者和吸收者之间的耦合。

对付显式Intent,Android不需要去做理会,因为方针组件已经很明晰,Android需要理会的是那些隐式Intent,通过理会,将 Intent映射给可以处理惩罚此Intent的Activity、IntentReceiver或Service。        

Intent理会机制主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及个中界说的Intent,最终找到匹配的Intent。在这个理会进程中,Android是通过Intent的action、type、category这三个属性来举办判定的,判定要领如下:

假如Intent指明定了action,则方针组件的IntentFilter的action列表中就必需包括有这个action,不然不能匹配;

假如Intent没有提供type,系统将从data中获得数据范例。和action一样,方针组件的数据范例列表中必需包括Intent的数据范例,不然不能匹配。

假如Intent中的数据不是content: 范例的URI,并且Intent也没有明晰指定它的type,将按照Intent中数据的scheme (好比 http: 可能mailto:) 举办匹配。同上,Intent 的scheme必需呈此刻方针组件的scheme列表中。

假如Intent指定了一个或多个category,这些种别必需全部呈此刻组建的种别列表中。好比Intent中包括了两个种别:LAUNCHER_CATEGORY 和 ALTERNATIVE_CATEGORY,理会获得的方针组件必需至少包括这两个种别。

Intent-Filter的界说

一些属性配置的例子:

<action android:name="com.example.project.SHOW_CURRENT" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="video/mpeg" android:scheme="http" . . . /> <data android:mimeType="image/*" /><data android:scheme="http" android:type="video/*" />

完整的实例

<activityandroid:name="NotesList"android:label="@string/title_notes_list">             <intent-filter>                 <actionandroid:name="android.intent.action.MAIN"/>                 <categoryandroid:name="android.intent.category.LAUNCHER"/>             </intent-filter>             <intent-filter>                 <actionandroid:name="android.intent.action.VIEW"/>                 <actionandroid:name="android.intent.action.EDIT"/>                 <actionandroid:name="android.intent.action.PICK"/>                 <categoryandroid:name="android.intent.category.DEFAULT"/>                 <dataandroid:mimeType="vnd.android.cursor.dir/vnd.google.note"/>             </intent-filter>             <intent-filter>                 <actionandroid:name="android.intent.action.GET_CONTENT"/>                 <categoryandroid:name="android.intent.category.DEFAULT"/>                 <dataandroid:mimeType="vnd.android.cursor.item/vnd.google.note"/>             </intent-filter>         </activity>

Intent用法实例

1.无参数Activity跳转

Intent it = new Intent(Activity.Main.this, Activity2.class); startActivity(it);

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8491.html