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

【Android Developers Training】 30. 允許其它

系統(tǒng) 1915 0

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

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


之前的兩節(jié)課關(guān)注于故事的一面:從你的應(yīng)用啟動(dòng)另一個(gè)應(yīng)用的activity。但是如果你的應(yīng)用可以執(zhí)行一個(gè)對(duì)另一個(gè)應(yīng)用來說有用的行為,那么你的應(yīng)用就應(yīng)該準(zhǔn)備好響應(yīng)由其他應(yīng)用所發(fā)起的行為需求。例如,你構(gòu)建了一個(gè)社交應(yīng)用,它可以和用戶的朋友分享信息和照片,那么此時(shí)你最感興趣的就是支持 ACTION_SEND 的Intent,這樣用戶可以在其他應(yīng)用初始化一個(gè)“ 分享 ”的行為,然后啟動(dòng)你的應(yīng)用來執(zhí)行這個(gè)行為。

為了允許其他應(yīng)用啟動(dòng)你的Activity,你需要在清單文件中,在對(duì)應(yīng)的 <activity> 標(biāo)簽內(nèi), 添加一個(gè) <intent-filter> (姑且稱之為Intent過濾器) 標(biāo)簽。

當(dāng)你的應(yīng)用安裝在一個(gè)設(shè)備上時(shí),系統(tǒng)會(huì)識(shí)別你的intent過濾器,并且將信息添加至一個(gè)內(nèi)部的目錄,這里面收錄了所有安裝的應(yīng)用所支持的intents。當(dāng)一個(gè)應(yīng)用調(diào)用 startActivity() 或者 startActivityForResult() ,并且使用的是隱式的intent時(shí),系統(tǒng)會(huì)找到哪一個(gè)(些)activity可以相應(yīng)這個(gè)intent。

?

一). 添加一個(gè)Intent過濾器

為了恰當(dāng)?shù)囟x你的activity可以處理什么intents,每個(gè)你添加的intent過濾器,就activity能接受的行為和數(shù)據(jù)類型而言,應(yīng)該是越明確越好。

如果Activity的intent過濾器能夠符合下面列舉的 Intent 對(duì)象標(biāo)準(zhǔn),那么系統(tǒng)會(huì)將該 Intent 交付給這個(gè)activity:

Action

一個(gè)字符串,表征了將要執(zhí)行的行為的名稱。通常是一個(gè)系統(tǒng)所定義的值,如: ACTION_SEND 或者 ACTION_VIEW

在你的intent過濾器中,用 <action> 標(biāo)簽來特指接收的行為。在這個(gè)標(biāo)簽中你所特指的值必須是這個(gè)行為的全名,而不是 API 常量(見下面的例子)。

Data

這是一個(gè)和intent所關(guān)聯(lián)的數(shù)據(jù)的描述。

在你的intent過濾器中,用 <data> 標(biāo)簽來特指它。你可以在這個(gè)標(biāo)簽中使用一個(gè)或多個(gè)字段,你可以只定義MIME類型,只定義一個(gè)URI前綴,只定義一個(gè)URI方案,或者是這些和其他類型的結(jié)合,它們指出了能接收的數(shù)據(jù)類型。

Note:

如果你不需要申明關(guān)于數(shù)據(jù) Uri 細(xì)節(jié)(比如當(dāng)你的activity處理其他類型的“extra”數(shù)據(jù),而不是一個(gè)URI),那么你應(yīng)該只指明“ android:mimeType ”這一屬性字段,以此來聲明你的activity要處理的數(shù)據(jù)類型,比如:“ text/plain ”或者“ image/jpeg ”。

Category

提供一個(gè)額外的方法來特定處理該intent的Activity,通常與用戶的手勢(shì)或者它所啟動(dòng)的地點(diǎn)相關(guān)。系統(tǒng)支持一些不同類型的category,但大多數(shù)很少使用。然而,要記住的是所有隱式的intent,默認(rèn)定義了 CATEGORY_DEFAULT

在你的Intent過濾器中,用 <category> 標(biāo)簽特指它。

?

在你的intent過濾器中,你可以通過在 <intent-filter> 標(biāo)簽中添加合適的XML標(biāo)簽,來申明你的 activity 接收什么樣的 intent

