Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”。

目标组件一般要通过Intent来声明自己的条件,一般通过组件中的<intent-filter>元素来过滤。

Intent在由以下几个部分组成:动作(action),数据(data),分类(Category),类型(Type),组件(Component),和扩展信息(Extra)。

Intent在寻找目标组件的时候有两种方法:第一,通过组件名称直接指定;第二,通过Intent Filter过滤指定

Intent启动不同组件的方法

组件名称

方法名称

Activity

startActivity()

startActivityForResult()

Service

startService()

bindService()

Broadcasts

sendBroadcast()

sendOrderedBroadcast()

sendStickyBroadcast()

常见的Activity Action Intent常量

常量名称

常量值

意义

ACTION_MAIN

android.intent.action.MAIN

应用程序入口

ACTION_VIEW

android.intent.action.VIEW

显示数据给用户

ACTION_ATTACH_DATA

android.intent.action.ATTACH_DATA

指明附加信息给其他地方的一些数据

ACTION_EDIT

android.intent.action.EDIT

显示可编辑的数据

ACTION_PICK

android.intent.action.PICK

选择数据

ACTION_CHOOSER

android.intent.action.CHOOSER

显示一个Activity选择器

ACTION_GET_CONTENT

android.intent.action.GET_CONTENT

获得内容

ACTION_DIAL

android.intent.action.GET_CONTENT

显示打电话面板

ACITON_CALL

android.intent.action.DIAL

直接打电话

ACTION_SEND

android.intent.action.SEND

直接发短信

ACTION_SENDTO

android.intent.action.SENDTO

选择发短信

ACTION_ANSWER

android.intent.action.ANSWER

应答电话

ACTION_INSERT

android.intent.action.INSERT

插入数据

ACTION_DELETE

android.intent.action.DELETE

删除数据

ACTION_RUN

android.intent.action.RUN

运行数据

ACTION_SYNC

android.intent.action.SYNC

同步数据

ACTION_PICK_ACTIVITY

android.intent.action.PICK_ACTIVITY

选择Activity

ACTION_SEARCH

android.intent.action.SEARCH

搜索

ACTION_WEB_SEARCH

android.intent.action.WEB_SEARCH

Web搜索

ACTION_FACTORY_TEST

android.intent.action.FACTORY_TEST

工厂测试入口点

常见的BroadcastIntent Action常量

BroadcastIntent Action字符串常量

描述

ACTION_TIME_TICK

系统时间每过一分钟发出的广播

ACTION_TIME_CHANGED

系统时间通过设置发生了变化

ACTION_TIMEZONE_CHANGED

时区改变

ACTION_BOOT_COMPLETED

系统启动完毕

ACTION_PACKAGE_ADDED

新的应用程序apk包安装完毕

ACTION_PACKAGE_CHANGED

现有应用程序apk包改变

ACTION_PACKAGE_REMOVED

现有应用程序apk包被删除

ACTION_UID_REMOVED

用户id被删除

Intent的Action和Data属性匹配

Action属性

Data属性

说明

ACTION_VIEW

content://contacts/people/1

显示id为1的联系人信息

ACTION_DIAL

content://contacts/people/1

将id为1的联系人电话号码显示在拨号界面中

ACITON_VIEW

tel:123

显示电话为123的联系人信息

ACTION_VIEW

http://www.google.com

在浏览器中浏览该网站

ACTION_VIEW

file://sdcard/mymusic.mp3

播放MP3

ACTION_VIEW

geo:39.2456,116.3523

显示地图

常见的Category常量

Category字符串常量

描述

CATEGORY_BROWSABLE

目标Activity能通过在网页浏览器中点击链接而激活(比如,点击浏览器中的图片链接)

CATEGORY_GADGET

表示目标Activity可以被内嵌到其他Activity当中

CATEGORY_HOME

目标Activity是HOME Activity,即手机开机启动后显示的Activity,或按下HOME键后显示的Activity

CATEGORY_LAUNCHER

表示目标Activity是应用程序中最优先被执行的Activity

CATEGORY_PREFERENCE

表示目标Activity是一个偏爱设置的Activity

常见的Extra常量

Extra键值字符串常量

描述

EXTRA_BCC

装有邮件密送地址的字符串数组

EXTRA_CC

装有邮件抄送地址的字符串数组

