亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【Android Developers Training】 29. 從Activi

系統(tǒng) 2157 0

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

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


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

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

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

Note:

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

?

一). 啟動Activity

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

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

下面的例子展示的是如何啟動一個(gè)Activity,允許用戶選擇一個(gè)聯(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() 方法。這個(gè)方法包含了三個(gè)參數(shù):

下面的例子展示的是如何處理選擇一個(gè)聯(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)
      
      
                }

    }

}
      
    

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

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

?

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

上面的例子展現(xiàn)了如何從聯(lián)系人應(yīng)用獲得一個(gè)處理結(jié)果,但是如何進(jìn)一步地去處理返回的結(jié)果沒有繼續(xù)討論,因?yàn)檫@一方面的知識需要進(jìn)一步的研究關(guān)于 content providers 方面的知識。然而,如果你對此感到好奇,下面的例子展示的是如何查詢結(jié)果數(shù)據(jù),進(jìn)而從選擇的聯(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)給你一個(gè)臨時(shí)的權(quán)限,當(dāng)聯(lián)系人應(yīng)用向你返回一個(gè)結(jié)果時(shí),允許你從 Contacts Provider 中讀取信息。但是這個(gè)臨時(shí)權(quán)限值僅應(yīng)用于需要被查詢的那個(gè)聯(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元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费观看国产网址你懂的 | 色一情一乱一伦麻豆 | 中文字幕无线码中文字幕免费 | 精品国产成人系列 | 欧美一区二区三区免费观看视频 | 91在线精品老司机免费播放 | 98色花堂国产精品首页 | 欧美亚洲国产精品第一页 | 日本一视频一区视频二区 | 九九久久国产精品免费热6 九九久久精品 | 久久精品国产久金国产思思 | 国产成人精品视频一区二区不卡 | 青青青国产在线视频 | 在线播放 亚洲 | 国产女人体一区二区三区 | 欧美日韩国产58香蕉在线视频 | 女bbbbxxxx毛片视频丶 | 精品亚洲大全 | 久久99热精品免费观看无卡顿 | 亚洲成在人天堂一区二区 | 在线播放性xxx欧美 在线播放亚洲 | 一级毛片不收费 | 在线观看av片永久免费 | 国产99精品在线观看 | 操操操爽爽爽 | 91精品国产综合久久福利 | 亚洲免费人成在线视频观看 | 免费视频日韩 | 婷婷五月色综合香五月 | 四虎影视精品 | 天海翼一区二区在线观看 | 日日干日日操日日射 | 日日操天天爽 | 免费观看羞羞视频网站 | 特级一级全黄毛片免费 | www.色在线观看 | 麻豆一区二区三区在线观看 | 午夜免费一级片 | 国产在线成人一区二区 | 欧美性天天影院 | 国产精品视频一区二区三区不卡 |