下面的例子是一個(gè)具有intent過濾器的activity,它處理的intent是這樣的,具有 ACTION_SEND 的行為,且數(shù)據(jù)類型是文本或圖像:

      
        <
      
      
        activity 
      
      
        android:name
      
      
        ="ShareActivity"
      
      
        >
      
      
        <
      
      
        intent-filter
      
      
        >
      
      
        <
      
      
        action 
      
      
        android:name
      
      
        ="android.intent.action.SEND"
      
      
        />
      
      
        <
      
      
        category 
      
      
        android:name
      
      
        ="android.intent.category.DEFAULT"
      
      
        />
      
      
        <
      
      
        data 
      
      
        android:mimeType
      
      
        ="text/plain"
      
      
        />
      
      
        <
      
      
        data 
      
      
        android:mimeType
      
      
        ="image/*"
      
      
        />
      
      
        </
      
      
        intent-filter
      
      
        >
      
      
        </
      
      
        activity
      
      
        >
      
    

每一個(gè)輸入的intent只特定一個(gè)行為和一個(gè)數(shù)據(jù)類型,但是在每個(gè) <intent-filter> 標(biāo)簽中聲明多個(gè) <action> <data> 或者 <category> 標(biāo)簽的實(shí)例也是可以的。

如果有兩對(duì)行為和數(shù)據(jù),其行為是相互排斥的,你應(yīng)該分別創(chuàng)建intent過濾器,將行為和數(shù)據(jù)類型合理搭配避免沖突。

例如,假設(shè)你的應(yīng)用處理文本和圖像的數(shù)據(jù)類型,也同時(shí)相應(yīng) ACTION_SEND ACTION_SENDTO 的行為。在這種情況下,你必須為兩個(gè)行為分別定義兩個(gè)intent過濾器,因?yàn)橐粋€(gè)含有 ACTION_SENDTO 的intent必須使用數(shù)據(jù) Uri ,并通過使用“ send ”或者“ sendto ”的URI方案,來指定受眾地址。

      
        <
      
      
        activity 
      
      
        android:name
      
      
        ="ShareActivity"
      
      
        >
      
      
        <!--
      
      
         filter for sending text; accepts SENDTO action with sms URI schemes 
      
      
        -->
      
      
        <
      
      
        intent-filter
      
      
        >
      
      
        <
      
      
        action 
      
      
        android:name
      
      
        ="android.intent.action.SENDTO"
      
      
        />
      
      
        <
      
      
        category 
      
      
        android:name
      
      
        ="android.intent.category.DEFAULT"
      
      
        />
      
      
        <
      
      
        data 
      
      
        android:scheme
      
      
        ="sms"
      
      
        />
      
      
        <
      
      
        data 
      
      
        android:scheme
      
      
        ="smsto"
      
      
        />
      
      
        </
      
      
        intent-filter
      
      
        >
      
      
        <!--
      
      
         filter for sending text or images; accepts SEND action and text or image data 
      
      
        -->
      
      
        <
      
      
        intent-filter
      
      
        >
      
      
        <
      
      
        action 
      
      
        android:name
      
      
        ="android.intent.action.SEND"
      
      
        />
      
      
        <
      
      
        category 
      
      
        android:name
      
      
        ="android.intent.category.DEFAULT"
      
      
        />
      
      
        <
      
      
        data 
      
      
        android:mimeType
      
      
        ="image/*"
      
      
        />
      
      
        <
      
      
        data 
      
      
        android:mimeType
      
      
        ="text/plain"
      
      
        />
      
      
        </
      
      
        intent-filter
      
      
        >
      
      
        </
      
      
        activity
      
      
        >
      
    

Note:

為了接收隱式的intent,你必須在intent過濾器中包含 CATEGORY_DEFAULT 這一category。 startActivity() startActivityForResult() 這兩個(gè)方法都將所有的intent處理為包含有 CATEGORY_DEFAULT 的category。如果你不聲明它,你的應(yīng)用不會(huì)收到任何隱式的intent。

更多關(guān)于發(fā)送和接收 ACTION_SEND 的intents的信息,可以閱讀: Receiving Simple Data from Other Apps

?

二). 處理你的Activity中的Intent

為了決定在你的Activity中決定要執(zhí)行什么行為,你可以讀取啟動(dòng)你的Activity的 Intent

當(dāng)你的activity啟動(dòng)后,調(diào)用 getIntent() 來獲取啟動(dòng)這個(gè)Activity的 Intent 。你可以在任意一個(gè)Activity的生命周期階段執(zhí)行這件事情,但一般你應(yīng)該在早期生命周期回調(diào)函數(shù)(如: onCreate() 或者 onStart() )中執(zhí)行。

