2012-08-23 20 views
8

¿Hay alguna API oficial o no oficial o un truco para reemplazar el calendario predeterminado (calendario georgiano) del sistema operativo Android con otro calendario (mi propio calendario)? Puede ver la lista de calendarios en todo el mundo here si no está familiarizado con ellos.¿Cómo puedo reemplazar el calendario predeterminado del sistema operativo Android?

¿Debo anular DateFormat o GregorianCalendar o Calendar.getInstance()?

(Añadido en una edición) ¿Y anulará totalmente el uso del calendario gregoriano, por ejemplo, en la pantalla de bloqueo de Android?

Gracias :)

Respuesta

0

Bien, esto no es posible. Mi preocupación original era sobre el calendario de bloqueo de pantalla que parece que ahora es posible poner un nuevo widget para otro tipo de calendario en Android 4.2, así que he perdido mi interés en encontrar la solución a este problema (aunque creo que debe ser posible de alguna manera ...)!

Ahora creo que la única solución real es aplicar parches a AOSP para usar otros calendarios en la GUI que, por supuesto, no están relacionados con esta pregunta.

Editar:

Xposed framework es mi sueño que se hizo realidad! En teoría, puede reemplazar cualquier método en el marco de Android con cualquier cosa que desee. Pero actualmente no es compatible con Android 4.4 por this (snapshot as 11/28/2013) que espero que se solucione pronto.

4

Calendar.getInstance() no es la API de Android. Es API estándar de Java. Calendar.getInstance() llama al createCalendar() con la zona horaria y la configuración regional predeterminadas. Hay métodos de fábrica getInstance() que aceptan zona horaria, configuración regional y ambos. Esta es la forma de afectar el calendario creado.

Por ejemplo, hasta donde yo sé, el envío de la instancia de creación de causa de configuración regional japonesa de JapaneseImperialCalendar.

EDITAR

Hay un par de calendarios predefinidos: BuddistCalendar y calendario japonés. Y, obviamente, por defecto GregorianCalendar. Puede agregar su propia "extensión" usando Locale.setExtension(char key, String value). Nunca lo hice, pero debería funcionar. Sin embargo, debes profundizar en el código para descubrir los parámetros correctos. Buena suerte.

+0

Gracias por su respuesta rápida :) Si nos fijamos en Android fuente Calendar.java, en contraste de JDK fuente de calendario (http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/ src/share/classes/java/util/Calendar.java), no puede encontrar createCalendar() en él. esta es la fuente de la parte relacionada: calendario sincronizado estático público getInstance() {return new GregorianCalendar(); } –

+1

@EbrahimByagowi: "anular este método (de alguna manera hacker) afectará todo el uso de calendarios en la interfaz de usuario de Android" - oh '$ DEITY' no. No tiene derecho, desde una aplicación SDK, a afectar otras aplicaciones de esta manera, por razones obvias de seguridad. Puede copiar Android, cambiar el sistema operativo, convertirlo en una ROM modificada e instalarlo en el dispositivo de su elección, si desea afectar todas las aplicaciones. – CommonsWare

+2

@EbrahimByagowi CommonsWare es 100% correcto (como siempre). Si lo que quieres es inyectar algo de tu código de tal manera que cada vez que una aplicación en el dispositivo cree un calendario, ejecuten tu código para crear el calendario en lugar del predeterminado, entonces lo que estás describiendo es más o menos cómo funcionan los virus. . El suyo obviamente no es malicioso, pero no es lo que el marco está ahí para proporcionar.Solo puede escribir el código que funciona en su área, o escribe el marco (cree su propia versión de Android). Tal vez si explicaras por qué quieres que todos los calendarios sean tu calendario, ¿podríamos ayudarte más? – xbakesx

Cuestiones relacionadas