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. 大数据日志分析产品——SaaS Cloud, e.g. Papertrail, Loggly, Sumo Logic;Open Source Frameworks, e.g. ELK stack, Graylog;Enterprise Products, e.g. TIBCO LogLogic, IBM QRadar, Splunk

    Learn how you can maximize big data in the cloud with Apache Hadoop. Download this eBook now. Brough ...

  2. php判断是否是微信浏览器

    php判断是否是微信浏览器 直接上代码: <?PHP function is_wechat_browser(){ $user_agent = $_SERVER['HTTP_USER_AGENT' ...

  3. 006-完全关闭win任务栏鼠标悬停预览

    经过测试, 网上大部分的修改注册表等方法一律没有效果 最终找到一款轻量级软件完美解决问题 下载地址

  4. 基于libRTMP的流媒体直播之 AAC、H264 推送

    这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以 ...

  5. bzoj1006神奇的国度

    OrzCDQ您太强辣 #include<iostream> #include<cstdio> #include<cstdlib> #include<algor ...

  6. 2017-2018-1 20179203 《Linux内核原理与分析》第六周作业

    攥写人:李鹏举 学号:20179203 ( 原创作品转载请注明出处) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...

  7. bzoj 2460: 元素 线性基

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2460 题解: RT 线性基裸题 #include <cstdio> #inc ...

  8. Java中Calendar常用方法总结

    //获取当前时刻yyyy-MM-dd HH:mm:ss Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new S ...

  9. 资料:MVC框架+SQL Server 数据集成引擎

    ylbtech-资料:MVC框架+SQL Server 数据集成引擎 1.返回顶部 1. 功能特点: MVC框架耦合性低视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样 ...

  10. 安装mariadb并修改配置文件

    实验环境:CentOS7 #安装mariadb-server包#修改mariadb配置文件/etc/my.cnf.d/server.cnf#添加 skip_name_resolve=ON #不执行将I ...