Как реализовать прослушиватели событий на значке ярлыка приложения?

Я хотел бы создать приложение, которое работает с фоновыми изображениями пользовательского устройства. Но когда пользователь щелкает значок ярлыка, фон должен измениться, не открывая приложение, и значок должен быть каким-то образом анимирован.

Рассмотрим это приложение в Itel:

Прежде чем я нажму на ярлык приложения Как реализовать прослушиватели событий на значке ярлыка приложения?

И после щелчка приложение не открывается, но фон меняется и значок анимируется (см. Рисунок):

Как реализовать прослушиватели событий на значке ярлыка приложения?

Как можно этого добиться?

Это приложение встроено в систему? Он ведет себя так же, если используется с настраиваемым средством запуска приложений? Это может быть просто жестко запрограммированное поведение в приложении запуска.

Pawel 24.10.2018 23:40
developer.android.com/guide/topics/ui/shortcuts/… может быть эта ссылка вам поможет
Asad Ali 25.10.2018 12:48

@Pawel Я установил другую пусковую установку, и она ведет себя точно так же

Gratien Asimbahwe 29.10.2018 07:05

на какой уровень API вы нацеливаетесь?

BLuFeNiX 03.11.2018 15:13

Если вы не можете анимировать / изменить сам значок приложения, вместо этого вы можете открыть действие, которое полностью прозрачно, и воспроизвести там анимацию, чтобы оно выглядело так, как будто значок был анимирован.

Pezo 03.11.2018 17:25

@BLuFeNiX Целевой SDK - 26

Gratien Asimbahwe 03.11.2018 17:27

Вы можете попробовать использовать Адаптивные иконки

DWattimena 03.11.2018 19:58
3
7
665
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
  1. AFAIK мы не можем изменить значок приложения во время выполнения. Я предполагаю, что значок в приведенном выше примере может быть виджетом

  2. Об изменении фоновых обоев (или выполнении конкретной задачи): я думаю, мы можем создать действие запуска (прозрачный / без setContentView()), которое само будет finish() после запуск фоновой службы, которая меняет обои (или выполняет любую другую задачу). По моему мнению, это может быть решением для описанного выше сценария, хотя лично я не пробовал.

С уважением, удачного кодирования :)

tl; dr Вы не можете изменить его, потому что значок вашего приложения зарегистрирован в манифесте Android, который поставляется с ним.

С документация:

Icons and labels

A number of manifest elements have an icon and label attributes for displaying a small icon and a text label, respectively, to users for the corresponding app component.

Это означает, что ваше приложение всегда будет иметь один и тот же значок, поскольку манифест нельзя изменить во время выполнения. Итак, я предполагаю, что приложение, на которое вы ссылаетесь, является системным приложением с системными привилегиями.

Единственные значки, которые вы можете изменить, - это ярлыки, которые ваше приложение создает с помощью этого разрешения:

<uses-permission android:name = "com.android.launcher.permission.INSTALL_SHORTCUT"/>

Чтобы создать ярлык, проверьте этот ответ: https://stackoverflow.com/a/40446734/1574250


Чтобы изменить фон при нажатии на значок приложения, вот пример (в этом примере я меняю цвет фона только при открытии приложения):

Класс:

public class YourActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set you app icon
        setColorWallpaper();

        // Finish the activity
        finish();
    }

    /**
     * Sets the color wallpaper to the color value in the Clipboard, or to a random color.
     */
    private void setColorWallpaper() {

        // Try to get the color parameter from the clipboard
        Integer colorParam = null;
        try {
            colorParam = ColorClipboardParameter.getColor(getApplication());
        } catch (Exception ignored) {
            // An unexpected exception while trying to get the color code from the clipboard
            // can crash the app at startup. Ignore any exceptions, we will generate a random
            // color anyway.
        }

        // If there is no valid color value in the clipboard, generate a random color
        final int color = (colorParam != null) ? colorParam : GoodRandomColor.nextColor();

        try {
            // Set the color wallpaper
            ColorWallpaper.setColorWallpaper(this, color);

            // Success: copy the color code to the clipboard
            Utils.copyText(this, Utils.colorToHex(color));

            // Go to the home screen
            Utils.goHome(this);

        } catch (IOException e) {

            // Write the stack trace to System.err and copy the reason of the failure to clipboard
            e.printStackTrace();
            Utils.copyText(this, e.toString());
        }
    }
}

Манифест:

<application
    android:fullBackupContent = "true"
    android:allowBackup = "true"
    android:icon = "@drawable/ic_launcher"
    android:installLocation = "auto"
    android:label = "@string/app_name"
    android:theme = "@style/AppTheme"
    tools:ignore = "GoogleAppIndexingWarning">

    <activity
        android:name = ".YourActivity"
        android:excludeFromRecents = "true"
        android:label = "@string/app_name">

        <intent-filter>
            <action android:name = "android.intent.action.MAIN"/>
            <category android:name = "android.intent.category.LAUNCHER"/>
        </intent-filter>

    </activity>

</application>

Проверьте этот проект для получения дополнительной информации: https://github.com/appgramming/LoneColor-Android

Другие вопросы по теме