Android應用設定多個啟動圖示,動態列換應用圖示
1. 如何給一個應用設定多個入口,在launcher桌面上存在多個啟動圖示?
我們知道,設定一個應用的入口Activity,只需要在AndroidMainfest.xml檔案中,在註冊activity的節點下新增intent-filter,並設定action屬性為acion.MAIN, category屬性為category.LAUNCHER,應用就會將此activity作為應用程式的入口。
<activity android:name=".TestInputActivity"
android:windowSoftInputMode="adjustResize"
android:icon="@mipmap/f_homepage_affari_notice_icon"
android:label="TestInputActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
這樣該Activity就為應用程式的入口Activity,點選應用圖示首次進入的介面。
在該activity標籤下可以設定android:icon作為應用的圖示, 設定android:label作為應用名稱,如果沒有設定啟動Activity的icon和label屬性,會預設使用application節點下icon和label屬性中設定的應用圖示和應用名稱。
如果一個應用設定多個Activity的intent-filter屬性下的action為action.MAIN, category屬性為category.LAUNCHER,則應用就會在launcher的生成多個應用圖示,每個應用名稱分別是我們在activity標籤下定義的Activity的android:label的值。
使用場景:我們的Android手機一般在launcher上存在聯絡人應用圖示、撥號應用圖示,其實這兩個應用圖示對應的是同一個應用,只是設定了兩個入口,進入不同的Tab頁面。
2. 如何動態給應用更換圖示
比如我們過春節時,會發現微博或是淘寶等應用會更換應用圖示,如何在應用不重新發包的情況下,對應用圖示進行更換呢?
我們可以通過以下兩種方法來實現,其實原理是類似的。
2.1 方法一:根據開啟或關閉元件進行更換應用圖示
我們可以事先在AndroidMainfest.xml檔案中定義多個應用的入口元件(啟動圖示),在程式碼執行時控制元件的顯示與隱藏,從而達到更換應用圖示目的。由於在每年春節或是雙11時,一些商家可能需要列換應用圖示,我們可以在程式中通過時間來控制應用圖示更換目的。那如何控制元件的顯示與隱藏呢。
在講解更換應用圖示之前,我們先來了解下Android中如何禁用一個元件。
2.1.1 如何關閉一個元件?
(1)關閉元件的使用場景
在用到元件時,有時候我們可能暫時性的不使用元件,但又不想把元件kill掉,比如建立了一個broadcastReceiver廣播監聽器,用來監聽第一次開機啟動後獲得系統的許多相關資訊,並儲存在檔案中,這樣以後每次開機啟動就不需要再去啟動該服務了,也就是說如果沒有把receiver關閉掉,就算是不做資料處理,但程式卻還一直在後臺執行會消耗電量和記憶體,這時候就需要把這個receiver給關閉掉。
(2)如何關閉元件?
關閉元件其實並不難,只要建立packageManager物件和ComponentName物件,並呼叫packageManager物件的setComponentEnabledSetting方法。
public void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
componentName:元件名稱
newState:元件新的狀態,可以設定三個值,分別是如下:
- 不可用狀態:COMPONENT_ENABLED_STATE_DISABLED
- 可用狀態:COMPONENT_ENABLED_STATE_ENABLED
- 預設狀態:COMPONENT_ENABLED_STATE_DEFAULT
flags:行為標籤,值可以是DONT_KILL_APP或者0。 0說明殺死包含該元件的app
public int getComponentEnabledSetting(ComponentName componentName)//獲取元件的狀態
- 1
2.1.2 通過關閉元件或是開啟元件來達到應用圖示列換目的
通過下面的方法,通過設定元件的狀態,我們可以達到隱藏或是顯示一個應用圖示,從而達到更換應用圖示的目的。
private void hideTest2() {
PackageManager packageManager = getPackageManager();
ComponentName componentName = new ComponentName(this, Test2Activtiy.class);
int res = packageManager.getComponentEnabledSetting(componentName);
if (res == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
|| res == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
// 隱藏應用圖示
packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
} else {
// 顯示應用圖示
packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
PackageManager.DONT_KILL_APP);
}
}
2.2 方法二:根據activity-alias來設定桌面可以存在多個icon,再設定某個activity-alias顯示其他隱藏
2.2.1 在xml新增多個activity-alias、刪除應用首次進入activity標籤的category屬性
<activity-alias
android:name=".icon_tag"
android:enabled="true"
android:icon="your icon"
android:label="your label"
android:targetActivity=".activity.WeChatLoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".icon_tag_1212"
android:enabled="false"
android:icon="your icon"
android:label="your label"
android:targetActivity=".activity.WeChatLoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
2.2.2 在程式碼中控制活動和普通圖示的切換
/**
* @param useCode =1、為活動圖示 =2 為用普通圖示 =3、不啟用判斷
*/
private void switchIcon(int useCode) {
try {
//要跟manifest的activity-alias 的name保持一致
String icon_tag = "com.weechan.shidexianapp.icon_tag";
String icon_tag_1212 = "com.weechan.shidexianapp.icon_tag_1212";
if (useCode != 3) {
PackageManager pm = getPackageManager();
ComponentName normalComponentName = new ComponentName(
getBaseContext(),
icon_tag);
//正常圖示新狀態
int normalNewState = useCode == 2 ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
if (pm.getComponentEnabledSetting(normalComponentName) != normalNewState) {//新狀態跟當前狀態不一樣才執行
pm.setComponentEnabledSetting(
normalComponentName,
normalNewState,
PackageManager.DONT_KILL_APP);
}
ComponentName actComponentName = new ComponentName(
getBaseContext(),
icon_tag_1212);
//正常圖示新狀態
int actNewState = useCode == 1 ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
if (pm.getComponentEnabledSetting(actComponentName) != actNewState) {//新狀態跟當前狀態不一樣才執行
pm.setComponentEnabledSetting(
actComponentName,
actNewState,
PackageManager.DONT_KILL_APP);
}
}
} catch (Exception e) {
}
}
**總結:給應用設定多個啟動圖示,並不是什麼難的知識點,但我們們平時都沒有關注過,有時覺得還有點不可思議,不自覺想起毛主席的那句話“一切困難都是紙老虎”,哈哈。
還有如何關閉一個元件,通過packageManager物件的setComponentEnabledSetting方法設定ComponentStatus狀態即可,通過它就可以動態更換應用圖示。
當然以下兩種方法都需要我們們先預先在應用的AndroidMainfest.xml中設定好相應的標籤,設定啟動模式,設定相應的圖示。如果想要應用動態換成任意圖示,則還是需要升級應用。
相關文章
- Android動態更換應用圖示Android
- Jenkins實戰之動態替換Android應用圖示JenkinsAndroid
- Flutter 動態更改應用程式啟動圖示Flutter
- Android動態修改應用圖示和名稱Android
- 【Qt開發】更改應用程式圖示和工作列圖示QT
- win10如何修改應用圖示_win10怎麼更換應用圖示Win10
- Gradle多渠道打包(動態設定App名稱,應用圖示,替換常量,更改包名,變更渠道)GradleAPP
- 【iOS】動態更換圖示iOS
- macOS Big Sur應用圖示替換教程︳big sur圖示包Mac
- 字型圖示的應用
- 替換macOS Big Sur 應用圖示的教程Mac
- iOS-設定AppIcon圖示和啟動頁iOSAPP
- 開放世界地圖設計的秘訣:圖示的多維應用地圖
- Win10工作列不顯示應用圖示怎麼辦 應用已經在執行但不顯示Win10
- Android 應用啟動流程Android
- 遊戲圖示的設計跟其它應用的圖示設計有何不同?遊戲
- 微軟 Win11 Dev 預覽版 25188 設定應用迎來全新圖示動畫微軟dev動畫
- Android 8.0 自適應圖示Android
- Android 12(S) 圖形顯示系統 - 示例應用(二)Android
- IOS基礎-APP圖示、啟動頁、名字的設定iOSAPP
- Android應用啟動流程分析Android
- GNOME 3.28 啟用桌面圖示
- Bartender for Mac(選單欄應用圖示管理)Mac
- Bartender 4 for Mac 應用圖示管理軟體Mac
- Android App應用啟動流程(一)AndroidAPP
- qt 桌面圖示 應用透過logo.rc 設定了icon,但是桌面圖示放大後出現白色透明框並且圖示也變小了QTGo
- win10的應用軟體不能啟動了點選沒反應圖示變灰怎麼辦Win10
- 使用docker compose一鍵啟動多個應用Docker
- Android的標題欄,狀態列圖示文字顏色及背景動態變化Android
- 簡單的 Selenium 爬蟲應用及定時桌面提示圖示爬蟲
- iOS 圖示&啟動圖生成器(一)iOS
- iOS 圖示&啟動圖生成器(二)iOS
- AE製作livephoto動態圖示
- Mac應用圖示管理軟體——Bartender 4 for MacMac
- AndroidStudio製作歡迎介面與應用圖示Android
- Bartender 4 for Mac(選單欄應用圖示管理)Mac
- Android原始碼(二)應用程式啟動Android原始碼
- 設定Android程式圖示和程式標題Android
- 圖表外掛Highcharts的動態化賦值,實現圖表資料的動態化設定顯示賦值