隐式调用
在前文 activity四种启动模式及Flag 中我们知道启动一个activity是可以通过activity.startActivity ( intent )来显式调用 启动的。相对于显式调用,android还提供了一种implicit intents(隐式Intent)来启动activity,这就需要用到 < intent-filter >了。
准确的来讲,Intent的隐式调用只是启动符合某一特定< Intent - Filter> 的 activity,而不是指定activity。
Uri number = Uri.parse("tel:10086");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
在执行类似的隐式调用时,系统会去匹配过滤那些与Intent携带的action,category,data等属性,这些属性是特定的字符串。只有这些声明属性相同的activity,才会被启动,当多个符合规则的activity同时存在时,系统会弹出一个选择框让用户选择。
如上图,系统存在多个提供壁纸选择的activity供用户选择,用户可以默认使用其中一项,下次还有相同的隐式调用就默认打开,同时,activity这种隐式调用的规则也实现了不同APP间的跳转。
注: 不仅仅只有activity才能通过implicit intents(隐式Intent)来调起,包括service、broadcast receiver也是可以接受的。本文为节省篇幅不做过多说明,详情请移步android 官网api引导intent-filter-element
Intent - Filter
当Intent 隐式调用时,为了尽可能准确的筛选你的activity,Manifests 中每一个activity声明的intent filter都应该写清楚。
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>