1 通過禁用組件和啟用組件更換
1.1 配置Activity
<activity
android:name=".tztCommHeadPageActivity"
android:configChanges="orientation|keyboardHidden|fontScale|screenSize"
android:label="@string/tzt_app_name"
android:screenOrientation="portrait"
android:theme="@style/tzt_HeadPage_Theme.White">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
1.2 配置多個icon
Android可以配置多個activity-alias標(biāo)簽 來為指定activity設(shè)置多個引用
targetActivity指定點擊圖標(biāo)后響應(yīng)的Activity鸠窗, name屬性為activity-alias唯一標(biāo)識橘茉,java代碼中通過該參數(shù)獲得該activity引用
<activity
android:name=".activity.SplashActivity"
android:hardwareAccelerated="true"
android:screenOrientation="portrait"
android:theme="@style/AppThemeTransparentBackground">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
<activity-alias
android:name=".activity.Test11"
android:enabled="true"
android:icon="@drawable/ic_au"
android:label="雙11"
android:targetActivity=".activity.SplashActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity-alias>
1.3 changeIcon
利用PackageManager.setComponentEnabledSetting
/**
* 啟用組件 *
* @param componentName
* 重要方法
*/
private void enableComponent(Activity activity, ComponentName componentName) {
PackageManager pm = activity.getPackageManager();
int state = pm.getComponentEnabledSetting(componentName);
if (PackageManager.COMPONENT_ENABLED_STATE_ENABLED == state) {
//已經(jīng)啟用
return;
}
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
/**
* 禁用組件 *
* @param componentName
* 重要方法
*/
private void disableComponent(Activity activity, ComponentName componentName) {
PackageManager pm = activity.getPackageManager();
int state = pm.getComponentEnabledSetting(componentName);
if (PackageManager.COMPONENT_ENABLED_STATE_DISABLED == state) {
//已經(jīng)禁用
return;
}
pm.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
然后調(diào)用方法就可以了
private void initLauncherIcon() {
ComponentName mDefault =getComponentName();
ComponentName mEday11 = new ComponentName(
getBaseContext(),
"com.xx.xx.activity.Test11");
ComponentName mEday65 = new ComponentName(
getBaseContext(),
"com.xx.xx.activity.Test65");
mPm = getApplicationContext().getPackageManager();
changeIcon65(mDefault, mEday65);
}
public void changeIcon65(ComponentName disable, ComponentName enable) {
disableComponent(disable);
enableComponent(enable);
}
注意:
- PackageManager.DONT_KILL_APP 不會立即殺死進(jìn)程窗怒,所以替換時會等待幾秒鐘才會生效诵盼。
-
pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,0);
這里參數(shù)傳0,可以立即殺死進(jìn)程辽故,并及時更換icon(一般我們使用這個方式)
2 隱藏app圖標(biāo)以及隱式啟動
2.1 隱藏APP桌面圖標(biāo)
在啟動的activity的AndroidManifest注冊中徒仓,添加隱式啟動的data:
<data android:host="TestActivity" android:scheme="cn.fly2think.activity" />
在入口Activity處添加申明
<data android:host="TestActivity" android:scheme="cn.fly2think.activity"
tools:ignore="AppLinkUrlError" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="cn.fly2think.activity.TestActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<data android:host="TestActivity" android:scheme="cn.fly2think.activity"
tools:ignore="AppLinkUrlError" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
1.2 通過另一個APP隱式啟動
public void starAct() {
Intent intent = new Intent();
ComponentName cn = new ComponentName("com.fly2think.yiilock",
"cn.fly2think.activity.TestActivity");
intent.setComponent(cn);
Uri uri = Uri.parse("cn.fly2think.activity.TestActivity");
intent.setData(uri);
startActivity(intent);
}