• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            life02

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              197 隨筆 :: 3 文章 :: 37 評(píng)論 :: 0 Trackbacks
            http://blog.csdn.net/louiswangbing/article/details/6607612

            Intent妙用之編寫(xiě)自己的android主界面

            眾所周知,android的主界面名為 laucher2,功能強(qiáng)大,會(huì)在android啟動(dòng)之后運(yùn)行,也是所有其他應(yīng)用程序的入口程序。那么,如何讓自己的應(yīng)用程序取代laucher2的位 置,成為android系統(tǒng)的主界面呢?其實(shí)說(shuō)出來(lái)很簡(jiǎn)單,接下來(lái),我就來(lái)為大家揭開(kāi)這其中的神秘面紗。

            首先,我們來(lái)看看一個(gè)普通的應(yīng)用程序的intent聲明:

            1. <intent-filter>  
            2.              <action android:name="android.intent.action.MAIN" />  
            3.              <category android:name="android.intent.category.LAUNCHER" />  
            4.          </intent-filter>  
            是不是看著很眼熟呢?沒(méi)錯(cuò)了,這段代碼是在AndroidManifest.xml中相應(yīng)activity的intent聲明,相信大家目前縮寫(xiě)的應(yīng)用程序的intent聲明無(wú)一例外都是這樣的吧??赡芎芏嗳硕紩?huì)對(duì)著兩行代碼有下面的理解:

            第二行<action android:name="android.intent.action.MAIN" />表示這個(gè)activity是當(dāng)前應(yīng)用程序的主activity,而第二行表示當(dāng)前activity在lancher中加載。

            這么理解的卻是沒(méi)錯(cuò),但事實(shí)上,有更加簡(jiǎn)單的理解方式。這里請(qǐng)容許我先賣(mài)個(gè)關(guān)子。我們繼續(xù)往下看。

            既然是想讓我們自己的應(yīng)用程序取代laucher的位置,那么我們就來(lái)看一下lancher的intent聲明是怎么樣的吧:

            1. <intent-filter>  
            2.         <action android:name="android.intent.action.MAIN" />  
            3.         <category android:name="android.intent.category.HOME"/>  
            4.         <category android:name="android.intent.category.DEFAULT" />  
            5.         <category android:name="android.intent.category.MONKEY" />  
            6.     </intent-filter> 
            當(dāng) 然,想要看到這段代碼,你必須要有l(wèi)aucher的源代碼。(關(guān)于android源代碼的問(wèn)題,前面的文章已經(jīng)提到過(guò)很多次了,有源代碼真的是件很好的事 情,不管是對(duì)應(yīng)用程序開(kāi)發(fā)者來(lái)說(shuō)還是對(duì)底層開(kāi)發(fā)者來(lái)說(shuō)亦或是對(duì)android愛(ài)好者來(lái)說(shuō),都會(huì)受益匪淺的,所以這里再次建議大家不要僅僅局限于 android sdk和avd的使用來(lái)進(jìn)行應(yīng)用程序的開(kāi)發(fā),不管你有沒(méi)有時(shí)間,下份源代碼總是沒(méi)有壞處的。)

            大家看出這兩個(gè)intent聲明之間的差別了嗎?沒(méi)錯(cuò),當(dāng)出現(xiàn)  <category android:name="android.intent.category.HOME"/>  的時(shí)候,我們的應(yīng)用程序就會(huì)變成跟lancher具有相同功能的(當(dāng)然,我指的僅僅是主界面,laucher的功能是在是太強(qiáng)大了),成為 android系統(tǒng)的主界面,并且,當(dāng)我們按下Home鍵的時(shí)候,會(huì)出現(xiàn)一個(gè)選擇界面,是不是發(fā)現(xiàn)你的應(yīng)用程序和laucher同時(shí)出現(xiàn)在了選擇框中呢? 如果是,那么恭喜你,從功能上來(lái)說(shuō),你已經(jīng)實(shí)現(xiàn)了。如果沒(méi)有看到,請(qǐng)email我louiswangbing@gmail.com。

            但是,所謂一山不容二虎,同時(shí)有兩個(gè)主界面存在當(dāng)然不是我們想要的。

            如 果你有android源代碼的話,你甚至可以把laucher刪掉,直接將你自己的應(yīng)用程序編譯到android系統(tǒng)中,這樣,系統(tǒng)啟動(dòng)的時(shí)候就會(huì)直接運(yùn) 行你的應(yīng)用程序,而你的應(yīng)用程序就會(huì)堂而皇之地鳩占鵲巢,順理成章的成為系統(tǒng)的主界面,并且當(dāng)你按下Home鍵的時(shí)候,就會(huì)跳到你的應(yīng)用程序的主 activity了?。?/span>

            如果你只是一個(gè)功能上的追求者,那么看到這里你就可以關(guān)掉這個(gè)頁(yè)面去試試上面的功能了。

            如果你是一個(gè)好奇心比較強(qiáng)的人,那么請(qǐng)跟著我繼續(xù)往下看。

            剛才我說(shuō)過(guò),intent聲明的理解問(wèn)題。事實(shí)上,你可以有更好的理解方式,當(dāng)然,這要建立在你對(duì)android系統(tǒng)的啟動(dòng)進(jìn)程有一定的了解的基礎(chǔ)上。

            簡(jiǎn) 單來(lái)說(shuō),intent其實(shí)就是一個(gè)條件過(guò)濾器,activity的intent聲明的每一條都可以作為一個(gè)過(guò)濾條件,條目越多,過(guò)濾條件也就越強(qiáng),定位起 來(lái)也就越容易。相信這個(gè)原理學(xué)過(guò)數(shù)據(jù)庫(kù)的朋友理解起來(lái)更加容易。你可以將整個(gè)android系統(tǒng)中所有的activity都集中起來(lái)當(dāng)成是一個(gè)數(shù)據(jù)庫(kù),而 intent本身就是一條select語(yǔ)句,其中每一項(xiàng)聲明都是一項(xiàng)過(guò)濾條件,而過(guò)濾之后剩下的,就是將要被調(diào)用的activity。當(dāng)過(guò)濾條件足夠強(qiáng)大 或者過(guò)濾條件比較特殊的時(shí)候,最后剩下的只有一個(gè)activity,那么系統(tǒng)會(huì)毫不猶豫地啟動(dòng)它;當(dāng)過(guò)濾條件不足導(dǎo)致過(guò)濾之后還剩下比較多的 activity的時(shí)候,系統(tǒng)會(huì)將滿足這些條件的所有的activity用一個(gè)listview列出來(lái)讓你選擇。

            相信原理大家都已經(jīng)很清楚了,那么上面所述的這個(gè)功能就很好理解了。沒(méi)錯(cuò),android在啟動(dòng)的時(shí)候會(huì)有一個(gè)PackageManager選擇系統(tǒng)中滿足過(guò)濾條件:

            1. <action android:name="android.intent.action.MAIN" />  
            2.         <category android:name="android.intent.category.HOME"/>  
            3.         <category android:name="android.intent.category.DEFAULT" />  
            4.         <category android:name="android.intent.category.MONKEY" />  
            的 activity作為系統(tǒng)啟動(dòng)的第一個(gè)activity,也就是主界面,任何一個(gè)滿足這個(gè)過(guò)濾條件的activity都將進(jìn)入候選名單,如果候選名單中僅 有一人,那么很榮幸,不戰(zhàn)而勝,你就是系統(tǒng)的主界面了;如果候選名單中有多個(gè)人(比如剛才說(shuō)的有l(wèi)aucher和你自己的應(yīng)用程序),那么就進(jìn)入殘酷的” 民意選舉“,也就是用戶自己的選擇,你選誰(shuí)系統(tǒng)就會(huì)啟動(dòng)誰(shuí)。但和民意選舉不同的是,選舉出來(lái)的結(jié)果通常會(huì)有一定的任期,而這個(gè)主界面的選舉任期非常的短, 每當(dāng)你按下一次Home鍵或者重啟一下系統(tǒng),系統(tǒng)就會(huì)重新安排一次”民意選舉“。如果想要永遠(yuǎn)的成為主界面,那么唯一的辦法就是--沒(méi)錯(cuò),雖然很殘酷,但 不得不說(shuō)--就是,干掉它......或者和諧一點(diǎn),你可以讓它活著,但是也必須將它貶為庶民或者是將其發(fā)配邊疆,具體的實(shí)施手段就是--改掉它的 intent聲明,使其不滿足主界面的這個(gè)過(guò)濾條件。

            在 整個(gè)intent妙用章節(jié)中,這一章算是比較特殊的,因?yàn)殡m然所有的章節(jié)運(yùn)用的原理基本相通,也就是我上面說(shuō)到的原理,但是后續(xù)章節(jié)的intent過(guò)濾條 件都是可以由用戶自己定義、手動(dòng)修改的,而唯獨(dú)只有這個(gè)是不能改的,你只能決定去適應(yīng)或者不適應(yīng)這個(gè)過(guò)濾條件,而不能去改變這個(gè)過(guò)濾條件,就像你只能去適 應(yīng)這個(gè)社會(huì),卻很難改變它--或許不是不能,而是暫時(shí)還能找到途徑......

            有時(shí)候真的,生活跟計(jì)算機(jī),居然有如此之多的相似之處......


            posted on 2011-12-07 23:26 life02 閱讀(379) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): android組件學(xué)習(xí)
            99久久er这里只有精品18| 精品国产乱码久久久久软件| 久久人人爽人人爽人人AV东京热| 久久午夜福利无码1000合集| 久久久久高潮毛片免费全部播放| 日韩精品久久久久久| 久久天天躁狠狠躁夜夜不卡| 人妻无码精品久久亚瑟影视| 国产91久久精品一区二区| 久久亚洲天堂| 久久国产精品-国产精品| 亚洲美日韩Av中文字幕无码久久久妻妇| 精品一区二区久久久久久久网站| 99久久精品久久久久久清纯| 精品久久久中文字幕人妻| 2021国产成人精品久久| 久久婷婷五月综合国产尤物app| 亚洲一区中文字幕久久| 亚洲国产精品无码久久| 亚洲国产精品成人AV无码久久综合影院| 久久人人妻人人爽人人爽| 久久九九免费高清视频| 成人综合伊人五月婷久久| 亚洲人AV永久一区二区三区久久| 久久久国产精品网站| 久久人人爽人人爽人人AV东京热| 色欲综合久久躁天天躁| 国产午夜电影久久| 久久综合九色综合久99| 国产产无码乱码精品久久鸭 | 一级做a爱片久久毛片| 伊人久久大香线蕉亚洲| 久久久久久久久久久| 久久久久久精品久久久久| 99精品国产免费久久久久久下载 | 久久婷婷五月综合97色直播| 久久精品嫩草影院| 久久亚洲国产欧洲精品一| 久久九九有精品国产23百花影院| 久久久av波多野一区二区| 久久国产精品77777|