Android App動(dòng)態(tài)顯示多個(gè)入口

經(jīng)潮似蓿看到有App提供多個(gè)入口,就是桌面上顯示有多種圖標(biāo)豆茫,點(diǎn)不同圖標(biāo)進(jìn)入不同的功能頁(yè)侨歉。
基本實(shí)現(xiàn)很簡(jiǎn)單,以下是步驟揩魂。

1. AndroidManifest.xml里注冊(cè)別名幽邓。

<application>里添加<activity-alias>

        <activity-alias
            android:name=".test"
            android:enabled="false"
            android:icon="@drawable/applogo"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:clearTaskOnLaunch="true"
            android:targetActivity=".splashActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity-alias>

run一下你就會(huì)發(fā)現(xiàn)桌面存在兩個(gè)app的圖標(biāo)了,也就是存在兩個(gè)入口了火脉。

說(shuō)明一下:
android:name參數(shù)就是這個(gè)入口的名稱牵舵。
android:enabled打開(kāi)和關(guān)閉的參數(shù)。
android:icon入口顯示的圖標(biāo)倦挂,這樣就可以給不同的入口設(shè)置不同的圖標(biāo)了畸颅。
android:label就是桌面上顯示的名稱。
android:targetActivity是重點(diǎn)方援,就是你點(diǎn)擊了不同的入口會(huì)選擇進(jìn)入的頁(yè)面没炒。通過(guò)這個(gè)就能設(shè)置不同入口的不同功能了。
搞定犯戏,So easy送火!
不要滿足拳话,我們拓展一下。

2.動(dòng)態(tài)更新入口种吸。

剛才我們?cè)O(shè)置了android:name,通過(guò)名稱弃衍,我們就可以使用PackageManager對(duì)他進(jìn)行操作了。
假設(shè)我們有個(gè)主要的LAUNCHER坚俗。(像這樣我們把名叫splashActivity的頁(yè)面設(shè)置為了LAUNCHER):

<activity
            android:name=".splashActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@style/FirstTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

以及一個(gè)上面這樣的activity-alias笨鸡,名字叫test
我們通過(guò)PackageManagersetComponentEnabledSetting方法就可以關(guān)閉和打開(kāi)入口:

    private ComponentName mDefault = getComponentName();
    private ComponentName mDoubleSpring = new ComponentName(getBaseContext(),"com.boosj.boosjapp.test");
    private PackageManager mPm = getApplicationContext().getPackageManager();

    disableComponent(mDefault);
    enableComponent(mDoubleSpring);
    
    private void enableComponent(ComponentName componentName) {
        mPm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);
    }

    private void disableComponent(ComponentName componentName) {
        mPm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP);
    }

這個(gè)例子中就關(guān)閉了主入口坦冠,僅僅保留了test入口形耗。執(zhí)行后查看桌面就會(huì)發(fā)現(xiàn)只剩下test的入口圖標(biāo)了。

當(dāng)然辙浑,也可以給他加上條件激涤,實(shí)現(xiàn)動(dòng)態(tài)自動(dòng)更新。

    private ComponentName mDefault = getComponentName();
    private ComponentName mDoubleSpring = new ComponentName(getBaseContext(),"com.boosj.boosjapp.test");
    private PackageManager mPm = getApplicationContext().getPackageManager();

        /**
         * 計(jì)算是否在日期范圍內(nèi)
         */
        try {
            Date date = new Date();
            Log.d("LOGCAT",mathFactory.Date2ms("2018-03-01 00:00:00")+"_"+date.getTime());
            if (mathFactory.Date2ms("2018-03-01 00:00:00")>date.getTime()) {
                disableComponent(mDefault);
                enableComponent(mDoubleSpring);
            }else {
                enableComponent(mDefault);
                disableComponent(mDoubleSpring);
            }
        }catch (Exception e){
            enableComponent(mDefault);
            disableComponent(mDoubleSpring);
        }

    private void enableComponent(ComponentName componentName) {
        mPm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);
    }

    private void disableComponent(ComponentName componentName) {
        mPm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP);
    }

這個(gè)例子中判呕,實(shí)現(xiàn)了2018.3.1日前桌面會(huì)顯示activity-alias的圖標(biāo)倦踢,而原來(lái)的主要圖標(biāo)被隱藏了。等到2018.3.1過(guò)完侠草,圖標(biāo)又回復(fù)原樣辱挥。

3.一個(gè)小問(wèn)題。

這個(gè)方法有個(gè)問(wèn)題边涕,就是在主LAUNCHERdisable期間晤碘,如果要更新App,安裝完畢并啟動(dòng)時(shí)就會(huì)報(bào)找不到LAUNCHER文件的錯(cuò)誤而使App崩潰功蜓。而不讓更新或者讓先卸載再重新安裝顯然是很智障的园爷。所以那種只顯示一個(gè)圖標(biāo),按條件動(dòng)態(tài)更新的需求式撼,用此方法是恐怕不能做到了童社。
(或者有什么更好的主意,歡迎探討著隆。)


這個(gè)方法其實(shí)本來(lái)是想做App圖標(biāo)的動(dòng)態(tài)更新的扰楼。(然而最終失敗了,具體原因就是上面說(shuō)的崩潰問(wèn)題美浦。)
還是把他作為多入口的方法記錄一下吧弦赖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抵代,隨后出現(xiàn)的幾起案子腾节,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件案腺,死亡現(xiàn)場(chǎng)離奇詭異庆冕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)劈榨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)访递,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人同辣,你說(shuō)我怎么就攤上這事拷姿。” “怎么了旱函?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵响巢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我棒妨,道長(zhǎng)踪古,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任券腔,我火速辦了婚禮伏穆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纷纫。我一直安慰自己枕扫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布辱魁。 她就那樣靜靜地躺著烟瞧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪商叹。 梳的紋絲不亂的頭發(fā)上燕刻,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音剖笙,去河邊找鬼。 笑死请唱,一個(gè)胖子當(dāng)著我的面吹牛弥咪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播十绑,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼聚至,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了本橙?” 一聲冷哼從身側(cè)響起扳躬,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后贷币,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體击胜,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年役纹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偶摔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡促脉,死狀恐怖辰斋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘸味,我是刑警寧澤宫仗,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站旁仿,受9級(jí)特大地震影響锰什,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丁逝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一汁胆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霜幼,春花似錦嫩码、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至琢感,卻和暖如春丢间,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驹针。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工烘挫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柬甥。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓饮六,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親苛蒲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卤橄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355