1.题记
Intent提供了一种通用的消息系统,它允许在你的应用程序与其他的应用程序间传递Intent来执行动作和产生事件。通过使用Intent可以激活Android应用的三个核心组件:活动、服务、广播接收器。
2.Intent的划分与匹配
Intent可以划分成显示意图和隐式意图。
显示意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显示意图,显示意图明确指定了Intent应该传递给哪个组件。
隐式意图:没有明确指定组件名的Intent为隐式意图。Android系统会根据隐式意图中设置的动作、类别、数据找到最合适的组件来处理这个意图。隐式意图定义如下:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:mimeType="vnd.android.cursor.item/phone" />
</intent-filter>
关于隐式意图Android系统会根据Intent Filter(意图过滤器)来匹配隐式Intent。下面是讲解如何进行意图匹配的。
动作匹配:
一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:
- 如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。
- 另一方面,只要过滤器包含只是一个动作,一个没有指定动作的意图对象自动通过这个测试。
类别匹配:
对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举其他的类别,但它不能遗漏在这个意图中的任何类别。
数据匹配:
当一个意图对象中的URL被用类和一个过滤器中的URI比较时,比较的是URI的各个组成部分。
3.Intent数据传输
下面通过在不同Activity之间的数据传输的例子,讲述Intent的两种不通数据传输方式。
3.1Intent putExtra 方法
Intent的putExtra方法几乎包括了所有的基本类型,如下图:
第一个参数 name:表示携带的数据的名称
第二个参数 value:表示数据的值。
3.2Bundle传递数据
Bundle类似map对象,Bundle提供了常用类型的装填数据方法和获取方法 ,如图:
具体实例如下源码所示:
package com.sulang.android.intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button nextButton =(Button) findViewById(R.id.next);
nextButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//激活OtherActivity
Intent intent=new Intent(MainActivity.this,OtherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "Wilian");
bundle.putInt("age", 22);
//附带上额外的数据
intent.putExtras(bundle);
//如果需要打开的Activity向前面Activity返回数据,就必须使用此方法打开Activity
startActivityForResult(intent, 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//用来提示显示返回的信息
if(requestCode==1)
{
String helloStr=data.getStringExtra("hello");
TextView hello =(TextView) this.findViewById(R.id.hello);
hello.setText(helloStr);
}
super.onActivityResult(requestCode, resultCode, data);
}
}
package com.sulang.android.intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/*
*@author 七里香的悔恨,2011-3-17
*OtherActivity.java
*Blog:[url]http://bigboy.iteye.com/[/url]
*/
public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
//得到激活该组件的意图
Intent intent=this.getIntent();
Bundle bundle=intent.getExtras();
final String name=bundle.getString("name");
int age=bundle.getInt("age");
TextView view = (TextView)this.findViewById(R.id.show);
view.setText("名称:"+name+" 年龄:"+age);
Button backButton = (Button)this.findViewById(R.id.back);
backButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent data=new Intent();
data.putExtra("hello", "hello "+name);
//设置返回码和数据,返回码可以任意
OtherActivity.this.setResult(1, data);
//关闭Activity
OtherActivity.this.finish();
}});
}
}
至此Intent已简单介绍完毕。
源代码如下:
- 大小: 106.7 KB
- 大小: 100.1 KB
- 大小: 91.4 KB
分享到:
相关推荐
Xamarin.Android之Intent传递对象简单实例,实现的是IParcelable接口
Android之Intent通过startActivityForResult方法启动新Activity
通过Intent进行简单的页面传值,页面逻辑是由A页面传值跳转到B页面,B页面对接收的值进行处理,然后B页面将值回传给A页面.博客地址:http://blog.csdn.net/pfe_nova/article/details/38600751
android activityIntent 传值 传对象
本文实例讲述了Android之Intent附加数据的两种实现方法。分享给大家供大家参考。具体如下: 第一种写法,用于批量添加数据到Intent: Intent intent = new Intent(); Bundle bundle = new Bundle(); //该类用作携带...
主要为大家详细介绍了Android利用Intent启动和关闭Activity的相关操作,感兴趣的小伙伴们可以参考一下
通过一个实验,讲解Android的使用方法,总结详细
安卓 intent 和activity生命周期学习资料,非常浅显易懂,值得参考
Android+Intent机制实例详解 Android+Intent 大家不得不看啊!
android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码
android 利用intent调用activity 简明精炼的例子 传递数据,并且有返回值
Android使用Intent实现Camera功能
Android使用Intent实现Video功能
Android7.0 Intent打开文件管理器 获取文件真实路径。虽然网上很多demo,但是没有一个能够兼容所有Android机的,去网上学习了然后自己亲测过手机分别有Android7.0/6.0/4.3个版本。
在sendBroadcast,startActivity时,我们会用到Intent。 Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能...
个人整理的Android Intent的使用介绍 Android 组件之间的信使Intent Android 中的数据存取和ContentProvider
Android+Intent机制实例详解.rar,详细的介绍了,android中的intent知识,可以下载下来看看哟
恢复已经停止的更新下载。 'android.server.checkin.FOTA_RESTART' 通过 OTA 下载并安装操作系统更新。 'android.server.checkin.FOTA_UPDATE' 用户按下了'Media Button'。...'android.intent.action.PACKAGE_ADDED'
Android应用源码之Intent_Intent