美文网首页
Android Xposed模块隐藏桌面图标代码

Android Xposed模块隐藏桌面图标代码

作者: Artfox丶艺狸 | 来源:发表于2023-02-08 09:53 被阅读0次

假设启动 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);
}

说明: 部分手机隐藏了仍然会在桌面展示,只是点击会跳转到设置中的应用详情页

相关文章

网友评论

      本文标题:Android Xposed模块隐藏桌面图标代码

      本文链接:https://www.haomeiwen.com/subject/mphqkdtx.html