一.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常量的例子:

main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     >     <TextView            android:layout_width="fill_parent"           android:layout_height="wrap_content"           android:text="@string/hello"         />     <Button           android:text="测试Action属性"         android:id="@+id/getBtn"         android:layout_width="wrap_content"           android:layout_height="wrap_content"           /> </LinearLayout> 

strings.xml

<?xml version="1.0" encoding="utf-8"?> <resources>     <string name="hello">测试Action属性</string>     <string name="app_name">IntentActionDemo</string> </resources> 

MainActivity.java

public class MainActivity extends Activity {      private Button getBtn;      @Override     public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);                    getBtn=(Button)findViewById(R.id.getBtn);          getBtn.setOnClickListener(new OnClickListener() {              @Override             public void onClick(View v) {                     Intent intent = new Intent();                                 intent.setAction(Intent.ACTION_GET_CONTENT);// 设置Intent Action属性                                  intent.setType("vnd.android.cursor.item/phone");// 设置Intent Type 属性                                                                   //主要是获取通讯录的内容                  startActivity(intent); // 启动Activity              }          });              }  } 

效果图:

2.Intent的Data属性

Intent的Data属性是执行动作的URI和MIME类型,不同的Action有不同的Data数据指定。比如:ACTION_EDIT Action应该和要编辑的文档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界面的例子:

main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical" android:layout_width="fill_parent"     android:layout_height="fill_parent"     >         <TextView       android:layout_width="fill_parent"     android:layout_height="wrap_content"       android:text="测试Intent Category"       />     <Button       android:id="@+id/Button1"       android:layout_width="wrap_content"     android:layout_height="wrap_content"       android:text="转到Home界面"     />    </LinearLayout> 

strings.xml

<?xml version="1.0" encoding="utf-8"?> <resources>     <string name="hello">Hello World, MainActivity!</string>     <string name="app_name">IntentCategoryDemo</string> </resources> 

MainActivity.java

package com.android.category.activity;   import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;   public class MainActivity extends Activity {      private Button btn;      @Override     public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);                    btn = (Button)findViewById(R.id.Button1);          btn.setOnClickListener(new OnClickListener() {              @Override             public void onClick(View v) {                     Intent intent = new Intent();                                 intent.setAction(Intent.ACTION_MAIN);// 添加Action属性                                intent.addCategory(Intent.CATEGORY_HOME);// 添加Category属性                              startActivity(intent);// 启动Activity              }          });      }  } 

效果图:

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中显示用户名。

first.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"       android:layout_width="fill_parent"     android:layout_height="fill_parent"     >         <TextView             android:layout_width="wrap_content"         android:layout_height="wrap_content"           android:text="请输入用户名"           />            <EditText           android:id="@+id/EditText1"           android:layout_width="fill_parent"         android:layout_height="wrap_content"         />            <Button           android:id="@+id/Button1"           android:layout_width="wrap_content"         android:layout_height="wrap_content"           android:text="测试Extras属性"         />        </LinearLayout> 

second.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"       android:layout_width="fill_parent"     android:layout_height="fill_parent"     >             <TextView           android:id="@+id/TextView1"           android:layout_width="wrap_content"           android:layout_height="wrap_content"         /> </LinearLayout> 

strings.xml

<?xml version="1.0" encoding="utf-8"?> <resources>     <string name="hello">Hello World, FirstActivity!</string>     <string name="app_name">IntentExtrasDemo</string> </resources> 

FirstActivity.java

public class FirstActivity extends Activity {      private Button btn;      private EditText etx;            @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.first);                    btn = (Button)findViewById(R.id.Button1);          etx = (EditText)findViewById(R.id.EditText1);                    btn.setOnClickListener(new OnClickListener() {              @Override              public void onClick(View v) {                  Intent intent = new Intent();                  //设置Intent的class属性,跳转到SecondActivity                  intent.setClass(FirstActivity.this, SecondActivity.class);                  //为intent添加额外的信息                  intent.putExtra("useName", etx.getText().toString());                  //启动Activity                  startActivity(intent);              }          });             }  } 

SecondActivity.java

public class SecondActivity extends Activity {      private TextView tv;            @Override     public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          //设置当前的Activity的界面布局          setContentView(R.layout.second);          //获得Intent          Intent intent = this.getIntent();                 tv = (TextView)findViewById(R.id.TextView1);          //从Intent获得额外信息,设置为TextView的文本          tv.setText(intent.getStringExtra("useName"));      }  } 

注意:在添加第二个Activity SecondActivity的时候,要在AndroidManifest.xml里面添加上SecondActivity,具体如下,即是在15行</activity>的后面添加上16~18行的代码。如果不这样做,就会在模拟器上出现错误。

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"       package="com.android.extras.activity"       android:versionCode="1"       android:versionName="1.0">     <uses-sdk android:minSdkVersion="10" />      <application android:icon="@drawable/icon" android:label="@string/app_name">         <activity android:name=".FirstActivity"                   android:label="@string/app_name">             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>         <activity android:name=".SecondActivity"                   android:label="@string/app_name">         </activity>     </application> </manifest> 

效果图:

更多相关文章

  1. [Android1.6]横竖屏切换时自动弹出键盘的问题
  2. Android常用UI组件 - Button
  3. Android使用selector修改TextView中字体颜色和背景色的方法
  4. Android(安卓)Intent的简介以及属性的详解
  5. Android(安卓)组件宽度高度自适应
  6. Android中Fragmen首选项使用自定义的ListPreference的方法
  7. 浅析Java 对象初始化
  8. 【Android开发】基本组件-列表选择框
  9. android 4大组件介绍

随机推荐

  1. RecycleView滚动条添加
  2. Android 获取标题栏的高度
  3. RotateAnimation 设置旋转中心点、不停顿
  4. Android:为控件绑定监听器
  5. 申请Android Maps API Key-及出现的错误
  6. 什么是aidl?Android(安卓)AIDL详解
  7. Android Ams浅析
  8. Android 实现直接拒接来电
  9. Android:控件布局(相对布局)RelativeLayout
  10. android ICS4.0.3 改变默认字体大小