注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

Android Activity---启动Activity  

2015-05-01 14:03:07|  分类: android-study |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

你能够通过调用startActivity()方法来启动另外一个Activity,在调用这个方法时要给它传递一个你想要启动的描述Activity的Intent作为参数。这个Intent既可以确切的指定你想要启动的Activity,也可以是你想要执行的动作的类型的描述(系统会给你选择相应的Activity,甚至可以从不同的应用程序中选择)。Intent也能够携带少量的用于启动Activity所需的数据。

                                                                                                                             

当在自己的应用程序中工作时,你会经常的需要简单加载一个已知的Activity,你能够使用类名,通过创建一个你想启动的明确定义的Activity的Intent来做这件事。例如,下面的例子说明了怎样启动一个名叫SignInActivity的Activity。

Intent intent = new Intent(this, SignInActivity.class);

startActivity(intent);

 

你的应用可能要执行诸如发送邮件、文本消息,或使用来自你的Activity的数据更新状态等动作,而你的应用程序中可能没有自己的执行这些动作的Activity,因此你能够使用设备上其他应用程序提供的Activity来替你执行这些动作,这是Intent的真正价值---你能够创建一个描述你想执行的动作的Intent,这样系统就会从其他应用程序中加载响应的的Activity。如果有多个能够处理这个Intent的Activity,那么用户能够选择其中之一来使用。例如,如果你想允许用户发送一个邮件消息,你能够创建下面这样的Intent:

Intent intent = new Intent(Intent.ACTION_SEND);

Intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);

startActivity(intent);

 

附加给Intent的EXTRA_EMAIL是一个要发送邮件的邮件地址字符数组,当邮件应用程序响应这个Intent时,它会读附加物中提供的字符数组,然后把它们放到邮件格式的”to”字段中。在这个案例中,邮件应用程序的Activity被启动,当用户发送邮件,你的Activity被恢复。

 

为了某个结果启动一个Activity

某些时候,你可能想要接受来自你启动的Activity的执行结果,通过调用startActivityForResult()方法来启动Activity可以到达这个目的(而不是startActivity()方法)。要从后续的Activity中接受执行结果,你必须实现onActivityResult()回调方法,当后续的Activity执行完成,它会在Intent中返回一个结果给你的onActivityResult()方法。

 

例如,你也许想要用户来选择一个通讯录,以便你的Activity能够用这个通讯录做一些事情。下面的例子说明了怎样创建这样的Intent和处理这个结果:

Private void pickContack(){

//Create an intent to “pick” a contact, as defined by the content provider URI

Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);

startActivityForResult(intent, PICK_CONTACT_REQUEST);

}

 

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
    if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST)           {

   // Perform a query to the contact's content provider for the contact's name
        Cursor cursor = getContentResolver().query(data.getData(),
        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
        if (cursor.moveToFirst()) { // True if the cursor is not empty
            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(columnIndex);
            // Do something with the selected contact's name...
        }
    }

 

这个列子展示了为了处理Activity结果在onActivityResult()方法中应该使用的基本逻辑。首先键请求结果是否成功---如果成功,那么resultCode将是RESULT_OK,同时判断响应的结果是否是请求已知的(在这个例子中,requestCode和用startActivityForResult()方法的第二个参数进行匹配),接下来,代码通过查询Intent返回的数据来处理Activity的返回结果。

 

ContentResolver执行的查询与内容提供的区别是,它返回一个允许查询数据的游标来读取数据,关于更多信息,请查看Content Providers(内容提供器)文档。

 

关于使用Intent的更多信息,请查看Intents and Intent Filters(Intents和Intent过滤器)文档

  评论这张
 
阅读(184)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016