it-swarm.com.de

Gibt es eine Möglichkeit, ein Android-App-Symbol dynamisch zu ändern, wie dies bei der Kalender-App der Fall ist?

Ich möchte eine Android-Anwendung erstellen und das App-Symbol dynamisch und automatisch aktualisieren, ähnlich wie das Kalendersymbol auf dem Startbildschirm eines Benutzers aktualisiert wird.

Der Kalender ändert sich für jeden Tag mit der Nummer des Monats. Es gibt auch eine Wecker-App, die das aktuelle Symbol ändert, dh jede Minute ändert.

Das ist kein Widget, sondern ein echtes App-Symbol. Dann muss es einen Weg dazu haben. Wie kann ich das in meiner App machen?

14
Lennon Petrick

Was auch immer Ihr Startbildschirm hat, hat spezielle Haken für Ihre Kalender-App und für Ihre Wecker-App. Im Allgemeinen können Apps ihre Symbole nicht aktualisieren.

Was meinst du mit Haken?

Zum Beispiel kann Samsung eine Samsung-Kalender-App auf Samsung-Geräten versenden. Samsungs Startbildschirm auf denselben Samsung-Geräten kann über spezielle Regeln für das Rendern eines Symbols für die Kalender-App von Samsung verfügen. Zu diesen Regeln gehört auch die Anzeige des Tages des Monats. Dies liegt daran, dass Samsung den Startbildschirm geschrieben hat. Wenn Sie einen Startbildschirm eines Drittanbieters installieren, wird möglicherweise nicht dasselbe ausgeführt. Schließlich kann ich in etwa einer Stunde einen Homescreen schreiben und bin zuversichtlich, dass ich für die Kalender-App von Samsung nichts Besonderes tun muss.

Es gibt nichts, was Samsung daran hindert, eine Art API bereitzustellen, mit der Entwickler sich an Samsungs Home-Bildschirm anschließen und sie über diese Art von Informationen informieren können. Ob Samsung beabsichtigt für Dritte, diese API zu verwenden, oder ob sich jemand damit beschäftigt, wie Samsung es für seine eigenen Apps macht, kann ich nicht sagen.

(Übrigens, ich zitiere hier Samsung als mögliches Beispiel - ich weiß nicht, dass sie diese Art von Funktion tatsächlich haben, und wenn ja, auf welchen Geräten sie es haben)

Ich erinnere mich an die Tatsache, dass jemand ein GitHub-Projekt hat, bei dem versucht wird, die proprietären APIs der verschiedenen Startbildschirme einzuwickeln. IIRC: Zu den unterstützten Funktionen gehörte das Ersetzen des App-Symbols oder das Hinzufügen eines Badges (z. B. Anzahl ungelesener Nachrichten). Jedoch:

  • Nur ein kleiner Prozentsatz der Geräte unterstützt diese proprietären APIs

  • Undokumentierte und nicht unterstützte APIs, die durch Reverse-Engineering-Apps ermittelt wurden, können sich ändern und können auf unerwartete Weise beschädigt werden

Ich bin mir ziemlich sicher, dass das Android SDK nichts enthält, was dynamische App-Symbole unterstützt. Das einzige, was ich wusste, das die Leute ausprobiert haben, ist <activity-alias>, um N verschiedene "Aktivitäten" zu haben, die alle auf dieselbe Implementierung hinweisen, aber unterschiedliche Icons haben. Mit PackageManager und setComponentEnabledSetting() deaktiviert die App den Alias ​​des alten Launchers und aktiviert einen anderen, in der Hoffnung, dass die Startbildschirme dies erkennen und das neue Symbol anzeigen. Ein paar tun. Andere würden nur bei einem Neustart von der Änderung erfahren.

Um das Problem umzukehren, kann ich einen Startbildschirm schreiben. Vielleicht möchte ich den Apps eine Möglichkeit bieten, ihre Icons im laufenden Betrieb zu ändern, auch wenn es dafür keine Standards gibt. Vielleicht nicht Vielleicht beabsichtige ich überhaupt nicht, Symbole zu verwenden, da mein Startbildschirm für Sehbehinderte optimiert ist und Text-to-Speech- und Hardware-Tastatureingaben verwendet werden. Es ist meine Startbildschirm-Implementierung, und ich kann tun, was ich will.

