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

【Android Developers Training】 29. 從Activi

系統 1821 0

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

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


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

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

當然,這個響應intent的Activity必須是設計成可以返回一個結果的。當它確實可以時,它會以另一個 Intent 對象的形式將結果發送回來。你的Activity在 onActivityResult() 回調函數中接收它。

Note:

當你調用 startActivityForResult() 時,你可以使用顯式地或者隱式的intent。當啟動你的一個Activity來接收這個結果時,你應該使用顯式地intent來保證你接收了期望的結果。

?

一). 啟動Activity

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

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

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

      
        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);

}
      
    

?

?二). 接收結果

當用戶在處理Intent的Activity中將事務處理完畢并且返回后,系統將會調用你的Activity的 onActivityResult() 方法。這個方法包含了三個參數:

下面的例子展示的是如何處理選擇一個聯系人處理完畢后返回的結果:

      
        @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聯系人應用所返回的結果 Intent 提供了一個內容 Uri ,它標識出用戶所選擇的聯系人信息。

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

?

三). 例子:閱讀聯系人數據

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

      
        @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 上執行查詢(像上面所展現的)需要你的應用申明 READ_CONTACTS 的授權許可(參考: Security and Permissions )。然而,從 Android 2.3 開始,聯系人應用會授權給你一個臨時的權限,當聯系人應用向你返回一個結果時,允許你從 Contacts Provider 中讀取信息。但是這個臨時權限值僅應用于需要被查詢的那個聯系人信息,所以你通過 intent Uri 查詢不到其它聯系人信息,除非你申明了 READ_CONTACTS 的授權許可。

【Android Developers Training】 29. 從Activity獲得結果


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色天使久久综合网天天 | 黄频网站在线观看视频 | 亚洲精品入口一区二区在线观看 | 欧美午夜精品久久久久免费视 | 免费一级欧美大片视频在线 | 久久久这里只有精品免费 | 国产精品成人观看视频网站 | 久久永久视频 | 福利精品在线 | 亚洲图片欧美在线 | 青青青在线视频人视频在线 | 欧美日韩大片 | 成人黄色在线视频 | 99av在线| 欧美精品亚洲精品日韩 | 天天综合日日噜噜噜 | 老司机精品久久最新免费 | 国产高清在线精品一区二区三区 | 国产免费一区二区三区香蕉精 | 97影院网 | 精品哟啊呦v视频在线观看 精品哟哟国产在线观看 | 久久精品欧美一区二区 | 婷婷色吧| 激情久久免费视频 | 特黄特黄一级片 | 欧美日韩亚洲精品一区 | 国产99精品| 日韩欧美一级毛片视频免费 | 夭天干天天做天天免费看 | 奇米久草 | 久热中文字幕在线精品首页 | 亚洲精品一区henhen色 | 亚洲福利一区二区 | 国产高清在线精品一区二区三区 | 奇米免费视频 | 国产美女久久久亚洲 | 国产日产精品_国产精品毛片 | 亚洲精品在线网 | 国产一区二区三区欧美精品 | 狠狠综合久久久久尤物丿 | 国产三级黄色录像 |