假设启动 activity
名称为 com.xx.MainActivity
, activity-alias
名称为 com.xx.MainActivityAlias
AndroidManifest.xml
配置
<manifest>
<!-- 其他代码省略 -->
<application>
<activity
android:name="com.xx.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="de.robv.android.xposed.category.MODULE_SETTINGS" />
</intent-filter>
</activity>
<activity-alias
android:name="com.xx.MainActivityAlias"
android:exported="true"
android:targetActivity="com.xx.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
</application>
</manifest>
代码
private static final String ALIAS_ACTIVITY_NAME = "com.xx.MainActivityAlias";
/**
* 判断有没有隐藏
* @return
*/
boolean isLauncherIconVisible() {
ComponentName component = new ComponentName(this, ALIAS_ACTIVITY_NAME);
PackageManager manager = getPackageManager();
Intent intent = new Intent().setComponent(component);
List<ResolveInfo> list;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
list = manager.queryIntentActivities(intent, PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY));
} else {
list = manager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
}
return list != null && !list.isEmpty();
}
/**
* 设置隐藏与显示
* @param visible
*/
void setLauncherIconVisible(boolean visible) {
if (isLauncherIconVisible() == visible) return;
ComponentName component = new ComponentName(this, ALIAS_ACTIVITY_NAME);
PackageManager manager = getPackageManager();
int newState = visible? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : ackageManager.COMPONENT_ENABLED_STATE_DISABLED;
manager.setComponentEnabledSetting(component, newState, PackageManager.DONT_KILL_APP);
}
说明: 部分手机隐藏了仍然会在桌面展示,只是点击会跳转到设置中的应用详情页