Intent是Android中用来调用其它组件的类,通过Intent,我们可以非常方便的调用Activity,Broadcast Receiver和Service。

Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.baidu.com"));startActivity(intent);
上面这段代码可以用来调用第三方的Activity(启动第三方浏览器来打开百度首页)。

Intent有隐式和显式之分,上面的

Intent intent = new Intent(Intent.ACTION_VIEW);
所创建的intent被称为隐式Intent。构建隐式Intent需要一个表示action的字符串(例如Intent.ACTION_VIEW,其值为" android.intent.action.VIEW"),Android会寻找能够处理该action的Activity(在manifest文件中的该Activity下的intent-filter中声明),并且调用他。

有时候可能多个Activity都声明能够处理某一个action,例如:

<activity    android:name=".Activity1">    <intent-filter>        <action android:name="com.abc.def" />        <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>
<activity    android:name=".Activity2">    <intent-filter>        <action android:name="com.abc.def" />        <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>
上面Activity1和Activity2都声明能够处理“com.abc.def”的action,因此当我们执行以下代码时
Intent intent = new Intent("com.abc.def");startActivity(intent);

Activity1和Activity2都符合要求,Android将弹出"Complete Action Using"的对话框来让用户选择一个要执行的Activity。

值得注意的是,要想能够匹配隐式Intent的调用,必须包含DEFAULT的category(就是<category android:name="android.intent.category.DEFAULT"/>),而若要匹配显式Intent,则不需要该category。

对于隐式Intent,除了action之外,还可以提供多种信息来帮助Android选择最佳匹配。还可以添加的其他信息包括:host,mimeType,path,pathPattern,pathPrefix,port,scheme。

例如为上面Activity2在manifest中的配置添加一个mimeType的属性:

<activity    android:name=".Activity2">    <intent-filter>        <action android:name="com.abc.def" />        <category android:name="android.intent.category.DEFAULT" />        <data android:mimeType="abc/def"/>    </intent-filter></activity>
那么:

Intent intent = new Intent("com.abc.def");startActivity(intent);//只有Activity1符合/********************************************/Intent intent = new Intent("com.abc.def");intent.setType("abc/def");startActivity(intent);//只有Activity2符合

如果在创建Intent的时候,指明了要调用的类(例如new Intent(xxActivity.this, xx.class),或者通过setComponent来指定),那么这样的Intent被称为显示Intent。

对于显式Intent,因为他已经指明了要调用的具体的类,所以Android会忽略掉其action,category以及data属性。(个人觉得显示Intent调用比隐式的更快些)

更多相关文章

  1. android Property Animation 属性动画详解
  2. Android Studio代码混淆,开启Proguard,稍微总结一下
  3. 探讨相对布局的重要特性和属性
  4. android查询软件(身份证号,号码归属等)源代码
  5. android Java代码的启动
  6. Android 代码设置来电铃声
  7. android 执行shell命令代码
  8. android 开发中常用颜色,以及一些颜色的代码

随机推荐

  1. android adapter的性能小结
  2. 首批Android(安卓)Q版本真机上线,Testin云
  3. 2011-03-29 15:30 android用于打开各种文
  4. 使用Animation轮播图片
  5. Android应用程序组件Content Provider的
  6. Android之——通用安装apk方法
  7. Android(安卓) 资源类型
  8. FFmpeg In Android(安卓)- H264码流解码/
  9. 学习Android书籍
  10. Html jquery实现根据 IOS和Android访问跳