Getting a Result from an Activity

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 10:43 我要评论(0)

Starting another activity doesn't have to be one-way. You can also start another activity and receive a result back. To receive a result, call startActivityForResult() (instead of startActivity()).

For example, your app can start a camera app and receive the captured photo as a result. Or, you might start the People app in order for the user to select a contact and you'll receive the contact details as a result.

Of course, the activity that responds must be designed to return a result. When it does, it sends the result as another Intent object. Your activity receives it in the onActivityResult() callback.

Note: You can use explicit or implicit intents when you call startActivityForResult(). When starting one of your own activities to receive a result, you should use an explicit intent to ensure that you receive the expected result.

Start the Activity

There's nothing special about the Intent object you use when starting an activity for a result, but you do need to pass an additional integer argument to the startActivityForResult() method.

The integer argument is a "request code" that identifies your request. When you receive the result Intent, the callback provides the same request code so that your app can properly identify the result and determine how to handle it.

For example, here's how to start an activity that allows the user to pick a contact:

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

When the user is done with the subsequent activity and returns, the system calls your activity's onActivityResult() method. This method includes three arguments:

The request code you passed to startActivityForResult().

A result code specified by the second activity. This is either RESULT_OK if the operation was successful or RESULT_CANCELED if the user backed out or the operation failed for some reason.

An Intent that carries the result data.

For example, here's how you can handle the result for the "pick a contact" intent:


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)




In this example, the result Intent returned by Android's Contacts or People app provides a content Uri that identifies the contact the user selected.

In order to successfully handle the result, you must understand what the format of the result Intent will be. Doing so is easy when the activity returning a result is one of your own activities. Apps included with the Android platform offer their own APIs that you can count on for specific result data. For instance, the People app (Contacts app on some older versions) always returns a result with the content URI that identifies the selected contact, and the Camera app returns a Bitmap in the "data" extra (see the class about Capturing Photos).


  • 无人驾驶汽车如何改变城市生活?听听他们怎么说


  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了


  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量



霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...