2 隐式Intent方式
使用隐式Intent方法创建活动,此时不会指定创建哪个活动,而是指定设指定一些信息,由系统根据指定的信息选择合适的活动来满足该Intent。
在《Android Studio中Intent的用法1》中提到,Intent的主要信息包括了Action(动作)和Data(数据)。除了以上两个主要信息外,Intent还包含了一些次要信息,例如Category(类别)、type(类型)、component(组件)和extras(附加信息)等。
可以通过Action、Data和Category实现隐式Intent。
2.1 Action实现隐式Intent
通过Action实现隐式Intent,需要设置要启动的活动的Action。
2.1.1 设置活动的Action
在AndroidManifest.xml中设置活动的Action,如图6所示。
图6 设置活动的Action
其中,“intent-filer”是意图过滤器,是“activity”元素的子元素,在“intent-filer”子元素中包含了Intent(意图)的属性,其中“action”子元素就定义了Main2Activity这个活动的“动作”,其名字为“yang”;“category”子元素表示Action(动作)提供额外的信息,“android.intent.category.DEFAULT”表示默认“category”的默认值。
2.1.2 设置Intent的Action
在代码中设置Intent的Action,如图7所示。
图7 设置Intent的Action
其中,通过setAction()方法设置了intent的活动,该活动的名称是“yang”,之后调用startActivity启动活动。此时虽然没有显性指定启动哪个活动,但是由于指定了活动的Action,安卓系统会根据其设置的活动名称找到与之匹配的活动,即Main2Activity,并启动该活动,完成隐形Intent。
2.2 Data实现隐式Intent
2.2.1 设置活动的Data
如图8所示,activity的“intent-filter”子元素中的“data”子元素设置了活动的Data,其属性“android:scheme”表示数据的体系,其值为“yang”。
图8 设置活动的Data
需要注意的是,在使用Data实现隐式Intent时,也需要指定其Action。
2.2.2 设置Intent的Data
在代码中设置Intent的Data,如图9所示。
图9 设置Intent的Data
其中,setAction()方法的作用是设置Action;setData()方法的作用是设置Data。注意此时数据的格式为“yang://”,对应的是“2.2.1 设置活动的Data”中的“android:scheme”属性。此时,也会调用“Main2Activity”实现intent。
2.3 Category实现隐式Intent
2.3.1 Category简介
Category用来为要完成的Action(动作)提供额外的信息。当要完成一个Intent(意图)时,可以指定一些Category(种类),只有满足这些Category的Activity(活动)才能够被激活,不满足这些Category的Activity不会被激活。通过Category,Intent可以调用指定的Activity,而Activity也可以通过设置其Category等待Intent的激活。
需要注意的是,因为Category是为Action提供额外信息,因此使用Category实现隐式Intent时,需要指定Intent的Action。
2.3.2 设置活动的Category
在代码中设置Intent的Category,如图10所示。
图10 设置活动的category
Activity可以有多个category子元素,从以上代码中可以看到,“Main2Activity”有两个category,一个名为“yang”,另一个是默认值。
2.3.3 设置Intent的Category
设置Intent的Category如图10所示。
图10 设置Intent的Category
其中,使用setAction()方法设置了Intent的Action;通过addCategory()方法为Intent添加了“yang”这个Category。最后,“Main2Activity”这个活动将会被调用。