安卓隐式意图(Intent)
本文实现安卓页面间(Activity)的跳转是根据安卓隐式意图来实现的。
在任玉刚的《Android开发艺术探索》一书中,对Android中的Intent跳转以及IntentFilter的匹配规则作了非常详细的说明,这里简单介绍一下。
首先了解下IntentFilter
的匹配规则:
Action
Action至少需要设置一个。目的IntentFilter中至少存在一个和自身的Action一致
Category
Category可以不设置。如果设置了,则目的IntentFilter中必须包含所有已设置的Category。需要说明的是:在Activity跳转过程中,系统会给Intent默认添加名称为:"android.intent.category.DEFAULT"的Category。所以如果一个Activity允许隐式访问的话,则必须添加"android.intent.category.DEFAULT"的Category
Data
Data由两部分构成:mimeType以及URI。mimeType指媒体类型,比如:image/png、audio/mpeg4-generic 、video/*等,可以表示图片、音频、视频等不同的媒体格式。而URI则可以对比一个url地址解释。需要至少有一个完全匹配(支持通配符)。需要说明的几点是:
mimeType
有默认值:content
和file
IntentFilter
的setData
和setType
方法会清除彼此内容,同时设置时需要调用setDataAndType
路由的设计
自定义Action
定义全局的Action
作为跳转的IntentFilter
的Action
比如:
<action android:name="com.github.lotty.action.NAVIGATION" />
添加默认的Category
通过上文对Category的分析,如果一个Activity允许被隐式意图访问,则必须添加默认值:
"android.intent.category.DEFAULT"
,所以所有的Activity的I