您好,登錄后才能下訂單哦!
經(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>
說(shuō)明一下:
android:name 參數(shù)就是這個(gè)入口的名稱。
android:enabled 打開和關(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è)置了``````,通過(guò)名稱,我們就可以使用 PackageManager 對(duì)他進(jìn)行操作了。
假設(shè)我們有個(gè)主要的 LAUNCHER ,像這樣名叫 splashActivity :
<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
我們通過(guò) PackageManager 的 setComponentEnabledSetting 方法就可以關(guān)閉和打開入口:
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)題,就是在主 LAUNCHER disable后,如果要更新,就會(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)題。)
還是把他作為多入口的方法記錄一下吧。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。