Android动态换桌面icon

一.需求:

 快过年了,产品经理给出这样一个需求:升级一个版本,把桌面icon改为新年主题的,年后再升级一个版本,改为默认的icon,我心里想,就为了一个icon,要升级两个版本,这也太low币了吧,于是,就想如何动态的实现这个功能。

二.思路:

 安卓程序可以有多个入口,也就是,一个程序可以有多个icon图标点击进入程序。我们可以根据需求需要哪个icon,就让该入口

可以使用,让其他入口不可使用,那么,我们就只保留有含有我们需要的icon的启动图标了。

三.具体实现:

 直接上代码:

<!-- 启动页面 -->
<activity
    android:name=".ui.activity.SplashActivity"
    android:screenOrientation="landscape"
    android:theme="@style/SplashAppTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <!--<category android:name="android.intent.category.LAUNCHER" />-->
    </intent-filter>
</activity>

<!--默认的-->
<activity-alias
    android:name=".icon_default"
    android:enabled="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:targetActivity=".ui.activity.SplashActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>

<!--新年的-->
<activity-alias
    android:name=".icon_newyear"
    android:enabled="false"
    android:icon="@mipmap/new_year_logo"
    android:label="新年好"
    android:targetActivity=".ui.activity.SplashActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>
 使用,activity-alias标签,每个代表一个程序入口,
当然,在启动activity下配置的,<category ........LAUNCHER>也是

一个入口,但是,如果在activity标签下也配置为LANCHER的话,会有一点问题,所以我就将启动activity下的<category ......LAUNCHER

去掉了,如果去掉的话,则必须要保证两个activity-alias中至少有一个enable为true,也就是至少有一个是可用的,当然也可以有多个可用

那样的话,就会有多个入口,也就是在桌面上会有多个icon图标,当然没有特殊需求的话,我们只要一个入口就可以了。

 public static int ICON_DEFAULT = 0;//默认图标;
public static int ICON_NEWYEAR = 1;//新年图标;

/**
 * 切换启动图标:
 *
 * @param iconType 0: 为默认图标 1: 为新年图标
 */
public static void switchIcon(Context context, int iconType) {

    try {

        String icon_tag_default = context.getPackageName() + ".icon_default";
        String icon_tag_newyear = context.getPackageName() + ".icon_newyear";

        String[] icon_tags = new String[]{icon_tag_default, icon_tag_newyear};
        int[] icon_types = new int[]{ICON_DEFAULT, ICON_NEWYEAR};

        boolean isHaveIcon = false;

        //判断是否包含该图标类型;
        for (int i = 0; i < icon_types.length; i++) {
            if (iconType == icon_types[i]) {
                isHaveIcon = true;
            }
        }

        PackageManager pm = context.getPackageManager();

        //使用默认的:
        if (!isHaveIcon) {
            iconType = icon_types[0];
        }

        for (int i = 0; i < icon_tags.length; i++) {
            ComponentName normalComponentName = new ComponentName(
                    context,
                    icon_tags[i]);

            int normalNewState = (icon_types[i] == iconType) ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                    : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;

            //新状态跟当前状态不一样才执行
            if (pm.getComponentEnabledSetting(normalComponentName) != normalNewState) {
                pm.setComponentEnabledSetting(
                        normalComponentName,
                        normalNewState,
                        PackageManager.DONT_KILL_APP);
            }
        }

    } catch (Exception e) {
        Log.e("TAG", e.getMessage());
    }
}
 以上代码为替换应用icon的方法,具体需要使用哪个icon,我们可以在后台配置,通过接口的方式获取到icon的类型,然后我们

根据icon的类型而去设置相应的icon。

四.遇到的问题:

 ①在使用过程中,会发现,比如:当应用启动后调用方法设置为新年的icon,而在清单配置文件中,我们配置的默认icon的alias为可以使用,新年

icon的alias为不可使用,我们通过Android studio启动代码程序,会无法运行,这是由于系统配置和程序发生了冲突,而如果卸掉或者

升级后就不会出现这种问题,我们在运行代码时候,可以把应用已经设置的icon对应的alias设置为true,另一个设置为false,这样就可以运行了。

 ②老版本中没有alias,在新版本中加入了alias,如果直接运行程序,会出现闪退,作为调试的话,只需将原来的程序卸载掉重装即可。