EXTRA_EMAIL

装有邮件发送地址的字符串数组

EXTRA_INTENT

使用ACTION_PICK_ACTIVITY动作时装有Intent选项的键

EXTRA_KEY_EVENT

触发该Intent的案件的KeyEvent对象

EXTRA_PHONE_NUMBER

使用拨打电话相关的Action时,电话号码字符串的键,类型为String

EXTRA_SHORTCUT_ICON

使用ACTION_CREATE_SHORTCUT在HomeActivity创建快捷方式时,对快捷方式的描述信息。其中ICON和ICON_RESOURCE描述的是快捷方式的图标,类型分别为Bitmap和ShortcutIconResource。INTENT描述的是快捷方式相对应的Intent对象。NAME描述的是快捷方式的名字。

EXTRA_SHORTCUT_ICON_RESOURCE

EXTRA_SHORTCUT_INTENT

EXTRA_SHORTCUT_NAME

EXTRA_SUBJECT

描述信息主题的键

EXTRA_TEXT

使用ACTION_SEND动作时,用来描述要发送的文本信息,类型为CharSequence

EXTRA_TITLE

使用ACTION_CHOOSER动作时,描述对话框标题的键,类型为CharSequence

EXTRA_UID

使用ACTION_UID_REMOVED动作时,描述删除的用户id的键,类型为int

Android.telephony包中的类

类名

描述

CellLocation

表示设备位置的抽象类

PhoneNumberFormattingTextWather

监视一个TextView控件,如果有电话号码输入,则用formatNumber()方法处理电话号码

PhoneNumberUtils

包含各种处理电话号码字符串的使用工具

PhoneStateListener

监视手机中电话状态变化的监听类

ServiceState

包含电话状态和相关的服务信息

TelephonyManager

提供对手机中电话服务信息的访问

与短信服务相关的类主要在包android.telephony.gsm中

类名

描述

GsmCellLocation

表示GSM手机的基站位置

SmsManager

管理各种短信操作

SmsMessage

表示具体的短信

例子一:计算器

  1. package org.loulijun.calculate;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.Menu;
  6. import android.view.MenuItem;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.Button;
  10. import android.widget.EditText;
  11. import android.widget.TextView;
  12. import android.widget.Toast;
  13. public class Calculater extends Activity {
  14. /** Called when the activity is first created. */
  15. private EditText numberone;
  16. private EditText numbertwo;
  17. private Button mybutton;
  18. private TextView symbol;
  19. @Override
  20. public void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. numberone=(EditText)findViewById(R.id.numberone);
  24. numbertwo=(EditText)findViewById(R.id.numbertwo);
  25. mybutton=(Button)findViewById(R.id.mybutton);
  26. symbol=(TextView)findViewById(R.id.symbol);
  27. mybutton.setOnClickListener(new Calculate());
  28. }
  29. @Override
  30. public boolean onCreateOptionsMenu(Menu menu) {
  31. // TODO Auto-generated method stub
  32. menu.add(0, 1, 1, R.string.exit);
  33. menu.add(0,2,2,R.string.about);
  34. return super.onCreateOptionsMenu(menu);
  35. }
  36. @Override
  37. public boolean onOptionsItemSelected(MenuItem item) {
  38. // TODO Auto-generated method stub
  39. if(item.getItemId()==1)
  40. {
  41. finish();
  42. }
  43. else if(item.getItemId()==2)
  44. {
  45. Toast.makeText(this, "亲爱的你可知,我有多么思念你!", Toast.LENGTH_SHORT).show();
  46. }
  47. return super.onOptionsItemSelected(item);
  48. }
  49. class Calculate implements OnClickListener
  50. {
  51. @Override
  52. public void onClick(View v) {
  53. // TODO Auto-generated method stub
  54. String number1=numberone.getText().toString();
  55. String number2=numbertwo.getText().toString();
  56. Intent intent=new Intent();
  57. intent.putExtra("num1",number1);
  58. intent.putExtra("num2", number2);
  59. intent.setClass(Calculater.this,Result.class);
  60. Calculater.this.startActivity(intent);
  61. }
  62. }
  63. }

