android学习(六) 获取Activity的结果

启动并不一定是单向的另一个Activity。还可以启动另一个Activity并接收返回的结果。要接受结果调用startActivityForResult()
响应的Activity必须设计为返回结果。当他这样做时,它会作为另一个Intent对象发送结果。Activity在onActivityResult()回掉中接收它。
:当您调用 startActivityForResult() 时,您可以使用明确或隐含 Intent。当启动您自己的 Activity 以接收结果时,您应使用明确 Intent 确保您可收到预期结果。


启动Activity

启动针对结果的 Activity 时,您所使用的 Intent 对象并没有什么特别之处,但您需要向 startActivityForResult() 方法传递额外的整数参数

该整数参数是识别您的请求的“请求代码”。当您收到结果Intent 时,回调提供相同的请求代码,以便您的应用可以正确识别结果并确定如何处理它。

例如,此处显示如何开始允许用户选择联系人的 Activity:

//选择联系人
private void pickContact(){
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK,Uri.parse("content://contacts"));
    pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(pickContactIntent,PICT_CONTACT_REQUEST);
}

接收结果

当用户完成后续Activity并返回时,系统会调用Activity的onActivityResult()方法。此方法有三个参数:
1. 向 startActivityForResult() 传递的请求代码。
2. 第二个 Activity 指定的结果代码。如果操作成功,这是 RESULT_OK;如果用户退出或操作出于某种原因失败,则是 RESULT_CANCELED。
3. 传送结果数据的 Intent。
例:处理”选择联系人”Intent的结果

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(PICT_CONTACT_REQUEST == requestCode){
            if(resultCode == RESULT_OK) {
                //获取选择联系人所指的的Uri
                Uri contactUri = data.getData();
                //我们只需要编号列,因为结果中只有一行
                String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER};
                //在联系人上执行查询以获取号码列
                //query()应从单独的线程来避免阻塞
                //考虑使用CursorLoader执行查询
                Cursor cursor = getContentResolver().query(contactUri,projection,null,null,null);
                cursor.moveToFirst();
                //从号码列检索
                int column = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                String number = cursor.getString(column);
            }
        }
    }

为了成功处理结果,您必须了解结果的 Intent 的格式。当返回结果的 Activity 是您自己的 Activity 之一时,这便非常容易。 Android 平台附带的应用提供它们自己的 API,您可用这些 API 获取特定结果数据。 例如,“联系人”应用始终返回带内容 URI(识别所选联系人)的结果,并且“相机”应用在 “data” extra 中返回 Bitmap。


:在 Android 2.3(API 级别 9)之前,在 Contacts Provider 上执行查询(如上面所示)需要您的应用声明 READ_CONTACTS 权限(请参阅安全与权限)。但是,自 Android 2.3 版本开始,“联系人”应用授予您的应用在联系人提供程序向您返回结果时从联系人提供程序临时读取信息的权限。 该临时权限仅适用于所请求的特定联系人,因此您只能查询 Intent 的 Uri 指定的联系人,除非您声明 READ_CONTACTS 权限。


摘自android developer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值