由于最近在自学Android,所以想要把自己学过的每一块的知识点进行总结,然后不仅可以帮到别人,也可以使自己在以后对这块知识点不太清楚的时候可以返回来巩固一下,如果有什么不完善的地方,欢迎指出,这样大家可以一起进步,谢谢!
Intent(意图)在Activity中的应用
1、什么是Intent(意图)?
一个Intent就是一个传送信息的对象,它主要有三个基本的使用实例:
1、开启一个Activity 2、开启一个service 3、发送一个广播(broadcast)
- 本文主要总结一下Intent在Activity中的使用,也就是开启一个Activity,并传送信息。
2、显式意图和隐式意图
- 我们经常会从一个Activity开启另一个Activity,而我们要开启另一个Activity就需要通过Intent来开启。而Intent分为显式的Intent和隐式的Intent,它们分别有适用的场景。
显式意图:
显示意图就是显式的指定要开启的Activity。通过下面的两种方法显示地开启想要开启的Acitivity。
方法一: Intent intent = new Intent(); intent.setClassName("com.zero.intent", "com.zero.intent.SecondActivity");//这里的类名必须是全路径 startActivity(intent); 方法二: Intent intent = new Intent(getApplicationContext(),SecondActivity.class); startAcitivity(intent);
- 显示意图一般被用来开启自己应用里面的Acitvity
隐式意图:
我们的每一个Activity都需要在配置文件中进行配置,配置的时候可以配置intent-filter,如下所示,intent-filter就是一个意图过滤器,只有满足的指定条件的意图才可以打开这个Activity。
<activity android:name="com.zero.intent.SecondActivity" > <intent-filter> <action android:name="android.intent.action.Second" /> <data android:scheme="http"></data> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
下面的代码就是隐式地创建一个满足上面意图过滤器的意图,需要配置一些参数才可以。
Intent intent = new Intent(); intent.setAction("android.intent.action.Second"); intent.addCategory("android.intent.category.DEFAULT"); intent.setData(Uri.parse("http://xxx.com")); startActivity(intent);
- 隐式意图一般被用作激活其它的应用的界面,比如要打开浏览器的界面之类的就需要创建一个满足浏览器界面的配置的Intent。
3、数据传递
- Intent主要是一个传送消息的对象,我们可以让Intent携带数据给要打开的Acitivity,这个被打开的Activity可以获取数据,也可以返回数据给打开这个Acitvity的Acitivity。
设置发送数据
通过下面的代码来设置Intent,让其携带数据,其中key就是我们为我们传递的数据所起的名字,方便要开启的Activity通过这个key值来获取数据,这个value就是要传递的数据的值,可以是int、byte、short、double、boolean、long、float、char、String以及这些类型的数组类型,还可以是Serializable和Parcelable,可以传递实现了序列化的对象:
intent.putExtra("key",value);
接收数据
通过下面的代码来获取到Intent以及它所携带的数据
Intent intent = getIntent();//获取激活当前页面的意图对象 intent.getStringExtra(); intent.getIntExtra(); intent.getDoubleExtra(); ... intent.getExtras();
4、开启新界面并获取新界面的返回值
- 我们可以打开一个新的Activity并获取它传回来的数据。
- 步骤:
1、开启一个Activity,这里我们还了一种启动Activity的方法,传递的参数多了一个requestCode,这个是请求码,因为可能我们一个Activity要开启多个不同的Activity,而这个requestCode,就是用来区分不同的Activity的,我们可以通过这个请求码来区分并获取不同的界面返回的数据。
Intent intent = new Intent(getApplicationContext(),SexChooseActivity.class); startActivityForResult(intent, requestCode);
2、在被开启的Activity里面设置结果数据,这个里面需要注意一定要关闭界面,finish(),这里的resultCode和requestCode的作用一样,我们只要使用一种就可以了
Intent data = new Intent(); data.putExtra("text", text);//把数据设置到意图对象里面 setResult(resultCode, data); finish();//关闭当前的界面,一定记得关闭界面,数据才会被返回
3、在第一个Activity里面重写获取返回值的方法,我们通过重写这个方法来处理Activity返回来的数据,这个方法只有在打开的界面关闭后才会调用,所以这就是为什么要在第二步关闭界面。在这个里面可以通过请求码或者结果码来区分数据是哪个界面传回来的,然后通过参数Intent对象data来获取数据并使用
protected void onActivityResult(int requestCode, int resultCode, Intent data) { String text = data.getStringExtra("text"); tv_content.setText(text); super.onActivityResult(requestCode, resultCode, data); }