一個App實(shí)現(xiàn)多個icon作為entry point 2019-03-21

如何實(shí)現(xiàn)手機(jī)桌面上兩個圖標(biāo)作為entry point去啟動一個app不同activity

具體步驟如下:

1、新建一個工程(如app),這里android studio默認(rèn)會幫你創(chuàng)建一個mainActivity及其布局文件activity_main.xml。為了方便閱讀,我將MainActivity-->ActivityA,activity_main.xml-->activity_a.xml,將ActivityA中的TextView的內(nèi)容從Hello World! --> Activity_A。

2、然后新建一個ActivityB和布局文件activity_b.xml,并在activity_b.xml文件中創(chuàng)建一個TextView,顯示的內(nèi)容為Activity_B。


具體項(xiàng)目結(jié)構(gòu)


activity_a.xml布局及其效果
acitivity_b.xml布局及其效果

3、接下來,是整個demo的核心所在。當(dāng)我們創(chuàng)建一個app的時候,android studio會默認(rèn)幫我們創(chuàng)建出一個MainActivity,并將這個MainActivity設(shè)置成launch(加載) 這個app所默認(rèn)展示的activity。那么要如何設(shè)置一個activity為默認(rèn)展示的activity呢?我們打開項(xiàng)目的AndroidManifest.xml文件,可以發(fā)現(xiàn)默認(rèn)的MainActivity(已經(jīng)被我改成ActivityA)的配置如下:

ActivityA的配置

這里最核心的就是<action android:name="android.intent.action.Main"/>,這個action屬性決定了這個acitivty是main entry point,而<category android:name="android.intent.category.LAUNCHER"/>決定了是否在桌面中顯示出對應(yīng)的icon圖標(biāo)。

注意:

(1)當(dāng)你的app只有一個activity的時候,那么必須為這個acitivity配置這兩個屬性,缺少其中一個都會報(bào)錯。為何?
? ? 因?yàn)楣雀柙O(shè)計(jì)安卓系統(tǒng)就是為了讓更多的用戶用上安卓開發(fā)的app。并且,當(dāng)你的app是擁有acitivity的時候,系統(tǒng)會認(rèn)為你的acitivity就是為了展示給用戶的,不然你的activity毫無意義。既然為了展示給用戶,那么就要為其提供一個entry point?!?b>桌面圖標(biāo)式”entry point就是系統(tǒng)默認(rèn)的、最方便的entry point。所以系統(tǒng)一定要你為這個唯一的acitivity設(shè)置以下兩個屬性:因?yàn)橄到y(tǒng)是根據(jù)這兩個屬性來決定是否為這個app創(chuàng)建出“桌面圖標(biāo)式”的entry point的。
<action android:name="android.intent.action.Main"/><categoryandroid:name="android.intent.category.LAUNCHER"/>

(2)你可能會說,非要用這種方式嗎?我可以通過命令去啟動這個activity啊?
? ? 但是app面向的是大眾,不是單純面向開發(fā)者??赡馨l(fā)者都知道可以通過adb shell am start -n packageName\.activityName這種方式去啟動一個應(yīng)用,但是并不是每一個人都是開發(fā)者。所以從谷歌設(shè)計(jì)安卓系統(tǒng)的初衷出發(fā),"桌面圖標(biāo)式"就是一個app最合適,最容易讓用戶接受的entry point了

4、由于我們想要的是在桌面上,有兩個icon都作為一個app的main entry point,所以對應(yīng)的,我們只要將ActivityA和ActivityB都設(shè)置成main entry point就可以了。具體的是指就是在AndroidManifest.xml文件中對應(yīng)的<activity>節(jié)點(diǎn)進(jìn)行配置。如下圖:

將ActivityA和ActivityB都設(shè)置成"桌面圖標(biāo)式"的main entry point

5、接下來,在我們安裝這個app之后,就會在桌面上看到兩個icon圖標(biāo)了,這兩個都是進(jìn)入同一個app的,但是進(jìn)入的是不同的activity。


兩個桌面圖標(biāo)式的entry point

6、這個時候,當(dāng)我們首次點(diǎn)擊第一個圖標(biāo),系統(tǒng)會幫我們打開ActivityA;首次點(diǎn)擊第二個圖標(biāo),系統(tǒng)會幫我們打開ActivityB。具體如下圖:


ActivityA


ActivityB

注意:這里指的是你首次通過點(diǎn)擊不同的圖標(biāo)啟動這個app,系統(tǒng)才會對應(yīng)的加載這個icon圖標(biāo)所默認(rèn)的mainActivity。因?yàn)閷τ谙到y(tǒng)來說,點(diǎn)擊桌面上的應(yīng)用程序圖標(biāo),只是launch這個app。如果這個app已經(jīng)打開了,那么直接將這個app從后臺喚醒到前臺,保持這個app之前進(jìn)入后臺的所有狀態(tài)。所以不會再去加載icon圖標(biāo)對應(yīng)的mainActivity。所以,當(dāng)我們通過第一個icon進(jìn)入app,顯示的是ActivityA,然后在點(diǎn)擊第二個圖標(biāo),那么打開的還是ActivityA(實(shí)際上,這步操作只是將app從后臺喚醒到前臺,因?yàn)檫@個app的進(jìn)程還在,并沒有被kill掉)。如果你想直接進(jìn)入ActivityB,那么應(yīng)該先進(jìn)入后臺將這個app kill掉,然后點(diǎn)擊第二個圖標(biāo),這樣就能直接加載ActivityB了。

從系統(tǒng)設(shè)計(jì)的角度出發(fā),這樣是非常合理的。因?yàn)椴荒茏層脩敉ㄟ^桌面圖標(biāo)的entry point點(diǎn)擊進(jìn)入一個已經(jīng)在后臺的app時,直接回到默認(rèn)的第一個mainActivity。而是要恢復(fù)這個app上一次進(jìn)入后臺的所有狀態(tài)才是符合用戶預(yù)期的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 人生成就大業(yè)的三個通道 1改變?nèi)说纳姝h(huán)境 2改變?nèi)说纳罘绞?3改變?nèi)说纳顮顟B(tài) 普通人順者生,高手逆者活。
    鄒玉華閱讀 227評論 0 0
  • 他今天和我有默契,開始懂得說結(jié)束語了。 我知道自己也算是努力沒有白費(fèi),至少他有心有肺了,不至于那么不食人間煙火,真...
    換氧閱讀 142評論 0 0
  • 思念遠(yuǎn)方的你 但愿風(fēng)兒帶去我的氣息 讓你知道知道此刻我的內(nèi)心 只為你心動 愿你我天涯共走 堅(jiān)持走完最難的異地戀 最...
    麻天喜閱讀 183評論 0 2

友情鏈接更多精彩內(nèi)容