国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android App多個入口的實現方法

2019-10-22 18:15:32
字體:
來源:轉載
供稿:網友

經常看到有App提供多個入口,就是桌面上顯示有多種圖標,點不同圖標進入不同的功能頁。

基本實現很簡單,以下是步驟。

1. AndroidManifest.xml里注冊別名。

在 <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>

說明一下:

android:name 參數就是這個入口的名稱。

android:enabled 打開和關閉的參數。

android:icon 入口顯示的圖標,這樣就可以給不同的入口設置不同的圖標了。

android:label 就是桌面上顯示的名稱。

android:targetActivity 是重點,就是你點擊了不同的入口會選擇進入的頁面。通過這個就能設置不同入口的不同功能了。

搞定,So easy!。

不要急,我們拓展一下。

2.動態更新入口。

剛才我們設置了``````,通過名稱,我們就可以使用 PackageManager 對他進行操作了。

假設我們有個主要的 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>

以及一個上面這樣的 activity-alias

我們通過 PackageManager 的 setComponentEnabledSetting 方法就可以關閉和打開入口:

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); }

這個例子中就關閉了主入口,僅僅保留了test入口。執行后查看桌面就會發現只剩下test的入口圖標了。

當然,也可以給他加上條件,實現動態自動更新。

private ComponentName mDefault = getComponentName(); private ComponentName mDoubleSpring = new ComponentName(getBaseContext(),"com.boosj.boosjapp.test"); private PackageManager mPm = getApplicationContext().getPackageManager();  /**   * 計算是否在日期范圍內   */  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); }

這個例子中,實現了2018.3.1日前桌面會顯示 activity-alias 的圖標,而原來的主要圖標被隱藏了。等到2018.3.1過完,圖標又回復原樣,

3.一個小問題。

這個方法有個問題,就是在主 LAUNCHER disable后,如果要更新,就會報找不到 LAUNCHER 文件的錯誤而使App崩潰。而不讓更新顯然是不可能的。所以那種只顯示一個圖標,按條件動態更新的需求,用此方法是恐怕不能做到了。

(或者有什么更好的主意,歡迎探討。)

這個方法其實本來是想做App圖標的動態更新的。(然而最終失敗了,具體原因就是上面說的崩潰問題。)

還是把他作為多入口的方法記錄一下吧。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南澳县| 虞城县| 大名县| 鄂托克旗| 东乌| 蒙自县| 顺平县| 海宁市| 临桂县| 梅河口市| 江北区| 静海县| 德昌县| 岳西县| 民丰县| 即墨市| 青田县| 黄浦区| 江川县| 无极县| 福海县| 三都| 建平县| 锡林郭勒盟| 互助| 江口县| 淮阳县| 齐齐哈尔市| 宁化县| 定结县| 宁津县| 怀柔区| 高州市| 通榆县| 邵武市| 思茅市| 汉川市| 连江县| 西城区| 楚雄市| 法库县|