活动–Activity–Intent
一个应用程序可以包括多个活动
活动的基本用法
(1)手动创建活动
(2)创建和加载布局
(3)注册活动
(4)隐藏标题栏
(5)活动中使用Toast(土司,界面提示)
(6)活动中使用Menu(菜单)
(7)如何销毁一个活动?
只要按一下Back键就可以销毁当前的活动了
如果不想通过按键的方式,而通过代码来实现的话,Activity类提供了一个finsh()方法,在活动中自己调用一下
这个方法就可以销毁当前活动了。
使用Intent在活动之间穿梭
Intent的作用?
Intent是Android程序中各组件之间进行交互的一种重要方式
它不仅可以指明当前组件想要执行的动作,还可以在不同的组件之间传递数据。
Intent一般可用于启动活动,启动服务,以及发送广播的场景
-
显示使用Intent
//第一个参数类型:活动上下文 Context packageContext,
//第二个参数类型:需要启动的活动的类名对应的类型,Class<?>clsIntent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent)
-
使用隐式Intent
在需要被启动的活动注册时通过指定明确的action和category,然后由系统去分析这个Intent,
比如:
(1)需要被启动的活动在AndroidManifest.xml中声明活动启动的入口条件
<intent-filter>
<action android:name="com.example.activityTest.ACTION_START">
<category android:name="android.intent.category.DEFAULT">
</intent-filter>
(2)只有调用者代码中指定的Intent内容 和 需要被启动活动指定的 和 内容同时能够匹配上,
需要被启动的活动才能响应该Intent。
Intent intent = new Intent("com.example.activityTest.ACTION_START");//此处如果不指定category,就是使用默认category.DEFAULT
intent.addCategory("com.example.activityTest.MY_CATEGORY")
startActivity(intent)
【注意】:一个Intent中只能指定一具action,但可以指定多个category,比如:
intent.addCategory("com.example.activityTest.MY_CATEGORY")
- 隐式的Intent其它作用
使用隐式的intent不仅可以启动自己程序内的活动,还可以启动其它程序的活动,这样可以达到
Android多个应用程序之间功能共享的效果
(1) 调用第三方应用
比如我们的应用中需要打开一个网页,此时我们自己不需要去实现浏览器的功能,而可以直接调用系统浏览器应用的能力
Intent intent = new Intent(Intent.ACTION_VIEW); //Intent.ACTION_VIEW是Android系统内置的动作,就是打开浏览器
intent.setData(Uri.parse(“http://www.baidu.com”));//将网址字符串解析成一个Uri对象传进去
调用系统的拔号功能
Intent intent = new Intent(Intent.ACTION_DIAL); //Intent.ACTION_DIAL是Android系统内置的动作
intent.setData(Uri.parse(“tel:10086”));
(2) 向下一个活动传递数据
Intent中提供了一系列putExtra()重载的方法,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,
只需要把这些数据再从Intent中取出就可以了。
比如:
在第一个活动中
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("Key_extra_data", "Hello secondActivity!");
startActivity(intent);
在第二个活动中
Intent intent = getIntent(); //获取调用者的Intent,即第一个活动传过来的Intent
String data = intent.getStringExtra("Key_extra_data");
Log.d("SecondActivity", data);
(3) 返回数据到上一个活动
启动活动时调用 startActivityForResult() 方法
比如:
步骤1:在第一个活动中
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent,1); //第二个参数:请求码(保持唯一值就可以),用于后续返回数据时判断是否是想要的返回码
步骤2:在第二个活动中
Intent intent = new Intent();
intent.putExtra(“Key_data_return”, “Hello FirstActivity!”);
setResult(Result_OK, intent); //参数1:返回码,表示成功或失败的处理结果, 参数2:返回的数据,放在Intent中
finsh();
步骤3:在第一个活动中
在被调的第二个活动被 销毁之后 会回调上一个活动的onActivityResult()方法,需要我们在第一个活动中重写这个方法
@override
protect void onActivityResult(int requestCode, int resultCode, Intent data){
switch(requestCode){ //对应启动活动时的请求码
case 1:
if (resultCode == Result_OK) {//resultCode 活动处理结果
String returnData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnData);
}
break;
default:
}
}
注意: 如果用户是通过按下Back键回到第一个活动的话,就不能用上面的方法接收返回结果了
此时,需要在第二个活动中重写 onBackPressed()方法来向上一个活动返回结果
@override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("Key_data_return", "Hello FirstActivity!");
setResult(Result_OK, intent); //参数1:返回码,表示成功或失败的处理结果, 参数2:返回的数据,放在Intent中
finsh();
}