Я хотел бы создать приложение, которое работает с фоновыми изображениями пользовательского устройства. Но когда пользователь щелкает значок ярлыка, фон должен измениться, не открывая приложение, и значок должен быть каким-то образом анимирован.
Рассмотрим это приложение в Itel:
Прежде чем я нажму на ярлык приложения
И после щелчка приложение не открывается, но фон меняется и значок анимируется (см. Рисунок):
Как можно этого добиться?
@Pawel Я установил другую пусковую установку, и она ведет себя точно так же
на какой уровень API вы нацеливаетесь?
Если вы не можете анимировать / изменить сам значок приложения, вместо этого вы можете открыть действие, которое полностью прозрачно, и воспроизвести там анимацию, чтобы оно выглядело так, как будто значок был анимирован.
@BLuFeNiX Целевой SDK - 26
Вы можете попробовать использовать Адаптивные иконки
AFAIK мы не можем изменить значок приложения во время выполнения. Я предполагаю, что значок в приведенном выше примере может быть виджетом
Об изменении фоновых обоев (или выполнении конкретной задачи): я думаю, мы можем создать действие запуска (прозрачный / без 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
Это приложение встроено в систему? Он ведет себя так же, если используется с настраиваемым средством запуска приложений? Это может быть просто жестко запрограммированное поведение в приложении запуска.