9

मैं टाइममोनरेंजर का उपयोग करके अलार्ममैनेजर का उपयोग करके अलार्म रीसेट करने के लिए एक बार ब्रॉडकास्ट रिसीवर का उपयोग करता हूं ताकि यह सुनिश्चित किया जा सके कि अलार्म सेट समय पर ठीक हो, कुछ घंटे पहले या बाद में, समय क्षेत्र परिवर्तन के आधार पर ।TIMEZONE_CHANGED इरादा प्रत्येक कुछ सेकंड प्राप्त किया जा रहा है

हालांकि उपयोगकर्ता द्वारा भेजे गए नवीनतम लॉग में, मैंने प्रत्येक कुछ सेकंड में TIMEZONE_CHANGED कार्रवाई के साथ इरादे के बारे में जानकारी देखी, जिसमें उपयोगकर्ता ऐप के बारे में शिकायत कर रहा था।

यहाँ मेरी BroadcastReceiver के onReceive कोड है

@Override 
public void onReceive(Context context, Intent intent) { 
    Utils.log("OnTimeChange"); 
    String action = intent.getAction(); 

    if (action.equals(Intent.ACTION_TIME_CHANGED)) { 
     Utils.log("TimeChange"); 
    } else if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) { 
     Utils.log("TimeZoneChanged"); 
    } 
    BroadcastsManager.updateBroadcastsFromAlarms(context, 
      AlarmsDbAdapter.getInstance(context)); 
} 

प्रकट की मंशा फिल्टर:

<intent-filter> 
    <action android:name="android.intent.action.TIMEZONE_CHANGED" /> 
    <action android:name="android.intent.action.TIME_SET" /> 
</intent-filter> 

और लॉग के भाग (यह एक घंटे से अधिक के लिए इस तरह से चला जाता है - लॉग से भरा लंबाई)

1. 19/4 7:41:54 - posting alarm 3 for 8:15 (in 0h) 
2. 19/4 7:44:29 - OnTimeChange 
3. 19/4 7:44:29 - TimeZoneChanged 
4. 19/4 7:44:29 - posting alarm 3 for 8:15 (in 0h) 
5. 19/4 7:44:54 - OnTimeChange 
6. 19/4 7:44:54 - TimeChange 
7. 19/4 7:44:54 - posting alarm 3 for 8:15 (in 0h) 

यह सैमसंग गैलेक्सी एस III (एंड्रॉइड वी 4.1.2) है। अजीब बात यह है कि यह मेरे एस III पर नहीं होता है। क्या यह हो सकता है कि उपयोगकर्ता ने अपने डिवाइस पर "प्रदाता द्वारा स्वचालित टाइमज़ोन परिवर्तन" विकल्प सेट किया हो और उस जानकारी की जानकारी हर कुछ सेकंड में भेजी जाती है?

क्या किसी ने इसे विस्तारित किया है? मैं मैं सिर्फ अगर समय क्षेत्र वास्तव में प्रसारण अद्यतन करने से पहले बदल गया है की जाँच करने के लिए एक विकल्प जोड़ना होगा लगता है, लेकिन यह अभी भी हो रही है रिसीवर हर कुछ सेकंड बुलाया ... के लिए

+0

क्या आपने अपनी एसआईआईआई पर स्वचालित समय परिवर्तन चालू करने का प्रयास किया है और देखें कि क्या वही होता है? – romo

+0

@romo हां - मैंने इसे प्रश्न में नहीं लिखा है, लेकिन मैंने इसे अपने एस III पर जांच लिया है, इस विकल्प को सक्षम और अक्षम किया जा रहा है। – Koger

+0

यह एक पुराना सवाल है, लेकिन केवल कुछ जोड़ने के लिए: मैंने यह भी देखा और ऐसा लगता है कि ऐसा होता है जब उपयोगकर्ता को कम कनेक्टिविटी पर ऑटो टाइम बदल जाता है। मुझे लगता है कि जब वाई-फाई, नेटवर्क से लगातार स्विचिंग होती है और जब भी आप कनेक्शन प्राप्त करते हैं तो कोई भी समय रीसेट नहीं होता है।जैसा कि आपने उत्तर में लिखा था - मुख्य देरी तिथि प्रारूप वस्तुओं और इसी तरह की पुनरावृत्ति से आता है, इसलिए स्पष्ट समाधान समाधान करने से पहले जोन की तुलना करना होगा। – vladimir123

