1.显示的Intent
1.1 Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
在使用显示的intent的时候,出啊如FirstActivity.this作为上下文,传入SecondActivity.class作为目标活动.
这样的话我们的意图就非常的明显了.使用这种方式的Intent意图非常的明显,我们称之为显示的Intent.
2.隐式的Intent
2.1 隐式的Intent并不明确指出我们要启动哪一个活动,而是指出一系列更为抽象的action和category等信息.
然后交由系统去分析这个Intent,找到合适的活动去启动.
2.2 通过在Androidmanifest.xml项目清单配置文件中,为一个activity配置内容.可以指定当前的activity
能够响应的action和category.
标签中指明了当前活动可以响应某个action,而标签包含了一些附加的信息,更精确的指明了当前活动
能够响应的Intent的还可能带有的category.只有和中的内容能够匹配上intent中指定的action和category时,这个活动才能够响应该intent.
例如下面代码,就是在FirstActivity中通过按钮点击事件启动另外一个Activity的例子:
btn.setOnClickListener(new onClicikListener()
public void onClick(View v)
{
case R.id.btn_start:
Intent intent = new Intent(“ACTION_START_SECONDACTIVITY”);
intent.addCategory(“com.example.MY_CATEGORY”);
startActivity(intent);
}
);
然后在配置清单文件中为activity配置intent-filter,表示当前activity可以响应怎么样的
intent.主要是要响应的intent中包含的action和category.
2.3 更多的隐式Intent
1> 拨打电话功能实现:
构建Intent
Intent intent = new Intent(“Intent.ACTION_DIAL”);
intent.setData(Uri.parse(“tel:10086”));
startActivity(intent);
首先指定了Intent的action为Intent.ACTION_DIAL,这是一个Android系统的内置动作.
然后在data部分指定了协议是tel,号码是10086.
解读上面的程序
Uri.parse()方法-> 将一个网址字符串解析成为一个Uri对象,再调用setData(Uri),将一个网址字符串解析成一个Uri对象.
什么是Uri-> 通用资源标识符(Universal Resource Identifier,简称 Uri).Uri代表要操作的数据,Android中
可用的每种资源-图像,视频片段都可以使用Uri表示.
2>使用Intent打开一个网页:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(“http://ww.baidu.com“));
startAcitivty(intent);
3.使用Intent向下一个活动传递数据
3.1 向下一个活动传递一个字符串,可以这么写:
String data = “Hello SecondActivity!”;
Intent intent = new Intent(FirstAcitvity.this,SecondActivity.class);
intent.putExtra(“extra_data”,data);
startActivity(intent);
然后在SecondActivity中将传递的数据取出,并打印出来.如下代码所示:
Intent intent = getIntent();
String data = intent.getStringExtra(“extra_data”);
Log.d(“toLook”,data);
首先是通过getIntent()方法可以获取用于启动SecondActivity的Intent,然后调用getStringExtra()方法
传入相应的键值,就可以得到相应的数据了.
4.返回数据给上一个活动
4.1 返回上一个活动,一般我们按back键就可以了,如果想要返回数据给上一个活动,就不能用startActivity(intent)的方式启动,
而应该使用startActivityForResult()方法来启动.这个方法期望活动在销毁的时候能够返回一个结果给上一个启动它的Activity.
startActivityForResult(Intent intent, Int requestCode);
第一个参数是Intent,第二个参数是requestcode,是请求码,用于在之后的回调中判断数据的来源.
启动示例:
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
然后在SecondActivity当中,添加返回数据的逻辑.
Intent intent = new Intent();
intent.putExtra(“data_return”,”HelloFirstActivity”);
setResult(RESULT_OK,intent);
finish();
setResut(int resultCode, Intent intent);这个方法是专门用于向上一个活动返回数据的.setResult()方法接收两个参数
第一个参数用于向上一个活动返回处理的结果,一般只使用RESULT_OK或RESULT_CANCELED这两个值,第二个参数则是把带
有数据的Intent传递过去,然后调用finish()方法来销毁当前的活动.
由于我们是使用startActivityForResult()方法启动的SecondActivity的,所以在SecondActivity被销毁之后会回调上一个活动
的onActivityResult()方法,因此我们需要在FirstActivity中重写这个方法来得到返回的数据,如下所示:
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
String returnedData = data.getStringExtra(“data_return”);
Log.i(“FirstActivity”,returnedData);
}
onActivityResult()方法有三个参数,第一个参数resultCode,即我们在启动活动时候的传入的请求码.第二个参数resultCode,即
我们在返回数据时传入的处理结果.第三个参数data,即携带着返回数据的intent.由于在一个活动中可能会调用startActivityForResult()方法启动很多不同的活动,每一个活动的返回数据都会回调到onActivityResult()这个方法中,因此我们
首先要做的就是通过requestCode的值来判断数据的来源.再通过resultCode的值来判断处理结果是否成功.最后从data中取值
并打印出来,这样就完成了向上一个活动返回数据的工作.