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,加入也是正确的

posted on 2012-08-09 16:05  风也无踪  阅读(316)  评论(0编辑  收藏  举报

导航