Android Activity间通过Intent进行数据传递

先补一些坑:在之前的blog中我是用ACTION_DIAL直接调用系统内部的拨号面板。其实我们还可以直接打开发短信的面板,甚至直接拨号给联系人。

发短信:

注意smsto以及sms_body均为固定写法。ACTION_SENDTO是打开短信面板。ACTION_SEND则是直接发短信。

直接拨号:

但是需要注意的是,我们这里是直接让系统拨号,这就需要获得系统的安全权限。所以我们在AndroidMainfest.xml中声明应用获得这样的安全权限。

这样我们就可以直接拨号了。暂时填坑结束。

 

以上我们都是用Intent来启动活动,但是Intent的强大还可以在启动活动的过程中传递数据。Intent中提供了一系列putExtra的方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后只需要把这些数据从Intent中取出即可。

putExtra()方法有些类似Python中的字典或者STL的map容器,他接受两个参数,第一个参数是Key,用于后面从Intent中取值,第二个参数是真正要传递的数据。现在我们要在ThirdActivity中将传递数据取出并打印到LogCat中。蒟蒻昨天被ZZ普及了一下LogCat的正确使用姿势。

通过getIntent()方法获取用于启动ThirdActivity的Intent,然后调用getStringExtra()方法传入相应的key,即可得到传递的数据。这样当我们再次启动程序后点击button4的时候就会发现LogCat打印了一行”Hello World”。

上面我尝试的是把数据从上一个活动传递到下一个活动,同样我们也可以把数据返回给上一个活动。因为Activity有一个方法startActivityForResult()专门处理这种情况。它有两个参数,第一个参数为Intent,第二个参数为请求码,主要是为了在后面的回调中判断数据的来源。所以这个请求码必须为唯一值。我们在这里设为1.

现在我们需要修改SecondActivity来添加返回数据的逻辑。

解释一下,我们在这里也使用了个Intent,setResult()方法是专门用于向上一个活动返回数据的,第一个参数是用来向上一个活动返回处理结果,第二个参数则是把带有数据的Intent传递回去。这样当我们销毁了SecondActivity后,FirstActivity便调用onActivityResult()方法,所以我们为了处理数据必须重新这个方法。

 

这样我们就实现了返回数据给上一个活动的目标。但是如果用户没有按Button而是直接返回键的话,我们的数据是无法按照上面的方式返回的。这里我们就需要在SecondActivity中重写 onBackPressed()方法,就依然可以返回数据了。

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注