欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 欧美激情一区二区三级高清视频 | 东京不太热在线新视频 | 欧美一区二区三区四区视频 | 特级做a爰片毛片免费看 | 精品国产乱码久久久久久1区2区 | 日本爽爽爽爽爽爽免费 | 欧美第一页草草影院 | 国产精品免费网站 | 久久99精品久久久久久 | 丁香亚洲 | 久久九 | 精品中文字幕久久久久久 | 国产欧美成人 | www.伊人.com| 天天影视综合网色综合国产 | 二区在线视频 | 天天射天天添 | 天天更新天天久久久更新影院 | 亚洲视频在线观看网站 | 一级片成人 | 浮力影院网站午夜 | 99精品视频免费观看 | 亚洲欧美精品中字久久99 | 国产精品毛片无码 | 亚洲3p | 欧美激烈精交gif动态图18p | 99热综合在线 | 婷婷的久久五月综合先锋影音 | 午夜男人女人爽爽爽视频 | 国产精品福利在线观看免费不卡 | 日本一本免费一二区 | 偷拍免费视频 | 久久精片 | 福利网在线 | 一级黄色片毛片 | 女人午夜色又刺激黄的视频免费 | av在线大全 | 无主之花在线观看 | 美女国内精品自产拍在线播放 | 亚洲午夜av| 日日操夜夜摸 |