<activity android:name=".AdvertisementActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity-alias
android:name=".default"
android:targetActivity=".AdvertisementActivity"
android:enabled="true"
android:icon="@mipmap/ic_launcher">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".double11"
android:enabled="false"
android:icon="@mipmap/liu"
android:targetActivity=".AdvertisementActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".double12"
android:enabled="false"
android:icon="@mipmap/time"
android:targetActivity=".AdvertisementActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
首先是你的Manifest, 我们使用activity-alias 来定义入口别名,这里只需要注意android:icon, android:enabled, android:name, android:targetActivity,这四个属性,分别是图标,是否激活入口, 名字, 目标Activity(也就是你要设置别名的Activity)
这里要注意,你原来的入口Activity要做修改把category属性去掉,并设置一个默认别名,将android:enabled设置成true,就是我代码中标红的地方。如果不设置的话会接下来会用问题。
public class AdvertisementActivity extends AppCompatActivity{
private ComponentName mDefault;
private ComponentName mDouble11;
private ComponentName mDouble12;
private PackageManager packageManager;
@Override
public void onCreate(Bundle saveInstanceBundle){
super.onCreate(saveInstanceBundle);
setContentView(R.layout.advertisement_activity);
//动态更换图标
mDefault = getComponentName();
mDouble12 = new ComponentName(getBaseContext(), "com.xxxxx.double12")//全限定包名;
mDouble11 = new ComponentName(getBaseContext(), "com.xxxxxx.double11");
packageManager = getApplicationContext().getPackageManager();
changeIcon12();
}
public void changeIcon12(){
disableComponent(mDefault);
disableComponent(mDouble11);
enableConponent(mDouble12);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addCategory(Intent.CATEGORY_DEFAULT);
List<ResolveInfo> resolves = packageManager.queryIntentActivities(intent, 0);
for (ResolveInfo res : resolves) {
if (res.activityInfo != null) {
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses(res.activityInfo.packageName);
}
}
}
private void enableConponent(ComponentName componentName){
packageManager.setComponentEnabledSetting(componentName
, PackageManager.COMPONENT_ENABLED_STATE_ENABLED
, PackageManager.DONT_KILL_APP);
}
private void disableComponent(ComponentName componentName){
packageManager.setComponentEnabledSetting(componentName
, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}
通过PackageManager来设置关闭或打开那个入口,注意我标红的地方。若你的APP自动关闭了,请看一下你的Manifest文件是否设置了默认别名,还有是否入口Activity的
<category android:name="android.intent.category.LAUNCHER" />
\
是否去掉了
\
\