2012-08-23 25 views
8

C'è qualche API ufficiale o non ufficiale o un trucco per sostituire il calendario predefinito (calendario georgiano) del sistema operativo Android con un altro calendario (il mio calendario)? Puoi vedere l'elenco dei calendari in tutto il mondo here se non hai familiarità con loro.Come posso sostituire il calendario predefinito del sistema operativo Android?

Posso eseguire l'override di DateFormat o GregorianCalendar o Calendar.getInstance()?

(Aggiunto in una modifica) E sostituirà totalmente l'uso del calendario gregoriano, ad esempio nella schermata di blocco di Android?

Grazie :)

risposta

0

Ok, questo non è possibile. La mia preoccupazione originale riguardava il calendario della schermata di blocco che ora sembra possibile mettere un nuovo widget per un altro tipo di calendario su Android 4.2, quindi ho perso il mio interesse a trovare una soluzione a questo problema (mentre penso che debba essere possibile in qualche modo ...)!

Ora penso che l'unica vera soluzione sia quella di applicare AOSP stesso agli altri calendari nella GUI che ovviamente non è correlata a questa domanda.

Edit:

Xposed framework è il mio sogno che si è avverato! Teoricamente, può sostituire qualsiasi metodo su framework Android con qualsiasi cosa tu voglia. Ma al momento non è compatibile con Android 4.4 per this (snapshot as 11/28/2013) che spero presto risolto.

4

Calendar.getInstance() non è l'API di Android. È l'API Java standard. Calendar.getInstance() chiamate createCalendar() con fuso orario e impostazioni internazionali predefinite. Esistono metodi di produzione getInstance() che accettano fuso orario, locale e entrambi. Questo è il modo di influenzare il calendario creato.

Ad esempio, per quanto ne so, l'invio di impostazioni locali giapponesi causa l'istanza di creazione di JapaneseImperialCalendar.

EDIT

ci sono un paio di calendari predefiniti: BuddistCalendar e del calendario giapponese. E ovviamente il valore predefinito è GregorianCalendar. Puoi aggiungere la tua "estensione" usando Locale.setExtension(char key, String value). Non l'ho mai fatto ma dovrebbe funzionare. Dovresti comunque approfondire il codice per scoprire i parametri corretti. In bocca al lupo.

+0

Grazie per la rapida risposta :) Se guardi all'origine Android Calendar.java, al contrario del sorgente JDK di Calendar (http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/ src/share/classes/java/util/Calendar.java), non è possibile trovare createCalendar() su di esso. questa è la fonte della relativa parte su di essa: public static synchronized Calendar getInstance() {return new GregorianCalendar(); } –

+1

@EbrahimByagowi: "l'override di questo metodo (in qualche modo hacker) influirà sull'uso dei calendari nell'interfaccia utente di Android" - oh '$ DEITY' no. Non hai diritto, da un'applicazione SDK, ad influenzare altre applicazioni in questo modo, per ovvi motivi di sicurezza. Sei il benvenuto su fork di Android, modifica il sistema operativo, convertilo in una ROM modificata e installalo sul dispositivo di tua scelta, se desideri influire su tutte le applicazioni. – CommonsWare

+2

@EbrahimByagowi CommonsWare è corretto al 100% (come sempre). Se quello che vuoi è iniettare parte del tuo codice in modo tale che ogni volta che un'app sul dispositivo crea un calendario, eseguono il tuo codice per creare il calendario invece del valore predefinito, quindi quello che stai descrivendo è praticamente come funzionano i virus . Il tuo non è ovviamente malizioso, ma non è ciò che il framework è lì a fornire.Puoi solo scrivere codice che funziona nella tua zona, o scrivi il framework (crea la tua versione di Android). Forse se hai approfondito il motivo per cui vuoi che tutti i calendari siano il tuo calendario, potremmo aiutarti di più? – xbakesx

Problemi correlati