package org.loulijun.calculate;

  1. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.widget.TextView;
  5. public class Result extends Activity {
  6. private TextView textview;
  7. public void onCreate(Bundle savedInstanceState)
  8. {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.result);
  11. textview=(TextView)findViewById(R.id.textview);
  12. Intent intent=getIntent();
  13. String numberone=intent.getStringExtra("num1");
  14. String numbertwo=intent.getStringExtra("num2");
  15. Double d1=Double.parseDouble(numberone);
  16. Double d2=Double.parseDouble(numbertwo);
  17. Double result=d1/d2;
  18. textview.setText(numberone+" / "+numbertwo+" = "+result);
  19. }
  20. }

main.xml

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:orientation="vertical"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. >
  6. <EditText
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:id="@+id/numberone"
  10. android:hint="请输入数字"
  11. />
  12. <TextView
  13. android:layout_width="fill_parent"
  14. android:layout_height="wrap_content"
  15. android:id="@+id/symbol"
  16. android:text="@string/symbol"
  17. />
  18. <EditText
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. android:id="@+id/numbertwo"
  22. android:hint="请输入数字"
  23. />
  24. <Button
  25. android:layout_width="fill_parent"
  26. android:layout_height="wrap_content"
  27. android:id="@+id/mybutton"
  28. android:text="@string/calculate"
  29. />
  30. </LinearLayout>

result.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="wrap_content"
  5. android:layout_height="wrap_content">
  6. <TextView
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:id="@+id/textview"
  10. />
  11. </LinearLayout>

注意:result.java需要注册到AndroidManifest.xml文件中

<activity android:name=".Result" android:label="@string/result">

</activity>

运行结果如下:

例子二:调用系统内置action

  1. package org.hualang.intent;
  2. import android.app.ListActivity;
  3. import android.content.Intent;
  4. import android.net.Uri;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.ArrayAdapter;
  8. import android.widget.ListView;
  9. public class IntentTest extends ListActivity {
  10. @Override
  11. public void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. // 菜单项数组
  14. String[] menus = { "查看电话信息", "编辑电话信息", "显示拨打电话界面","直接打电话","访问浏览器","访问地图"};
  15. // 将菜单项数组设置为ListView的列表项展示
  16. setListAdapter(new ArrayAdapter<String>(this,
  17. android.R.layout.simple_list_item_1, menus));
  18. getListView().setTextFilterEnabled(true);
  19. }
  20. @Override
  21. protected void onListItemClick(ListView l, View v, int position, long id) {
  22. Intent intent = new Intent();
  23. Uri uri ;
  24. String data;
  25. switch (position) {
  26. // 查看_id 为1的用户电话信息
  27. case 0:
  28. data = "content://contacts/people/1";
  29. uri = Uri.parse(data);
  30. intent.setAction(Intent.ACTION_VIEW);
  31. intent.setData(uri);
  32. startActivity(intent);
  33. break;
  34. // 编辑_id 为1的用户电话信息
  35. case 1:
  36. data = "content://contacts/people/1";
  37. uri = Uri.parse(data);
  38. intent.setAction(Intent.ACTION_EDIT);
  39. intent.setData(uri);
  40. startActivity(intent);
  41. break;
  42. // 显示拨打电话界面
  43. case 2:
  44. data = "tel:13800138000";
  45. uri = Uri.parse(data);
  46. intent.setAction(Intent.ACTION_DIAL);
  47. intent.setData(uri);
  48. startActivity(intent);
  49. break;
  50. // 直接打电话
  51. case 3:
  52. data = "tel:13800138000";
  53. uri = Uri.parse(data);
  54. intent.setAction(Intent.ACTION_CALL);
  55. intent.setData(uri);
  56. startActivity(intent);
  57. break;
  58. // 访问浏览器
  59. case 4:
  60. data = "http://www.google.com";
  61. uri = Uri.parse(data);
  62. intent.setAction(Intent.ACTION_VIEW);
  63. intent.setData(uri);
  64. startActivity(intent);
  65. break;
  66. // 访问地图
  67. case 5:
  68. data = "geo:39.92,116.46";
  69. uri = Uri.parse(data);
  70. intent = new Intent(Intent.ACTION_VIEW,uri);
  71. startActivity(intent);
  72. break;
  73. default:
  74. break;
  75. }
  76. }
  77. }

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="@string/hello"
  11. />
  12. </LinearLayout>

AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="org.hualang.intent"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/icon" android:label="@string/app_name">
  7. <activity android:name=".IntentTest"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. </application>
  15. <uses-sdk android:minSdkVersion="8" />
  16. <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
  17. </manifest>

运行结果如下:

当点击直接打电话后

玩转Android---组件篇---Intent(意图)的更多相关文章

  1. Xamarin Android组件篇教程RecylerView动画组件RecylerViewAnimators(1)

    Xamarin Android组件篇教程RecylerView动画组件RecylerViewAnimators(1) RecyclerView是比ListView和GridView更为强大的布局视图, ...

  2. Android总结篇——Intent机制详解及示例总结

         最近在进行android开发过程中,在将 Intent传递给调用的组件并完成组件的调用时遇到点困难,并且之前对Intent的学习也是一知半解,最近特意为此拿出一些时间,对Intent部分进行 ...

  3. Android组件系列----Intent详解(转载笔记)

    [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用 ...

  4. Android组件系列----Intent详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  5. Android总结篇系列:Android Intent

    Intent在Android中的重要性不言而喻.本文主要总结下Intent使用过程中需要注意的一些问题. 1.隐式Intent AndroidManifest.xml声明时<intent-fil ...

  6. Android组件的通讯——Intent

    转载:Android组件的通讯-Intent 1.概述 一个应用程序的三个核心组件——activities.services.broadcast receivers,都是通过叫做intents的消息激 ...

  7. android学习日记20--连接组件之Intent和IntentFilter

    上次刚了解完Android的四大组件,现在学习组件间通信的Intent和IntentFilter 一.Intent 1.简述 Intent(意图)在应用程序运行时连接两个不同组件,是一种运行时的绑定机 ...

  8. android小知识之意图(intent)

    android中的意图有显示意图和隐式意图两种, 显示意图要求必须知道被激活组件的包和class 隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件 A 主activity  B ...

  9. Android开发工程师文集-提示框,菜单,数据存储,组件篇

    提示框,菜单,数据存储,组件篇 Toast Toast.makeText(context, text, 时间).show(); setDuration();//设置时间 setGravity();// ...

随机推荐

  1. 问题杂烩(scrollTop/背景透明度动画)

    今天给同学找我帮忙写js,是公司里的活..我是不是应该跟他要钱哈哈,不过一顿饭肯定是免不了的了. 言归正传,今天写了三个小东西,因为兼容性的问题,用jq写的(很是别扭的说,但是没办法啊,一边看api一 ...

  2. 使用CSS3制作酷炫防苹果复选框 自行测试!

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. python-多线程(一)

    一.Python中的线程使用: Python中使用线程有两种方式:函数或者用类来包装线程对象. 1.  函数式:调用thread模块中的start_new_thread()函数来产生新线程.如下例: ...

  4. leetcode 34 Search for a Range(二分法)

    Search for a Range Given a sorted array of integers, find the starting and ending position of a give ...

  5. 08 - Django应用第五步

    1 自动测试 自动测试与测试的不同在于, 自动测试的测试工作是交给系统完成的 测试也有分类和级别, 有的用于一些细微的细节, 有的是针对整个软件整体 测试会保证一些看起来正常运行的功能在实际的多种情况 ...

  6. Android多点触控技术

    1 简介 Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC.Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouc ...

  7. Oracle 12c 多租户配置和修改 CDB 和 PDB 参数

    1. 配置CDB 实例参数,影响CDB与所有 PDB为CDB配置例程参数相对于对于非CDB的数据库是变化不太.ALTER SYSTEM命令用于设置初始化参数,与使用ALTER DATABASE命令修改 ...

  8. spring IOC 注解@Autowired

    自动装配:按照类型来找 会在xml中找类型一样的, 比如 setMessage(SetName setName)上面有@Autowired,会到xml中找<bean id="setna ...

  9. 转载:PLSQL Developer使用技巧整理

    Shortcut(快捷方式): Edit/Undo     Ctrl+Z Edit/Redo     Shift+Ctrl+Z Edit/PL/SQL Beautifier  Ctrl+W   (自定 ...

  10. css菜鸟之HTML 中块级元素设置 height:100% 的实现

    HTML 中块级元素设置 height:100% 的实现 当你设置一个页面元素的高度(height)为100%时,期望这样元素能撑满整个浏览器窗口的高度,但大多数情况下,这样的做法没有任何效果. 为什 ...