一个Android程序有多个组件组成,各个组件之间使用Intent进行通信。
Intent对象中包含组件名称、动作、数据等内容。
Activity、Service、Broadcast Receiver这三种核心组件都需要使用Intent来进行激活。Intent用于相同或者不同应用程序组件间的后期运行时绑定。
在Intent类中,定义了一系列动作常量,其目标组件包括Activity和Broadcast两类。
(1) 组件名称
组件名称是指Intent目标组件的名称。它是一个ComponentName对象,由目标组件的完全限定类名(如:com.mingrisoft.TestActivity)和组件所在应用程序配置文件中设置的包名(com.mingrisoft)组合而成。
组件名称可以使用setComponent()、setClas()、setClassName()方法设置,使用getComponent()方法读取。
(2) 动作有两大类——Activity、Broadcast0
启动Activity的标准动作(Context.startActivity())最常用的是ACTION_MAIN和ACTION_EDIT
动作(action)--Broadcast
(3) Activity间使用Intent传递信息
FirstActivity.java
public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.firstactivity_layout);// 设置页面布局 Button ok = (Button) findViewById(R.id.ok);// 通过ID值获得按钮对象 ok.setOnClickListener(new View.OnClickListener() {// 为按钮增加单击事件监听器 @Override public void onClick(View v) { EditText username = (EditText) findViewById(R.id.username);// 获得输入用户名的控件 EditText password = (EditText) findViewById(R.id.password);// 获得输入密码的控件 Intent intent = new Intent();// 创建Intent对象 intent.putExtra("com.mingrisoft.USERNAME", username.getText().toString());// 封装用户名信息 intent.putExtra("com.mingrisoft.PASSWORD", password.getText().toString());// 封装密码信息 intent.setClass(FirstActivity.this, SecondActivity.class);// 指定传递对象 startActivity(intent);// 将Intent传递给Activity } }); } }
SecondActivity.java
public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.secondactivity_layout);// 设置页面布局 Intent intent = getIntent();// 获得Intent String username = intent.getStringExtra("com.mingrisoft.USERNAME");// 获得用户输入的用户名 String password = intent.getStringExtra("com.mingrisoft.PASSWORD");// 获得用户输入的密码 TextView usernameTV = (TextView) findViewById(R.id.usr);// 获得第二个Activity的文本框控件 TextView passwordTV = (TextView) findViewById(R.id.pwd);// 获得第二个Activity的文本框控件 usernameTV.setText("用户名:" + username);// 设置文本框内容 passwordTV.setText("密 码:" + password);// 设置文本框内容 } }Intent分类:
Intent可以分为显示与隐式两类。
显示Intent通过组件名称来指定目标组件。由于其他应用程序的组件名称对于开发人员通常是未知的,显示Intent通常用于应用程序内部消息,例如Activity启动子Service或其他Activity。
隐式Intent不指定组件名称,通常用于激活其他应用程序中的组件。
Intent过滤器
使用Intent过滤器测试Intent对象时,对象中仅有3个方面与其相关:
动作、数据(包括URI和数据类型)、种类
Intent过滤器特点:
过滤器接受需要类型的Intent、拒绝不需要类型的Intent仅限于隐式Intent。对于显示Intent无论内容如何,总可以发行给器目标,过滤器并不干预。
Intent过滤器是IntentFilter类的实例。通常在应用程序的配置文件(AndroidManifest.xml)中配置。
Intent总结
Intent对象用于实现不同组件之间的连接。一个Intent对象包含组件名称、数据、动作、种类、额外和标记等内容。