玩转Android---组件篇---Intent(意图)

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


表示具体的短信

例子一:计算器

Java代码

  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;

Java代码

  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

Java代码

  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

Java代码

  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

Java代码

  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

Java代码

  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

Java代码

  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>

运行结果如下:

当点击直接打电话后

原文:http://hualang.iteye.com/blog/983471

玩转Android---组件篇---Intent(意图)

时间: 2024-10-01 03:09:21

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

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

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3959204.html 联系方式:[email protected] [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确

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

     最近在进行android开发过程中,在将 Intent传递给调用的组件并完成组件的调用时遇到点困难,并且之前对Intent的学习也是一知半解,最近特意为此拿出一些时间,对Intent部分进行了系统的学习并进行了部分实践,下面将自己的学习及Intent知识进行了详细的归纳整理,希望能帮助到同样遇到相同问题的博友.下面是Intent介绍.详解及Intent示例总结: 一.Intent介绍: Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与

Android中的Intent(意图)的使用

概述: Intent(意图)主要是解决Android应用的各项组件之间的通讯.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦. 分类: 隐式意图 不用指定要打开的activity, 通过动作和数据的组合去查找系统中, 能处理指定动作和数据的界面,因此

Android必备:Activity 活动 和 Intent 意图 的学习整理

看这里:Android必备:Activity 活动 和 Intent 意图 的学习整理 在Android必备:Android UI控件的了解与学习中, 对Android UI做了初步的了解和学习,本篇继续进行Android开发学习的整理.Android应用通常由一个或多个基本组件组成,最常用的就是 Activity,本篇我们就来整理一下Activity活动的相关知识,以及Activity之间相互通信的Intent意图. 首先,我们来简单的介绍一下Activity 活动,如图所示(来自百度百科):

Android开发:显式/隐式Intent意图跳转Activity总结

显式跳转 在已知包名和类名的情况下常用的跳转方法: 是 nt mIntent = new Intent(); mIn Int etent.setClassName("com.android.settings","com.android.settings.Settings"); mContext.startActivity(mIntent); 我们也常这么用: y.class); startActivity(intent); 这是跳转到当前应用的某个Activity,

【Android的从零单排开发日记】之入门篇(十二)——Android组件间的数据传输

组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制数据. 一.Intent数据传递 那么首先是简单的跳转.我们可以借助bundle这个容器来存放我们想要传递的数据. Intent intent = new Intent(); intent.setClass(activity1.this, activity2.class); //描述起点和目标 Bu

Android组件的通讯——Intent

转载:Android组件的通讯-Intent 1.概述 一个应用程序的三个核心组件——activities.services.broadcast receivers,都是通过叫做intents的消息激活.Intent消息是一种同一或不同应用程序中的组件之间延迟运行时绑定的机制.intent本身(是一个Intent对象),是一个被动的数据结构保存一个将要执行的操作的抽象描述,或在广播的情况下,通常是某事已经发生且正在宣告.对于这三种组件,有独立的传送intent的机制: Activity:一个in

Android总结篇系列:Android Intent

Intent在Android中的重要性不言而喻.本文主要总结下Intent使用过程中需要注意的一些问题. 1.隐式Intent AndroidManifest.xml声明时<intent-filter>相关 作为“意图”的Intent,在AndroidManifest.xml声明时并没有独立的所谓的<intent>标签形式,而是依附于其他的应用程序组件(Activity/BroadcastReceiver/Service)存在.在显式Intent和隐式Intent类别上,显式Int

【Android应用开发技术:应用组件】Intent基本原理

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells 一个App通常都会有好几个Activity.每一个Activity的界面都扮演者用户接口的角色,允许用户执行一些特殊任务,例如查看地图或者是开始拍照等.如何让用户从一个Activity跳到另外一个Activity呢,这便是今天要介绍的Intent. Intent来定义App的