# 更改 Android 应用图标

要根据通知中心中的通知数量更改应用程序图标，请按照以下步骤操作。

1.  在项目的 'mipmap' 文件夹中添加一个新图标。

<img src="/android-notification-customisation-change-android-app-icon-1.webp" alt="截图显示了 Android Studio 中的 mipmap 文件夹结构，并添加了一个新的图标文件"/>

2. 创建一个新的 Activity 类。

```java
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivityAlias extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
}
```

3. **创建一个包含更改图标逻辑的类。**

```java
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;

public class MyPushReceiver  {

    public static void changeAppIcon(Context context, int count) {
        PackageManager pm = context.getPackageManager();
        if (count > 0) {
            pm.setComponentEnabledSetting(
                    new ComponentName(context, "com.example.app.MainActivityAlias"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP
            );
            pm.setComponentEnabledSetting(
                    new ComponentName(context, "com.example.app.MainActivity"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP
            );
        } else {
            pm.setComponentEnabledSetting(
                    new ComponentName(context, "com.example.app.MainActivity"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP
            );
            pm.setComponentEnabledSetting(
                    new ComponentName(context, "com.example.app.MainActivityAlias"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP
            );
        }
    }
}
```

4. **在您的 NotificationServiceExtension 类中，实现接收/删除推送通知的跟踪。**

```java
@Override
public boolean onMessageReceived(final PushMessage message) {
	super.onMessageReceived(message);

	if (!message.isSilent()) {
		/**
		 * 在此示例中，仅指示了随机数量的通知。
		 * 您需要自己实现计算通知的逻辑。
		 */
		int notificationCount = 1;

		if (getApplicationContext() != null) {
			MyPushReceiver.changeAppIcon(getApplicationContext(), notificationCount);
		}
	}
}

/**
* 用于跟踪从通知中心删除推送通知的 Pushwoosh 回调。
*/
@Override
protected void onMessageCanceled(PushMessage message) {
	super.onMessageCanceled(message);

	if (!message.isSilent()) {
		/**
		* 在此示例中，仅指示了随机数量的通知。
		* 您需要自己实现计算通知的逻辑。
		*/
		int notificationCount = 0;

		if (getApplicationContext() != null) {
			MyPushReceiver.changeAppIcon(getApplicationContext(), notificationCount);
		}
	}
}
```

5. **完成！**

### 在设备上的显示效果示例

<video src="/android-notification-customisation-change-android-app-icon-2.webm" title="动画演示，显示在收到或移除通知时应用程序图标动态变化" autoplay loop muted playsinline />