2012-08-23 16 views
8

Gibt es eine offizielle oder nicht offizielle API oder einen Hack, um den Standardkalender (georgischer Kalender) von Android OS durch einen anderen Kalender (meinen eigenen Kalender) zu ersetzen? Sie können die Liste der Kalender auf der ganzen Welt sehen here, wenn Sie nicht mit ihnen vertraut sind.Wie kann ich den Standardkalender von Android OS ersetzen?

Darf ich übersteuern DateFormat oder GregorianCalendar oder Calendar.getInstance()?

(An einer Änderung hinzugefügt) Und wird es die Verwendung des Gregorianischen Kalenders völlig außer Kraft setzen, zum Beispiel auf Android-Sperrbildschirm?

Thanks :)

Antwort

0

Okay, das ist nicht möglich. Meine ursprüngliche Sorge war über den Sperrbildschirm Kalender, der jetzt scheint, ist möglich, ein neues Widget für einen anderen Kalendertyp auf Android 4.2 setzen, so habe ich mein Interesse verloren, Lösung dieses Problems zu finden (während ich denke, dass es irgendwie möglich sein muss ...)!

Jetzt denke ich, die einzige wirkliche Lösung ist das Patchen von AOSP selbst, andere Kalender in der GUI zu verwenden, die natürlich nicht mit dieser Frage verbunden ist.

Edit:

Xposed framework ist mein Traum, der wahr geworden! Theoretisch kann es jede Methode auf Android Framework mit allem, was Sie wollen, ersetzen. Aber derzeit ist es nicht kompatibel mit Android 4.4 per this (snapshot as 11/28/2013), dass ich hoffe, bald behoben werden.

4

Calendar.getInstance() ist nicht der Android API. Es ist Standard Java API. Calendar.getInstance() ruft createCalendar() mit Standardzeitzone und Gebietsschema auf. Es gibt Factory-Methoden getInstance(), die Zeitzone, Gebietsschema und beides akzeptieren. Auf diese Weise wird der erstellte Kalender beeinflusst.

Zum Beispiel, soweit ich weiß, senden japanische Gebietsschema verursachen Erstellungsinstanz von JapaneseImperialCalendar.

EDIT

Es gibt ein paar vordefinierten Kalender: BuddistCalendar und japanischen Kalender. Und natürlich Standard GregorianCalendar. Sie können Ihre eigene "Erweiterung" mit Locale.setExtension(char key, String value) hinzufügen. Ich habe es noch nie gemacht, aber es sollte funktionieren. Sie sollten jedoch in den Code eintauchen, um die richtigen Parameter herauszufinden. Viel Glück.

+0

Vielen Dank für Ihre schnelle Antwort :) Wenn Sie sich Android-Quelle Calendar.java, im Gegensatz zu JDK-Quelle des Kalenders (http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/ src/share/classes/java/util/Calendar.java), Sie können createCalendar() nicht finden. Dies ist die Quelle des zugehörigen Teils: public static synchronized Kalender getInstance() {return new GregorianCalendar(); } –

+1

@EbrahimByagowi: "das Überschreiben dieser Methode (auf irgendeine Hackerart) wird die gesamte Verwendung von Kalendern in der Android-Benutzeroberfläche beeinflussen" - oh '$ DEITY' no. Sie haben aus einer SDK-Anwendung nicht das Recht, aus offensichtlichen Sicherheitsgründen andere Anwendungen auf diese Weise zu beeinflussen. Sie sind willkommen, Android zu formatieren, das Betriebssystem zu ändern, es in ein modifiziertes ROM zu konvertieren und es auf dem Gerät Ihrer Wahl zu installieren, wenn Sie alle Anwendungen beeinflussen möchten. – CommonsWare

+2

@EbrahimByagowi CommonsWare ist zu 100% korrekt (wie immer). Wenn Sie etwas von Ihrem Code so einfügen möchten, dass jede Anwendung auf dem Gerät einen Kalender erstellt, wird der Code ausgeführt, um den Kalender anstelle des Standards zu erstellen. Was Sie dann beschreiben, ist, wie Viren funktionieren . Dein ist natürlich nicht bösartig, aber nicht das, was das Framework zur Verfügung stellt.Sie können nur Code schreiben, der in Ihrer Gegend funktioniert, oder Sie schreiben das Framework (erstellen Sie Ihre eigene Version von Android). Vielleicht könnten Sie, wenn Sie ausführlich erläutert haben, warum alle Kalender Ihr Kalender sein sollen, mehr helfen? – xbakesx

Verwandte Themen