2012-08-23 11 views
8

क्या कोई आधिकारिक या गैर-आधिकारिक API है या किसी अन्य कैलेंडर (मेरा अपना कैलेंडर) के साथ एंड्रॉइड ओएस के डिफ़ॉल्ट कैलेंडर (जॉर्जियाई कैलेंडर) को प्रतिस्थापित करने के लिए हैक है? यदि आप उनसे परिचित नहीं हैं तो आप दुनिया भर के कैलेंडर here की सूची देख सकते हैं।मैं एंड्रॉइड ओएस के डिफ़ॉल्ट कैलेंडर को कैसे बदल सकता हूं?

मई मुझे DateFormat या GregorianCalendar या Calendar.getInstance() ओवरराइड करना चाहिए?

(एक संपादन पर जोड़ा गया) और क्या यह पूरी तरह से ग्रेगोरियन कैलेंडर का उपयोग ओवरराइड करेगा, उदाहरण के लिए एंड्रॉइड लॉक-स्क्रीन पर?

धन्यवाद :)

उत्तर

0

ठीक है, यह संभव नहीं है। मेरी मूल चिंता लॉक स्क्रीन कैलेंडर के बारे में थी जो अब संभव है कि एंड्रॉइड 4.2 पर किसी अन्य कैलेंडर प्रकार के लिए एक नया विजेट डाला जा सके, इसलिए मैंने इस समस्या के समाधान को खोजने के लिए अपनी रुचि खो दी है (जबकि मुझे लगता है कि यह किसी भी तरह से संभव होना चाहिए ...)!

अब मुझे लगता है कि एकमात्र असली समाधान एओएसपी को जीयूआई में अन्य कैलेंडर का उपयोग करने के लिए खुद को पैच कर रहा है जो निश्चित रूप से इस प्रश्न से संबंधित नहीं है।

संपादित करें:

Xposed framework मेरा सपना है कि सच साबित हुई है! सैद्धांतिक रूप से यह आपके इच्छित कुछ भी एंड्रॉइड फ्रेमवर्क पर किसी भी विधि को प्रतिस्थापित कर सकता है। लेकिन वर्तमान में यह एंड्रॉइड 4.4 प्रति this (snapshot as 11/28/2013) के साथ संगत नहीं है, जो मुझे आशा है कि जल्द ही तय हो जाएगा।

4

Calendar.getInstance() एंड्रॉयड एपीआई नहीं है। यह मानक जावा एपीआई है। Calendar.getInstance() डिफ़ॉल्ट समय क्षेत्र और लोकेल के साथ createCalendar() पर कॉल करता है। कारखाने के तरीके getInstance() हैं जो समय क्षेत्र, लोकेल और दोनों स्वीकार करते हैं। बनाए गए कैलेंडर को प्रभावित करने का यह तरीका है।

उदाहरण के लिए जहां तक ​​मुझे पता है कि जापानी लोकेल कारण JapaneseImperialCalendar का निर्माण उदाहरण है। BuddistCalendar और जापानी कैलेंडर:

संपादित

पूर्वनिर्धारित कैलेंडर के एक जोड़े हैं। और जाहिर है डिफ़ॉल्ट GregorianCalendar। आप Locale.setExtension(char key, String value) का उपयोग कर अपना "एक्सटेंशन" जोड़ सकते हैं। मैंने कभी ऐसा नहीं किया है लेकिन इसे काम करना चाहिए। हालांकि आपको सही पैरामीटर खोजने के लिए अपने स्वयं के कोड में खोदना चाहिए। सौभाग्य।

+0

आपके त्वरित उत्तर के लिए धन्यवाद :) यदि आप कैलेंडर के जेडीके स्रोत के विपरीत एंड्रॉइड स्रोत कैलेंडर.जावा देखते हैं (http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/ src/share/classes/जावा/उपयोग/कैलेंडर.जावा), आप उस पर createCalendar() नहीं ढूंढ सकते हैं। यह इस पर संबंधित हिस्से का स्रोत है: सार्वजनिक स्थैतिक सिंक्रनाइज़ कैलेंडर getInstance() {नया ग्रेगोरियन कैलेंडर() लौटाएं; } –

+1

@EbrahimByagowi: "इस विधि को ओवरराइड करना (कुछ हैकरिश तरीके से) एंड्रॉइड यूआई में कैलेंडर के सभी उपयोग को प्रभावित करेगा" - ओह '$ DEITY' नहीं। स्पष्ट सुरक्षा कारणों से, इस फैशन में अन्य अनुप्रयोगों को प्रभावित करने के लिए, आपके पास कोई एसडीके एप्लिकेशन से कोई अधिकार नहीं है। फोर्क एंड्रॉइड में आपका स्वागत है, ऑपरेटिंग सिस्टम को बदलें, इसे एक संशोधित रॉम में कनवर्ट करें, और अपनी पसंद के डिवाइस पर इंस्टॉल करें, अगर आप सभी एप्लिकेशन को प्रभावित करना चाहते हैं। – CommonsWare

+2

@EbrahimByagowi CommonsWare 100% सही है (हमेशा के रूप में)। यदि आप चाहते हैं कि आपका कुछ कोड इस तरह से इंजेक्ट करना है कि जब भी डिवाइस पर कोई भी ऐप कैलेंडर बनाता है, तो वे डिफ़ॉल्ट रूप से कैलेंडर बनाने के लिए अपना कोड चलाते हैं, फिर आप जो वर्णन कर रहे हैं वह वायरस का काम कितना है । आपका स्पष्ट रूप से दुर्भावनापूर्ण नहीं है, लेकिन यह उपलब्ध कराने के लिए ढांचा क्या नहीं है।आपको केवल उस कोड को लिखना है जो आपके क्षेत्र में काम करता है, या आप ढांचे को लिखते हैं (एंड्रॉइड का अपना संस्करण बनाएं)। हो सकता है कि आपने विस्तार से बताया कि आप सभी कैलेंडर क्यों अपना कैलेंडर बनना चाहते हैं, तो हम और अधिक मदद कर सकते हैं? – xbakesx

संबंधित मुद्दे