在正常的版本升级过程中,新版本会替换掉老版本,就不会出现以上问题。

 综上,问题总是出现在使用Android studio运行程序代码时,在正常的版本迭代中并不会出现,可以放心使用。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio的桌面图标是指在桌面上显示的快捷方式图标。如果您已经安装了Android Studio,但是没有在桌面上看到它的图标,您可以按照以下步骤来创建一个桌面图标: 1. 打开Android Studio应用程序。 2. 在菜单栏中,选择“Tools”(工具)>“Create Desktop Entry”(创建桌面条目)。 3. 在弹出的窗口中,选择“Create”(创建)。 4. 现在,您应该能够在桌面上看到一个新的Android Studio图标。 如果您使用的是Linux操作系统,可能需要手动创建一个桌面图标。在这种情况下,您可以按照以下步骤操作: 1. 打开文本编辑器,创建一个新文件。 2. 将以下内容复制并粘贴到文件中: [Desktop Entry] Version=1. Type=Application Name=Android Studio Icon=/path/to/android-studio/bin/studio.png Exec="/path/to/android-studio/bin/studio.sh" %f Comment=The Integrated Development Environment for Android app development Categories=Development;IDE; Terminal=false StartupWMClass=jetbrains-android-studio 请注意,您需要将“/path/to/android-studio”替换为您的Android Studio安装路径。 3. 将文件保存为“android-studio.desktop”。 4. 将文件移动到“/usr/share/applications/”目录中。 5. 现在,您应该能够在桌面上看到一个新的Android Studio图标。 ### 回答2: Android Studio 是一款非常流行的 Android 应用开发工具,它是由 Google 投资和开发的一款强大的集成开发环境(IDE),帮助开发者创建高质量的 Android 应用程序。对于很多 Android 开发者而言,安装了 Android Studio 之后,他们就会想要在其对应的操作系统桌面环境下放置一个图标以便于使用Android Studio 桌面图标的创建及使用方法是十分简单的,我们可以仿照其他软件创建桌面快捷方式的方式进行操作。首先在 Android Studio 安装目录下的 bin 目录,找到 studio.exe 文件,右键选择“发送到”,然后选择“桌面快捷方式”即可完成创建操作。之后我们就可以在操作系统的桌面上找到 Android Studio 的图标了。 如果在某些操作系统环境中,无法直接创建桌面快捷方式,那么我们可以手动创建一个快捷方式,将其拖拽到桌面上,从而完成 Android Studio 桌面图标的创建操作。在Windows操作系统中,我们可以右键单击studio.exe文件,选择发送到“桌面(快捷方式)”\;在Mac操作系统中,我们可以右键单击studio.exe文件,选择“创建别名”,并将别名拖放到桌面上以完成操作。此外,使用者也可以很方便地在Web搜索引擎上搜索相关关键词,查阅更为详尽的技术介绍。 ### 回答3: Android Studio是一个为Android开发者设计的集成开发环境(IDE)。它能够帮助开发者在Android平台上构建高质量的应用程序。通过使用Android Studio,开发者可以使用Java或Kotlin编程语言来构建Android应用程序。 当我们安装好Android Studio后,通常会在桌面上出现一个图标。点击这个图标便可以打开Android Studio。默认情况下,这个桌面图标会安装在操作系统的程序菜单中,在运行时会在任务栏中显示。 除了使用桌面图标,也可以通过在终端运行“studio.sh”命令来打开Android Studio。 如果您希望在桌面上创建Android Studio的快捷方式,可以通过以下步骤实现: 1.右键单击桌面并选择“创建新文件夹”。您可以将此文件夹命名为“Android Studio”。 2.在“Android Studio”文件夹内右键单击并选择“创建启动器”。 3.在“创建启动器”窗口中,输入以下信息: -名称:Android Studio -命令:/ home / <USER_NAME> / android-studio / bin / studio.sh(<USER_NAME>是您的用户名) 4.单击“应用”按钮以完成创建过程。 现在,您可以双击桌面上的快捷方式,打开Android Studio并开始开发您的Android应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值