假設(shè)啟動(dòng) 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";
/**
* 判斷有沒(méi)有隱藏
* @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();
}
/**
* 設(shè)置隱藏與顯示
* @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);
}
說(shuō)明: 部分手機(jī)隱藏了仍然會(huì)在桌面展示舀锨,只是點(diǎn)擊會(huì)跳轉(zhuǎn)到設(shè)置中的應(yīng)用詳情頁(yè)