Android Activity---启动Activity

 

你能够通过调用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过滤器)文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值