啓動另外一個activity並不一定是單向的。你也可以啓動另外一個activity然後接受一個result回來。爲了接受這個result,你需要使用 startActivityForResult()
(而不是startActivity()
)。
例如,你的app可以啓動一個camera程序並接受拍的照片作爲result。或者你可以啓動People程序並獲取其中聯繫的人的詳情作爲result。
當然,被啓動的activity需要指定返回的result。它需要把這個result作爲另外一個intent對象返回,你的activity需要在onActivityResult()
的回調方法裏面去接收result。
Note: 在執行 startActivityForResult()時,
你可以使用explicit
或者 implicit 的intent。當你啓動另外一個位於你的程序中的activity時,你應該使用explicit intent來確保你可以接收到期待的結果。
Start the Activity [啓動Activity]
對於startActivityForResult()
方法中的intent與之前介紹的並沒有什麼差異,只不過是需要在這個方法裏面多添加一個int類型的參數。
這個integer的參數叫做"request code",它標識了你的請求。當你接收到result Intent
時,可以從回調方法裏面的參數去判斷這個result是否是你想要的。
例如,下面是一個啓動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); }
Receive the Result [接收Result]
當用戶完成了啓動之後activity操作之後,系統會調用你的activity的onActivityResult()
回調方法。這個方法有三個參數:
- 你通過startActivityForResult()傳遞的request code。
- 第二個activity指定的result code。如果操作成功則是
RESULT_OK
,如果用戶沒有操作成功,而是直接點擊回退或者其他什麼原因,那麼則是RESULT_CANCELED
- 第三個參數則是intent,它包含了返回的result數據部分。
例如,下面是如何處理pick a contact的result的例子:對應上面的例子
@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) } } }爲了正確的handle這些result,你必須瞭解那些result intent的格式。對於你自己程序裏面的返回result是比較簡單的。Apps都會有一些自己的api來指定特定的數據。例如,People app (Contacts app on some older versions) 總是返回一個URI來指定選擇的contack,Camera app 則是在data數據區返回一個
Bitmap
(see
the class about Capturing
Photos).
學習自,http://developer.android.com/training/basics/intents/result.html,歡迎交流!
轉載請註明出自:http://blog.csdn.net/kesenhoo,謝謝!