उत्तर

7

मैं अभी भी क्यों समय क्षेत्र परिवर्तन नहीं जानता कि अगर और समय सेट को अक्सर बुलाया जाता है, लेकिन मैं एक समाधान तैयार करने में सक्षम था, जो मुझे वास्तव में प्रतिक्रिया की आवश्यकता होने पर पता लगाने देता है।

इसके अलावा मैं केवल समय-समय पर परिवर्तनों को सुन रहा हूं।

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 

String oldTimezone = prefs.getString(PREF_TIMEZONE, null); 
String newTimezone = TimeZone.getDefault().getID(); 

long now = System.currentTimeMillis(); 

if (oldTimezone == null || TimeZone.getTimeZone(oldTimezone).getOffset(now) != TimeZone.getTimeZone(newTimezone).getOffset(now)) { 
    prefs.edit().putString(PREF_TIMEZONE, newTimezone).commit(); 
    Logger.log("TimeZone time change"); 
    //update alarms 
} 

मैं क्षेत्र के समय की जांच जोड़ा, क्योंकि बहुत बार मुझे पता चला है कि हालांकि क्षेत्रों बदलने के लिए, वे समय में किसी भी तरह से अलग नहीं है। इसके अलावा कुछ उपयोगकर्ताओं ने दावा किया कि वे कहीं भी कहीं भी यात्रा नहीं करते थे जब ज़ोन में कई बदलावों का पता चला था - केवल काम करने और वापस नियमित यात्राएं।

अनियंत्रित परिचालनों की सीमित संख्या की जांच करें।

+0

अच्छा काम, मैं एक समान समाधान पर पहुंचा, लेकिन आईडी के बजाय ऑफ़सेट जारी रखा। मैंने समय अपडेट के लिए कुछ ऐसा किया जहां मैंने "ऑटो टाइम" सेटिंग सक्षम होने पर अद्यतनों को अनदेखा किया, यह मानते हुए कि टाइमज़ोन और डीएसटी संबंधित समय परिवर्तनों के साथ समय-समय पर परिवर्तन होगा, केवल मामूली समायोजन छोड़कर। जब "ऑटो टाइम" अक्षम होता है तो मैं हर समय परिवर्तनों का जवाब देता हूं क्योंकि जब वे होते हैं तो वे काफी दुर्लभ और महत्वपूर्ण होने की संभावना रखते हैं। –

+0

यह उत्तर सही लगता है ... हालांकि, क्या स्थिति गलत नहीं है? जब आप दो ऑफसेट की तुलना कर रहे हैं, तो यह "! =" के बराबर नहीं होना चाहिए? –

+0

@ फेरननेगर आप सही हैं। मेरे पास ऐसा लगभग एक साल तक था और केवल दो उपयोगकर्ताओं ने शिकायत की थी। और फिर भी मैंने यह नहीं देखा ... मुझे सुधारने के लिए Thx – Koger

0

बचें सुन:

<action android:name="android.intent.action.TIME_SET" /> 
<action android:name="android.intent.action.TIMEZONE_CHANGED" /> 

ऐसा लगता है जब समय निर्धारित नहीं होता है और न ही टाइमज़ोन बदल जाता है तो उन्हें नियमित रूप से भी बुलाया जाता है। मुझे संदेह है कि यह फोन की सेटिंग्स में "उपयोग समय क्षेत्र और समय" का उपयोग कर उपयोगकर्ता से जुड़ा हुआ है।

तुम सच में करने के लिए आप की जाँच करनी चाहिए इन प्रसारण के लिए सुनने जरूरत है, तो समय वास्तव में काफी बदल गया है या अगर इसकी सिर्फ नेटवर्क से एक millisecond सुधार समय

प्रदान की
+0

यह निर्धारित करने के लिए कि "वास्तव में बदल गया है" समय "मैं" ऑटो टाइम "सेटिंग मान रखता हूं और केवल समय परिवर्तन घटनाओं का जवाब देता हूं जब" ऑटो टाइम "अक्षम होता है (साथ ही साथ स्थिर सेटिंग मान में परिवर्तन)। @ कोगर का समाधान टाइमज़ोन परिवर्तन निगरानी के लिए अच्छा IMHO है (केवल जीएमटी ऑफ़सेट में बदलावों के लिए प्रतिक्रिया दें)। –

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