18
CommonsWare

Selbst in der App-Schublade von Android O zeigt das Uhr-App-Symbol die aktuelle Uhrzeit und das Kalender-App-Symbol zeigt den aktuellen Tag an.

Dieser Artikel erklärt :

Chris Lacy, der Entwickler des bekannten Action Launcher, hat etwas in der APK-Datei der Clock-App von Android O entdeckt: Die manifest.xml erwähnt Stunden, Minuten und Sekunden als Layer mit Standardwerten und das Symbol hat separate Bilder für den Hintergrund und verschiedene Elemente.

Das führt ihn logischerweise zu der Schlussfolgerung, dass das Symbol der Uhr-App, beginnend mit Android O, animiert wird, um die aktuelle Uhrzeit anzuzeigen. Dies geschieht sowohl, wenn die Uhr als Abkürzung auf dem Startbildschirm platziert wird, als auch in der App-Schublade.

Es klingt, als würde der Pixel Launcher je nach Uhrzeit und Datum verschiedene Ressourcen für die Bildebene des Symbols auswählen.

2
Jerry101

Ich habe dieselbe Frage, aber die hier gegebene Antwort beantwortet sie nicht.
Ich habe Google Pixel 2 mit rohem Android Ore 8.1 auf dem Board und es gibt zwei Apps, die sich im Laufe der Zeit ändern: Kalender und Clock . Die Zeiger auf der Uhr von Clock App zeigen die aktuelle Uhrzeit an und die Nummer auf dem Calendar - Symbol entspricht dem heutigen Datum des Monats.
In Anbetracht dessen, dass es sich hierbei um einen Standard-Launcher handelt, gibt es wahrscheinlich eine API, um eine ähnliche Funktion auszuführen.

Zum Beispiel könnte es die Planeten-App sein, die die Positionen der Planeten auf dem Symbol widerspiegelt. Oder einen Speicherbereiniger, der den Prozentsatz des verwendeten Speichers anzeigt ...

2
oleg.semen

Der Starter verwaltet den dynamischen Kalender, indem er von der Kalender-App für jeden Tag auf ein Symbol zugreift. Mit Google Kalender kann ein Launcher-Entwickler beispielsweise Folgendes tun:

Resources res = activity.getPackageManager()
                            .getResourcesForApplication("com.google.Android.calendar");
int resId = res.getIdentifier("logo_calendar_01_regular", "drawable"
                            , "com.google.Android.calendar");
Drawable icon = res.getDrawable(resId);

Dadurch würde auf das Kalendersymbol für Tag 1 des Monats zugegriffen. Für den Zugriff auf einen anderen Tag wird "logo_calendar_01_regular" für den aktuellen Tag geändert. Zum Beispiel wäre Tag 7 "logo_calendar_07_regular". Der Google-Kalender verfügt außerdem über zwei Stile: "logo_calendar_01_regular" und "logo_calendar_01_round".

Symbol-Designs enthalten auch separate Symbole für jedes Datum.

1
Michael Kern

Ich bin ein Launcher-Entwickler.

Ich habe nichts mit dynamischen Icon-Hooks zu tun. Ich erhalte nur die Symbole der Aktivitäten in der Standardmethode, die von der Android API bereitgestellt wird.

Und ich habe festgestellt, dass mein Launcher die aktuelle Zeit im Uhrensymbol und das aktuelle Datum im Kalendersymbol anzeigt.

Das Gerät ist ein Nubia X, auf dem Android 8.

Das Betriebssystem hätte etwas mit den beiden Apps tun und ihre Symbole dynamisch ändern müssen, ohne dass der Launcher davon Kenntnis hat.

Diese beiden Apps werden vom Gerätehersteller entwickelt. Sie sollten nicht in der Lage sein, das Gleiche wie ein Entwickler von Drittanbietern zu tun.

0
蔡火胜