例如:

      
        @Override


      
      
        protected
      
      
        void
      
      
         onCreate(Bundle savedInstanceState) {

    
      
      
        super
      
      
        .onCreate(savedInstanceState);



    setContentView(R.layout.main);



    
      
      
        //
      
      
         Get the intent that started this activity
      
      

    Intent intent =
      
         getIntent();

    Uri data 
      
      =
      
         intent.getData();



    
      
      
        //
      
      
         Figure out what to do based on the intent type
      
      
        if
      
       (intent.getType().indexOf("image/") != -1
      
        ) {

        
      
      
        //
      
      
         Handle intents with image data ...
      
      

    } 
      
        else
      
      
        if
      
       (intent.getType().equals("text/plain"
      
        )) {

        
      
      
        //
      
      
         Handle intents with text ...
      
      
            }

}
      
    

?

三). 返回一個(gè)結(jié)果

如果你希望給激活你的activity返回一個(gè)結(jié)果,調(diào)用 setResult() 來指定結(jié)果碼和結(jié)果Intent。當(dāng)你的操作執(zhí)行完畢,并且用戶要返回到原來的Activity中了,調(diào)用 finish() 來關(guān)閉(或者說銷毀)你的activity,例如:

      
        //
      
      
         Create intent to deliver some kind of result data
      
      

Intent result = 
      
        new
      
       Intent("com.example.RESULT_ACTION", Uri.parse("content://result_uri"
      
        );

setResult(Activity.RESULT_OK, result);

finish();
      
    

你必須為你的結(jié)果指定結(jié)果碼。通常,它不是 RESULT_OK 就是 RESULT_CANCELED 。必要時(shí),你可以提供一個(gè)包含有額外數(shù)據(jù)的 Intent

Note:

默認(rèn)結(jié)果碼設(shè)置為 RESULT_CANCELED 。所以當(dāng)用戶在執(zhí)行完行為,或在你將結(jié)果數(shù)據(jù)配置完畢之前,按下返回按鈕,原始的activity會(huì)收到“取消”的結(jié)果。

如果你只需要返回一個(gè)整數(shù),它代表了一些結(jié)果項(xiàng)中的一個(gè),那么你可以將結(jié)果碼設(shè)置為任何一個(gè)大于0的數(shù)。如果你使用結(jié)果碼來返回一個(gè)整數(shù),此時(shí)你不需要再傳遞一個(gè) Intent 。你可以調(diào)用 setResult() ,并且只傳遞一個(gè)結(jié)果碼,例如:

      
        setResult(RESULT_COLOR_RED);

finish();
      
    

在這個(gè)例子中,可能僅有少量的一些結(jié)果,所以結(jié)果碼是一個(gè)本地定義的整形(大于0)。這樣做在你給自己的應(yīng)用的某個(gè)activity返回一個(gè)結(jié)果時(shí),是沒有問題的,因?yàn)榻邮者@個(gè)結(jié)果的activity可以引用公有常量來明確結(jié)果碼的值。

Note:

不需要檢查你的activity是被 startActivity() 還是被 startActivityForResult() 所啟動(dòng)的。如果啟動(dòng)你的activity的intent需要返回一個(gè)值,僅需要調(diào)用 setResult() 。如果原始activity調(diào)用的是 startActivityForResult() ,那么系統(tǒng)將會(huì)發(fā)送給它你在 setResult() 中提供的數(shù)據(jù),不然的話,這個(gè)結(jié)果會(huì)被忽略。

【Android Developers Training】 30. 允許其它應(yīng)用啟動(dòng)你的Activity


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美久久xxxxxx影院 | 久久色网 | 日韩视频在线观看 | 免费小视频 | 欧美日韩国产综合视频在线看 | 91三级 | 久久精品欧美一区二区三区不卡 | 日本特黄特色大片免费视频 | 久久亚洲网 | 干天天| 偿还的影视高清在线观看 | 亚洲免费精品 | 蜜臀传煤mv在线观看 | 日本高清无卡码一区二区久久 | 中国一级特黄真人毛片免费看 | 精品亚洲综合在线第一区 | 欧美另类色图 | 97精品国产| 亚洲国产精品视频 | 成人午夜爽爽爽免费视频 | 久热免费在线视频 | 国产精品久久久久影院色老大 | 妹子干综合 | 国产亚洲99影院 | a黄视频 | 色图综合网 | 天天看天天摸色天天综合网 | 亚洲精品综合网 | 性夜影院爽黄e爽痛轻点www | 99久久精品国产一区二区三区 | 久久精品2 | 一级毛片看真人在线视频 | 天堂成人A片永久免费网站 奇米影视四色7777 | 久久草在线看 | 成人国产一区二区三区 | 尤物国产在线精品福利一区 | 91亚洲国产成人精品性色 | 国产 麻豆 | 精品国产一区二区三区成人 | 天天草天天干 | 日韩精品一区二区三区中文3d |