1.隐试Intent
通过<activity/>的标签下配置<intent-filter>的内容,可以指定当前activity能够响应的action和category
在AndroidManifest.xml中配置
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="android.intent.action.ANSWER"></action> <category android:name="android.intent.category.DEFAULT"></category> </intent-filter> </activity>
<action>标签指明可以响应的action
<category>标签则包含了一些附加消息
PS:只有<action> <category>中的内容同时能够匹配上Intent中的action和category,这个活动才能响应Intent
<category android:name="android.intent.category.DEFAULT"></category>这个是默认的! 在类中的声明
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //简便的写法 //Intent intent = new Intent("android.intent.category.DEFAUL"); Intent intent = new Intent(); intent.setAction("android.intent.category.DEFAULT"); startActivity(intent); } }) ;2.Intent的更多用法
putExtra:将数据以key:value的形式放入一个Parcelable对象中,直接由Intent对象携带,适合少量数据。
setData:将数据以数据流的方式传输,Intent接收后再单独接收Data部分,适合数据量较大的数据传输,如文件或图片等。
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent); } }); }在AndroidMainifest.xml中声明
<activity android:name=".SecondActivity"> <intent-filter> <data android:scheme="http"></data> <action android:name="android.intent.action.view"></action> <category android:name="android.intent.category.DEFAULT"></category> </intent-filter> </activity>点击按钮可以跳转到百度这一个界面
我们还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确地指定当前活动能够响应什么类型的数据。<data>标签中主要可以配置以下内容。
1. android:scheme
用于指定数据的协议部分,如上例中的http部分。
2. android:host
用于指定数据的主机名部分,如上例中的www.baidu.com部分。
3. android:port
用于指定数据的端口部分,一般紧随在主机名之后。
4. android:path
用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
5. android:mimeType
用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
3.返回数据给上一个活动
Mainactivity中的
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, 1);//1是请求吗 } });这里使用的是MainaActivity启动SecondActivity的,在SecondActivity被销毁之后会回调上一个activity的onActivityResult()方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) { //,第一个参数requestCode,即我们在启动活动时传入的请求码。 // 第二个参数resultCode,即我们在返回数据时传入的处理结果。 // 第三个参数data,即携带着返回数据的Intent。 super.onActivityResult(requestCode, resultCode, data); switch (requestCode){ case 1: if(resultCode==2){ EditText editText =(EditText)this.findViewById(R.id.edittext); String returnDate = data.getStringExtra("value"); editText.setText(returnDate); } break; default: break; } }如果在SecondActivity中不是按按钮返回的话,用户是直接按Back键返回,那么我们可以再SecondActivity中实现
public void onBackPressed() { // super.onBackPressed(); 这个要注释掉,然而没想懂为什么 Intent intent = new Intent(SecondActivity.this,MainActivity.class); intent.putExtra("value","This is return value"); setResult(2,intent); finish(); }当用户按下Back键后就会执行onBackPressed这个方法