欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【Android Developers Training】 29. 從Activi

系統(tǒng) 1912 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術(shù)一般,由于喜愛安卓而產(chǎn)生了翻譯的念頭,純屬個人興趣愛好。

原文鏈接: http://developer.android.com/training/basics/intents/result.html


啟動另一個activity不一定是單向的。你也可以啟動另一個Activity后,接收它返回的結(jié)果。為了接收結(jié)果,調(diào)用 startActivityForResult() (而不是 startActivity() )。

例如,你的應(yīng)用可以啟動一個相機App,并且接受拍攝的照片作為結(jié)果。或者,你可以啟動一個“聯(lián)系人”App來讓用戶選擇一個聯(lián)系方式,而你將這些聯(lián)系人的詳細信息作為結(jié)果接收。

當(dāng)然,這個響應(yīng)intent的Activity必須是設(shè)計成可以返回一個結(jié)果的。當(dāng)它確實可以時,它會以另一個 Intent 對象的形式將結(jié)果發(fā)送回來。你的Activity在 onActivityResult() 回調(diào)函數(shù)中接收它。

Note:

當(dāng)你調(diào)用 startActivityForResult() 時,你可以使用顯式地或者隱式的intent。當(dāng)啟動你的一個Activity來接收這個結(jié)果時,你應(yīng)該使用顯式地intent來保證你接收了期望的結(jié)果。

?

一). 啟動Activity

當(dāng)你希望啟動一個返回結(jié)果的Activity時,你使用的 Intent 對象并沒有什么別的特別的地方,但你需要給 startActivityForResult() 方法傳遞一個額外的整形參數(shù)。

整形參數(shù)是一個“ 需求碼(request code) ”,用它來標(biāo)示你的需求。當(dāng)你接收到裝有結(jié)果的 Intent 時,這個回調(diào)函數(shù)會提供相同的需求碼,這樣你的應(yīng)用就可以正確地識別結(jié)果來自于哪個需求,進而正確地處理結(jié)果。

下面的例子展示的是如何啟動一個Activity,允許用戶選擇一個聯(lián)系人:

      
        static
      
      
        final
      
      
        int
      
       PICK_CONTACT_REQUEST = 1;  
      
        //
      
      
         The request code
      
      
        ...


      
      
        private
      
      
        void
      
      
         pickContact() {

    Intent pickContactIntent 
      
      = 
      
        new
      
       Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"
      
        ));

    pickContactIntent.setType(Phone.CONTENT_TYPE); 
      
      
        //
      
      
         Show user only contacts w/ phone numbers
      
      
            startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

}
      
    

?

?二). 接收結(jié)果

當(dāng)用戶在處理Intent的Activity中將事務(wù)處理完畢并且返回后,系統(tǒng)將會調(diào)用你的Activity的 onActivityResult() 方法。這個方法包含了三個參數(shù):

下面的例子展示的是如何處理選擇一個聯(lián)系人處理完畢后返回的結(jié)果:

      
        @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)
      
      
                }

    }

}
      
    

在這個例子中,由Android聯(lián)系人應(yīng)用所返回的結(jié)果 Intent 提供了一個內(nèi)容 Uri ,它標(biāo)識出用戶所選擇的聯(lián)系人信息。

為了成功處理這個結(jié)果,你必須結(jié)果 Intent 中數(shù)據(jù)的格式是怎么樣的。當(dāng)返回的結(jié)果來自于你自己的Acitivity時,處理起來是簡單的。而Android內(nèi)置的應(yīng)用提供了它們自己的APIs,你可以利用它們獲得指定的結(jié)果數(shù)據(jù)。例如,聯(lián)系人應(yīng)用返回的一般是標(biāo)識了選中的聯(lián)系人信息的內(nèi)容URI,而相機應(yīng)用返回的是存儲于“ data ”中的一個 Bitmap 。(更多信息可以閱讀: Capturing Photos

?

三). 例子:閱讀聯(lián)系人數(shù)據(jù)

