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

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

具體步驟如下:

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

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


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


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

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

ActivityA的配置

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

注意:

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

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

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

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

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


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

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


ActivityA


ActivityB

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

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

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

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

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

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