访问网页
button1.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);
}
})
只有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) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}
});
向下一个活动传输数据
传递字符串
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的形式将接受的数据打印出来。