【Android Training - 05】與其他Apps進行交互 [ Lesson 2 - 從activity獲取Result ]

啓動另外一個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,謝謝!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章