2010-01-16 18 views
33

मैं होम स्क्रीन पर प्रदर्शन के लिए एक साधारण विजेट को लागू करने की कोशिश कर रहा हूं। जिस समस्या का मैं अनुभव कर रहा हूं वह यह है कि जब मैं विजेट स्थापित करता हूं तो अद्यतन पर केवल एक बार कॉल किया जा रहा है। विन्यास नीचे है। नोट: मैं अपडेट अवधि को 20 सेकेंड पर नहीं छोड़ूंगा क्योंकि मुझे पता है कि बैटरी को मार डालेगा (केवल परीक्षण)।एंड्रॉइड विजेट अपडेट नहीं किया जा रहा

विन्यास:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="294dp" 
    android:minHeight="72dp" 
    android:updatePeriodMillis="20000" 
    android:initialLayout="@layout/my_custom_app_widget">` 
</appwidget-provider>` 

प्रकट अंश:

<receiver android:name="MyCustomWidgetProvider"> 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
     android:resource="@xml/my_custom_app_widget_info" /> 
</receiver> 

मैं निम्नलिखित व्यवहार को देख कर रहा हूँ जब मैं विजेट स्थापित: onReceive पर मेरे WidgetProvider वर्ग तो कहा जाता है तो onReceive onEnabled, तो onUpdate।

उसके बाद विजेट प्रदर्शित करता है और अद्यतन पर कभी भी कॉल नहीं किया जाता है। जब मैं अपडेट को बुलाता हूं और सब कुछ एक्सएमएल में सेट किया जाता है (उदा। अपडेट अवधि) सही होता है तो मैं प्रदाता की सेटिंग्स का भी निरीक्षण करता हूं।

उत्तर

67

जबकि आपके पास android:updatePeriodMillis 20 सेकंड तक सेट है, न्यूनतम वास्तविक समय 30 मिनट है। इसलिए, यदि आप अपने परीक्षण के दौरान कोई अपडेट देखने के लिए 30 मिनट का इंतजार नहीं कर रहे हैं, तो आपको थोड़ा और इंतजार करना होगा।

+3

धन्यवाद। मैं दस्तावेज़ों के माध्यम से लाइन से लाइन जा रहा था और उन्होंने इसका जिक्र नहीं किया। हालांकि, आपके उत्तर के आधार पर मैंने गड़बड़ कर देखा और देखा कि मैं 1.5 दस्तावेज़ देख रहा हूं। न्यूनतम दस्तावेज किया गया है और स्पष्ट रूप से उच्च अद्यतन आवृत्ति की आवश्यकता होने पर अलार्म दृष्टिकोण है। धन्यवाद। – phogel

+2

घड़ी या मौसम अपडेट विजेट के बारे में कैसे? उन्हें कैसे अपडेट किया जाता है। –

+3

यदि आप में से कोई भी एपीआई बना रहा है: ऐसा नहीं है कि आप इसे कैसे करते हैं। यदि मूल्य सीमा पर प्रतिबंध हैं, तो संकलन समय या सबसे खराब केस रनटाइम में विफल होने से उपभोक्ता को यह बिल्कुल स्पष्ट करें। – Nilzor

18

एसडीके से:

नोट: जब यह एक अद्यतन के लिए समय (के रूप में updatePeriodMillis द्वारा परिभाषित) है डिवाइस सो रहा है, तो डिवाइस को आदेश अद्यतन प्रदर्शन करने के लिए जागृत होगा। यदि आप प्रति घंटे एक से अधिक बार अपडेट नहीं करते हैं, तो यह संभवतः बैटरी जीवन के लिए महत्वपूर्ण समस्याएं नहीं पैदा करेगा।

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

ऐसा करने के लिए, AlarmManager का उपयोग करके, AppWidgetProvider प्राप्त करने के इरादे से अलार्म सेट करें। अलार्म प्रकार को ELAPSED_REALTIME या RTC पर सेट करें, जो डिवाइस जागने पर केवल अलार्म वितरित करेगा। फिर updatePeriodMillis से zero ("0") सेट करें।

और जब एसडीके 1.6+:

नोट: अपडेट updatePeriodMillis साथ अनुरोध किया एक बार हर 30 मिनट से भी अधिक वितरित नहीं किया जाएगा।

1

डुडुली ने कहा ... अलार्म प्रबंधक का उपयोग अपने विजेट वर्ग के लिए एक इरादा भेजने के लिए करें, अगर इसे नहीं पता कि this guide का पालन कैसे करें, तो इसे अपने ऑनसाइट विधि में प्राप्त होगा। यह मेरे और अन्य के लिए काम करता है

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