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 Activity生命周期详解(图文)
  2. android Activity生命周期详解(图文)
  3. [置顶] [Android] AsyncTask使用实例---加载网络图片
  4. Android(安卓)剪切板监听
  5. android 竖屏activity跳转横屏activity返回时数据消失
  6. Android(安卓)获取网络状态及调用网络配置界面(转帖)
  7. Android(安卓)GPS学习 (一) :GPS 启动流程
  8. Android上调用google map api v2
  9. 浅析android下如何通过jni监控wifi网络连接、dhcpcd执行和power

随机推荐

  1. android 混淆
  2. Android(安卓)Contacts(一)—— 读取联系人
  3. Programmatically Injecting Events on A
  4. Android(安卓)编程 技巧
  5. Android中下载文件的使用
  6. Android横屏竖屏切换的问题
  7. Android(安卓)handler异步更新
  8. Android的状态栏通知(Notification)
  9. Android实现左侧滑动菜单
  10. Android中实现Launcher功能之一 ----- 添