Intent的简介以及属性的详解

一. Intent的介绍

         Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。

二. Inten启动组件的方法

Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。具体方法如下:

 

组件名称

方法名称

 

Activity

startActvity( )

startActivity( )

 

Service

startService( )

bindService( )

 

Broadcasts

sendBroadcasts( )

sendOrderedBroadcasts( )

sendStickyBroadcasts( )

三. Intent的属性

Intent有以下几个属性:

        动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中最常用的是Action属性和Data属性。

1.Intent的Action属性

 Action是指Intent要完成的动作,是一个字符串常量。SDK中定义了一些标准的Action常量如下表所示。

 

Constant

Target component

Action

ACTION_CALL

activity

Initiate a phone call.

ACTION_EDIT

activity

Display data for the user to edit.

ACTION_MAIN

activity

Start up as the initial activity of a task, with no data input and no returned output.

ACTION_SYNC

activity

Synchronize data on a server with data on the mobile device.

ACTION_BATTERY_LOW

broadcast receiver

A warning that the battery is low.

ACTION_HEADSET_PLUG

broadcast receiver

A headset has been plugged into the device, or unplugged from it.

ACTION_SCREEN_ON

broadcast receiver

The screen has been turned on.

ACTION_TIMEZONE_CHANGED

broadcast receiver

The setting for the time zone has changed.

 下面是一个测试Action常量的例子:

MainActivity.java

  1.         getBtn=(Button)findViewById(R.id.getBtn);  
  2.         getBtn.setOnClickListener(new OnClickListener() {  
  3.             @Override 
  4.             public void onClick(View v) {     
  5.                 Intent intent = new Intent();   //隐式意图,没有明确指定启动的组件              
  6.                 intent.setAction(Intent.ACTION_GET_CONTENT);// 设置Intent Action属性
  7.                 intent.setType("vnd.android.cursor.item/phone");// 设置Intent Type 属性   
  8.                 //主要是获取通讯录的内容  
  9.                 startActivity(intent); // 启动Activity  
  10.             }  
  11.         });          

效果图:

 

2.Intent的Data属性

         Intent的Data属性是执行动作的URI和MIME类型,不同的Action有不同的Data数据指定。比如:ACTION_EDITAction应该和要编辑的文档URI Data匹配,ACTION_VIEW应用应该和要显示的URI匹配。

 

3.Intent的Category属性

         Intent中的Category属性是一个执行动作Action的附加信息。比如:CATEGORY_HOME则表示放回到Home界面,ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个。下表是SDK文档中关于Category的信息。

Constant

Meaning

CATEGORY_BROWSABLE

The target activity can be safely invoked by the browser to display data referenced by a link — for example, an image or an e-mail message.

CATEGORY_GADGET

The activity can be embedded inside of another activity that hosts gadgets.

CATEGORY_HOME

The activity displays the home screen, the first screen the user sees when the device is turned on or when the HOME key is pressed.

CATEGORY_LAUNCHER

The activity can be the initial activity of a task and is listed in the top-level application launcher.

CATEGORY_PREFERENCE

The target activity is a preference panel.

 下面是一个回到Home界面的例子:

MainActivity.java

  1.         btn = (Button)findViewById(R.id.Button1);  
  2.         btn.setOnClickListener(new OnClickListener() {  
  3.             @Override 
  4.             public void onClick(View v) {     
  5.                 Intent intent = new Intent();   //隐式意图              
  6.                 intent.setAction(Intent.ACTION_MAIN);// 添加Action属性                
  7.                 intent.addCategory(Intent.CATEGORY_HOME);// 添加Category属性              
  8.                 startActivity(intent);// 启动Activity  
  9.             }  
  10.         });  

 效果图:

 

4.Intent的Type属性

         Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。

 

5.Intent的Compent属性

         Intent的Compent属性指定Intent的的目标组件的类名称。通常Android会根据Intent中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果component这个属性有指定的话,将直接使用它指定的组件,而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。

 

6.Intent的Extra属性

         Intent的Extra属性是添加一些组件的附加信息。比如,如果我们要通过一个Activity来发送一个Email,就可以通过Extra属性来添加subject和body。

 下面的例子在第一个Activity的EditText输入用户名,该年龄保存在Intent的Extras属性中。当单击Button时,会在第二个Activity中显示用户名。

FirstActivity.java 

  1.         btn = (Button)findViewById(R.id.Button1);  
  2.         etx = (EditText)findViewById(R.id.EditText1);  
  3.           
  4.         btn.setOnClickListener(new OnClickListener() {  
  5.             @Override  
  6.             public void onClick(View v) {  
  7.                 Intent intent = new Intent();  
  8.                 //设置Intent的class属性,跳转到SecondActivity  
  9.                 intent.setClass(FirstActivity.this, SecondActivity.class);  
  10.                 //为intent添加额外的信息  
  11.                 intent.putExtra("useName", etx.getText().toString());  
  12.                 //启动Activity  
  13.                 startActivity(intent);  
  14.             }  
  15.         });         

 

SecondActivity.java

  1.         //获得Intent  
  2.         Intent intent = this.getIntent();         
  3.         tv = (TextView)findViewById(R.id.TextView1);  
  4.         //从Intent获得额外信息,设置为TextView的文本  
  5.         tv.setText(intent.getStringExtra("useName"));  

 

效果图:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值