【Android Training - 05】与其他Apps进行交互 [ Lesson 2 - 从activity获取Result ]

启动另外一个activity并不一定是单向的。你也可以启动另外一个activity然后接受一个result回来。为了接受这个result,你需要使用 startActivityForResult() (而不是startActivity())。

例如,你的app可以启动一个camera程序并接受拍的照片作为result。或者你可以启动People程序并获取其中联系的人的详情作为result。

当然,被启动的activity需要指定返回的result。它需要把这个result作为另外一个intent对象返回,你的activity需要在onActivityResult() 的回调方法里面去接收result。

Note: 在执行 startActivityForResult()你可以使用explicit 或者 implicit 的intent。当你启动另外一个位于你的程序中的activity时,你应该使用explicit intent来确保你可以接收到期待的结果。

Start the Activity [启动Activity]

对于startActivityForResult() 方法中的intent与之前介绍的并没有什么差异,只不过是需要在这个方法里面多添加一个int类型的参数。

这个integer的参数叫做"request code",它标识了你的请求。当你接收到result Intent时,可以从回调方法里面的参数去判断这个result是否是你想要的。

例如,下面是一个启动activity来选择联系人的例子:

static final int PICK_CONTACT_REQUEST = 1;  // The request code
...
private void pickContact() {
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, new Uri("content://contacts"));
    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}

Receive the Result [接收Result]

当用户完成了启动之后activity操作之后,系统会调用你的activity的onActivityResult() 回调方法。这个方法有三个参数:

  • 你通过startActivityForResult()传递的request code。
  • 第二个activity指定的result code。如果操作成功则是RESULT_OK ,如果用户没有操作成功,而是直接点击回退或者其他什么原因,那么则是RESULT_CANCELED
  • 第三个参数则是intent,它包含了返回的result数据部分。

例如,下面是如何处理pick a contact的result的例子:对应上面的例子

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == PICK_CONTACT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // The user picked a contact.
            // The Intent's data Uri identifies which contact was selected.

            // Do something with the contact here (bigger example below)
        }
    }
}
为了正确的handle这些result,你必须了解那些result intent的格式。对于你自己程序里面的返回result是比较简单的。 Apps都会有一些自己的api来指定特定的数据。例如,People app (Contacts app on some older versions) 总是返回一个URI来指定选择的contack,Camera app 则是在data数据区返回一个  Bitmap  (see the class about  Capturing Photos ).

学习自,http://developer.android.com/training/basics/intents/result.html,欢迎交流!

转载请注明出自:http://blog.csdn.net/kesenhoo,谢谢!



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值