上面的例子展現(xiàn)了如何從聯(lián)系人應(yīng)用獲得一個處理結(jié)果,但是如何進一步地去處理返回的結(jié)果沒有繼續(xù)討論,因為這一方面的知識需要進一步的研究關(guān)于 content providers 方面的知識。然而,如果你對此感到好奇,下面的例子展示的是如何查詢結(jié)果數(shù)據(jù),進而從選擇的聯(lián)系人信息中得到電話號碼:

      
        @Override


      
      
        protected
      
      
        void
      
       onActivityResult(
      
        int
      
       requestCode, 
      
        int
      
      
         resultCode, Intent data) {

    
      
      
        //
      
      
         Check which request it is that we're responding to
      
      
        if
      
       (requestCode ==
      
         PICK_CONTACT_REQUEST) {

        
      
      
        //
      
      
         Make sure the request was successful
      
      
        if
      
       (resultCode ==
      
         RESULT_OK) {

            
      
      
        //
      
      
         Get the URI that points to the selected contact
      
      

            Uri contactUri =
      
         data.getData();

            
      
      
        //
      
      
         We only need the NUMBER column, because there will be only one row in the result
      
      

            String[] projection =
      
         {Phone.NUMBER};



            
      
      
        //
      
      
         Perform the query on the contact to get the NUMBER column

            
      
      
        //
      
      
         We don't need a selection or sort order (there's only one result for the given URI)

            
      
      
        //
      
      
         CAUTION: The query() method should be called from a separate thread to avoid blocking

            
      
      
        //
      
      
         your app's UI thread. (For simplicity of the sample, this code doesn't do that.)

            
      
      
        //
      
      
         Consider using CursorLoader to perform the query.
      
      

            Cursor cursor =
      
         getContentResolver()

                    .query(contactUri, projection, 
      
      
        null
      
      , 
      
        null
      
      , 
      
        null
      
      
        );

            cursor.moveToFirst();



            
      
      
        //
      
      
         Retrieve the phone number from the NUMBER column
      
      
        int
      
       column =
      
         cursor.getColumnIndex(Phone.NUMBER);

            String number 
      
      =
      
         cursor.getString(column);



            
      
      
        //
      
      
         Do something with the phone number...
      
      
                }

    }

}
      
    

Note:

在Android 2.3(API Level 9)之前,在 Contacts Provider 上執(zhí)行查詢(像上面所展現(xiàn)的)需要你的應(yīng)用申明 READ_CONTACTS 的授權(quán)許可(參考: Security and Permissions )。然而,從 Android 2.3 開始,聯(lián)系人應(yīng)用會授權(quán)給你一個臨時的權(quán)限,當(dāng)聯(lián)系人應(yīng)用向你返回一個結(jié)果時,允許你從 Contacts Provider 中讀取信息。但是這個臨時權(quán)限值僅應(yīng)用于需要被查詢的那個聯(lián)系人信息,所以你通過 intent Uri 查詢不到其它聯(lián)系人信息,除非你申明了 READ_CONTACTS 的授權(quán)許可。

【Android Developers Training】 29. 從Activity獲得結(jié)果


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91短视频app下载安装无限看丝瓜山东座 | 小蝌蚪污视频 | 国产精品久久久久久久久免费 | 在线黄 | 91亚洲影院 | 色视频网站在线观看 | 久久五月视频 | 久久在线观看 | 亚洲精品中文字幕在线观看 | www.午夜剧场 | 99久久精品国产亚洲 | 熟女毛片 | 久久精品国产一区二区 | 久草在线视频资源站 | 欧美一级毛片免费播放器 | 国产免费一区二区在线看 | 亚洲欧美日韩一区二区 | 亚洲精品一区二区三区福利 | 国产精品久久久久久亚洲调教 | 九九99在线视频 | 自拍偷拍中文字幕 | 日本熟妇毛茸茸xxxxx | 国产欧美一区二区久久 | 免费1级片| 欧美第一页草草影院 | 亚洲国产精品二区久久 | 日韩一区二区在线视频 | 久久久久久久av | 毛片免费看电影 | 91精品国产一区二区三区蜜臀 | 美女扒开内裤让男人桶 | 黄色免费网站电影 | 欧美一级高潮片免费的 | 久久高潮| 中文字幕在线观看第一页 | 亚洲精品久中文字幕 | 精品欧美亚洲韩国日本久久 | 高清一区二区亚洲欧美日韩 | 一区二区日韩 | 久久婷婷色香五月综合激情 | 成人天堂网 |