只有data标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够响应该 Intent。不过一般在data 标签中都不会指定过多的内容,如上面浏览器示例中,其实只需要 指定android:scheme 为http,就可以响应所有的http协议的Intent了。
android:scheme 用于指定数据的协议部分,如上例中的http部分。 android:host 用于指定数据的主机名部分,如上例中的www.baidu.com部分。 android:port 用于指定数据的端口部分,一般紧随在主机名之后。 android:path 用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内 容。 android:mimeType 用于指定可以处理的数据类型,允许使用通配符的方式进行指 定。
传递字符串
button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String data = "Hello SecondActivity"; Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("extra_data", data); startActivity(intent); } });在被传递的活动SecondActivity中需要接受数据
public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); Intent intent = getIntent(); String data = intent.getStringExtra("extra_data"); Toast.makeText(SecondActivity.this,data,Toast.LENGTH_SHORT).show(); } }通过静态方法makeText() 创建出一个Toast 对象,然后调用show() 将Toast显示出来就可以了。这里需要注意的是,makeText() 方法需要传入3个参数。第一个 参数是Context ,也就是Toast要求的上下文,由于活动本身就是一个Context 对象,因此这 里直接传入FirstActivity.this 即可。第二个参数是Toast显示的文本内容,第三个参数是 Toast显示的时长,有两个内置常量可以选择Toast.LENGTH_SHORT 和Toast.LENGTH_LONG 。
在FirstActivity中通过点击button来调用另一个活动,因此在FirstActivity中写代码
button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent, 1); } });这里使用startActivityForResult() 方法来启动SecondActivity;
那在SecondActivity中可以写
public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); Button button2 = (Button) findViewById(R.id.button_2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); } }); } }这里我们设置了一个Intent,但是这里的Intent我们仅是用来传递数据。
setResult() 方法接收两个参数,第 一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK 或RESULT_CANCELED 这 两个值,第二个参数则把带有数据的Intent传递回去。
finish()销毁活动2的时候,我们需要在FirstActivity中接受数据。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (resultCode == RESULT_OK) { String returnedData = data.getStringExtra("data_return"); Toast.makeText(FirstActivity.this,returnedData,Toast.LENGTH_LONG).show(); } break; default: } }这里我们顺便复习一下前面的内容 我们使用getStringExtra接受数据,然后采用Toast的形式将接受的数据打印出来。
