IntentFilter存在的意义
显式Intent:通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的。
隐式Intent:通过Intent Filter来实现的,它一般用在没有明确指出目标组件名称的前提下,一般是用于在不同应用程序之间。
显示Intent:
ComponentName comp = new ComponentName(FirstActivity.this, SecondActivity.class);
Intent intent = new Intent();
intent.setComponent(comp);
以上代码创建了一个intent对象, 并为其指定了Component属性, 它等价于下面的代码:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
setComponent() ,setClass(),setClassName()都可以用来显式指定目标组件.
当程序采用以上方法启动组件时, 在Intent中明确的指定了待启动的组件类, 此时的Intent属于显式intent, 显式Intent应用场合比较狭窄, 多用于启动本应用中的组件, 因为这种方式需要提前获知目标组件类的全限定名.
隐式Intent:
隐式Intent则通过Intent中的action, category, data属性指定目标组件需要满足的若干条件, 系统筛选出满足所有条件的component, 从中选择最合适的component或者由用户选择一个component作为目标组件启动.
//调用浏览器
Uri uri = Uri.parse("");
Intent it = new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);
一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。
任何一个需要隐式启动的Activity都必须要有这项:<category android:name="android.intent.category.DEFAULT"/>
例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有必要加入android.intent.category.DEFAULT,加入也是正确的