android 的 intent 使用方法

#移动开发 #Android

android 的 intent 使用方法

1. 说明
Android 中提供了 Intent 机制来协助应用间或者应用程序内部的交互与通讯。 Intent 的两种基本用法:一种是显式的 Intent,即在构造 Intent

对象时就指定接收者,这种方式与普通的函数调用类似;另一种是隐式的 Intent,即 Intent 的发送者在构造 Intent

对象时,并不知道接收者是谁,只是指出接收者的一些特性(比如说启动音乐播放软件)

2. 使用方法

  1. 启动服务
  1. 关键函数
    context.startService() 或 context.bindService()

  2. 示例
    ** Intent i = new Intent(this, MyTestService.class);
    this.startService(i); // ** ** 启动 ** ** service **

  1. 发送广播
  1. 关键函数
    context.sendBroadcast()

  2. 发送方
    ** String msg = “test”;
    Intent i = new Intent(“com.test.bc”);
    i.pubExtra(“msg”, msg);
    this.sendBroadcase(i); **

  3. 接收方
    ** IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);
    registerReceiver(mReceiver.interFilter); **

  1. 启动应用程序
  1. 关键函数
    context.startActivity()

  2. 示例
    ** Intent intent =
    new Intent(“com.android.browser“, “com.android.browser.BrowserActivity“);
    startActivity(intent); **

3. Intent 的组成
Intent 的参数可多可少,系统 根据不同的参数组合过滤出一个或多个适合规则的界面

  1. 调用方:以下几个规则可以同时指定,也可以指定一部分或几部分
    Component:指定包名类名来调用 (见上例),它是 晚绑定,不会在编译时报错
    Action:指定做什么的规则 (比如 ACTION_DIAL 指定拨号类型应用),以供过滤
    Data:提供的重要数据,通常是 Uri,同时也提供数据的类型,以供过滤
    Type:用于指定类型,以供过滤 (比如 ACTION_VIEW 同时指定为 Type 为 Image,则调出浏览图片的应用)
    Category:指定范围
    Extras:通过 Bundle 类传参, 数据多,数据量大时用它传
    Flags:标志位 (比如 FLAG_ACTIVITY_NEW_TASK 指定新开一个任务)

  2. 被调用方
    在 AndroidManifest.xml 中的 中声明规则
    例如: 一般程序都需要在 inter-filter 中加入 android.intent.category.LAUNCHER 的声明,

以便被程序启动器 (Launcher) 识别, 即以点击图标的方式供用户运行

  1. 示例
    ** Intent intent = new Intent();
    intent.setClassName(“com.android.browser“,
    “com.android.browser.BrowserActivity“); // ** ** 打开浏览器 ** **
    Uri data = Uri.parse(“http://www.google.com“);
    intent.setData(data); // ** ** 打开某网页 ** **
    intent.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK); // ** ** 以新建任务方式打开 ** **
    intent.setAction(Intent.ACTION_VIEW); // ** ** 以浏览方式打开 ** **
    startActivity(intent); **

4. Intent 的源码实现

  1. Intent 解析,过滤规则对应出具体应用
    frameworks/base/core/java/android/content/IntentFilter.java

  2. Intent 定义,规定程序中的使用的 Define 与 xml 中字串的对应关系
    frameworks/base/core/java/android/content/Intent.java

5. 参考
[http://zhubin215130.javaeye.com/blog/614913

](http://zhubin215130.javaeye.com/blog/614913)