Android Developers:从一个Activity获取结果
启动其它Activity不是单向的。你也能启动其它Activity并获取一个返回结果。为了获取一个结果,调用startActivityForResult()方法(替代startActivity()方法)。
例如,你的应用程序能启动一个照相机应用程序,并获取捕捉的相片作为结果。或者,你可能启动People应用程序,为了用户选择一个联系人,并且你将会获取这个联系的的详细信息作为结果。
当然,这个响应Activity必须被设计来返回一个结果。当它执行的时候,它发送这个结果作为其它Intent对象。你的Activity在onActivityResult()回调方法中获取它。
注意:你能使用显示的或者隐式的意图,当你调用startActivityForResult()方法的时候。当启动一个你自己的Activity来获取一个结果的时候,你应该使用一个明确的意图来确保你获取获取期望的结果。
启动Activity
——————————————————————————————————————————————————————————————
当你启动一个Activity返回结果的时候,这里没有指定关于你使用Intent对象的任何事情,但是你需要传递一个额外的整型参数给startActivityForResult()方法。
这个整型参数是一个“请求码“,他确定你的请求。但你获取这个结果Intent的时候,回调方法提供了相同的访问码,以至于你的应用程序能正确的识别这个结果,并决定如何处理它。
例如,这里是如何启动一个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);
- }
获取结果
——————————————————————————————————————————————————————————————
当用户处理了后来的Activity并返回的时候,系统调用你的Activty的onActivityResult()方法。这个方法包含三个参数:
你传递给startActivityForResult()方法的请求码。
被第二个Activity指定的结果码。这个是RESULT_OK如果操作成功,或者RESULT_CANCLED如果用户返回或者操作由于一些原因失败。
携带结果码的一个Intent。
例如,这里是你如何处理这个”获取一个联系“意图的记过:
- @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)
- }
- }
- }
在这个例子中,结果Intent通过Andrid的Contacts或者People应用程序提供一个内容Uri被返回,它确定用户选择的联系人。
为了成功的处理这个结果,你必须懂得结果Intent的格式。当Activity返回的结果是一个你自己的Activity的时候是非常简单的。包含在Android平台中的应用程序支持你能指定特定结果数据的API。例如,People应用程序(联系人应用程序在一些老的版本)总是返回一个结果,伴随着content URI,它指定了被选择的联系人,并且Camera应用程序在”data”额外数据中返回一个Bitmap(查看关于Capturing Photos的课程)。
额外:读取联系人数据
上面显示的如何从People应用程序获取一个结果的代码,没有关于如何从这个结果中读取数据的详细说明,因为它需要在content provider中需要更详细的讨论。然而,如果你很好奇,这里有一些代码,它展示了如何查询从选择额联系人获取电话号码结果数据:
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- // Check which request it is that we're responding to
- if (requestCode == PICK_CONTACT_REQUEST) {
- // Make sure the request was successful
- if (resultCode == RESULT_OK) {
- // Get the URI that points to the selected contact
- Uri contactUri = data.getData();
- // We only need the NUMBER column, because there will be only one row in the result
- String[] projection = {Phone.NUMBER};
- // Perform the query on the contact to get the NUMBER column
- // We don't need a selection or sort order (there's only one result for the given URI)
- // CAUTION: The query() method should be called from a separate thread to avoid blocking
- // your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
- // Consider using CursorLoader to perform the query.
- Cursor cursor = getContentResolver()
- .query(contactUri, projection, null, null, null);
- cursor.moveToFirst();
- // Retrieve the phone number from the NUMBER column
- int column = cursor.getColumnIndex(Phone.NUMBER);
- String number = cursor.getString(column);
- // Do something with the phone number...
- }
- }
- }
注意:在Andrid2.3之前(API Level 9),在这个Content Provider中执行一个查询(想上上面显示的)要求你的应用程序声明READ_CONTACTS权限(查看Security and Permissions)。然而,从Android2.3开始,Contacts/People应用程序授予应用程序临时的权限,当它返回你一个结果的时候读取联系人Provider。这个临时的权限仅仅应用给指定的联系人请求,所以你不能查询一个其它联系人,除了通过Intent的Uri被指定,至少你要声明READ_CONTACTS权限。
Android Developers:从一个Activity获取结果的更多相关文章
- Android世界第一个activity启动过程
Android世界第一个activity启动过程 第一次使用Markdown,感觉不错. Android系统从按下开机键一直到launcher的出现,是一个如何的过程,中间都做出了什么操作呢.带着这些 ...
- 【Android Developers Training】 99. 获取联系人详细信息
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 98. 获取联系人列表
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 39. 获取文件信息
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- android 开发 实现一个activity变成dialog对话框
效果图: 首先说说为什么需要大费周章的去用activity实现一个dialog,明明android系统已经提供了一个更方便的dialog了.原因如下: 1.activity模式的dialog可以实现更 ...
- startActivityForResult调用另外一个Activity获取返回结果
startActivityForResult(intent,requestCode)可以调用另外一个Activity,并返回结果. 换头像案例 activity_main.xml <?xml v ...
- android开发中一个activity如何调用另一个xml中的控件
有时候,我们需要在一个activity中使用另一个activity中的控件,这时候就不能直接findViewById,不然会报错指向空对象,这时就需要像下面这样做. LayoutInflater fa ...
- Android 只开启一个Activity实例
在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...
- (转)Android 只开启一个Activity实例
在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种. 方法一:设置起动模式 一个Activity有四种启动模式 ...
随机推荐
- javascript数组操作大全,数组方法总汇
1. shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] ...
- 【树莓派】RPi desktop系统重启或关机挂起几个问题:plymouth-reboot.service、plymouth-poweroff.service、Deconfiguring network interfaces
在基于intel平台安装的RPi desktop关机或者重启时,会存在挂起的问题,一直卡着不动. 挂起问题有3个: 系统关机时候,停留在:plymouth-poweroff.service 系统重启时 ...
- JAVA 数据库连接池(伪代码,简单易读)
一.引言 近年来,随着 Internet/Intranet 建网技术的飞速发展和在世界范围内的迅速普及,电子商务的冲击波又一次在世界范围内掀起巨浪,各类商务网站吸引着大量用户的青睐,商务网站的访问量也 ...
- Spring学习笔记四:SpringAOP的使用
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6776247.html 一:AOP基础概念 (1)通知(增强)Advice 通知,其实就是我们从众多类中提取出 ...
- JavaWeb应用项目中文乱码的解决
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6383542.html 在把web项目成功部署到云主机后,通过浏览器成功地访问到了你的网站,却发现页面里本该由 ...
- 【shell】创建长目录,目录存在则忽略,缺失则创建
有时候,我们需要创建一个空目录树,如果给定路径包含目录,那么还必须检查这些目录是否存在: mkdir –p /qinys/oliver/tmp/ 执行上述命令即可创建长目录,并且有则忽略,无则创建原则 ...
- Windows下 VS2015编译boost1.62
VS2015编译boost1.62 Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有 ...
- RHEL7-openldap安装配置一(服务器端安装配置)
LDAP的术语:entry:一个单独的单元,使用DN(distinguish name)区别attribute:entry的属性,比如,如果entry是组织机构的话,那么它的属性包括地址,电话,传真号 ...
- springboot自定义jdbc操作库+基于注解切点AOP
发布时间:2018-11-08 技术:springboot+aop 概述 springBoot集成了自定义的jdbc操作类及AOP,因为spring自带的JdbcTemplate在实际项目中并 ...
- 2014年辛星Javascript解读第三节
经过第一节的入门和第二节的运算符.那么接下来我们就能够学习Javascript的函数了,当然了.无论大家之前学习的是什么编程语言.都会有函数的概念,假设大家学的是Pascal,还会有"过程& ...