7

मेरे ऐप में एक विजेट है जो आज की तारीख दिखाता है और मध्यरात्रि में अपडेट होने की आवश्यकता है। विजेटआधी रात को ऐप विजेट कैसे अपडेट करें?

<manifest> 
    ... 
    <application> 
     ... 
     <receiver 
      android:name=".MyWidgetProviderClass" 
      android:label="MyLabel" > 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.appwidget.provider" 
       android:resource="@xml/widget_icon_info" /> 
     </receiver> 
    </application> 
</manifest> 

और विजेट जानकारी फ़ाइल के रूप में प्रकट में परिभाषित किया गया है

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:initialLayout="@layout/my_layout" 
    android:minHeight="40dp" 
    android:minWidth="294dp" 
    android:updatePeriodMillis="3600000" > 
</appwidget-provider> 

इस विजेट का कारण बनता है आधी रात और 1 के बीच कभी भी अपडेट होने की है, लेकिन मैं आधी रात के करीब अपडेट होने की करना चाहते हैं तो मैं ऐप का आशय रिसीवर

<receiver 
    android:name=".MyWidgetUpdaterClass" 
    android:enabled="true" > 
    <intent-filter> 
     <action android:name="MyAction" /> 
     </intent-filter> 
</receiver> 

और एक स्थिर विधि जोड़ा

public static void setMidngintAlarms(Context context) { 
    Intent intent = new Intent("MyAction"); 
    PendingIntent pendingIntent = 
     PendingIntent.getBroadcast(context, 0, intent, 0);    
    long interval = 24*60*60*1000;   
    long firstTime = SystemClock.elapsedRealtime() + 
     millisecondsToNextMidnight(); 
    AlarmManager am = (AlarmManager)context.getSystemService(
     Context.ALARM_SERVICE); 
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
        firstTime, interval, pendingIntent); 
} 

(चूंकि एक ही इरादे से अलार्म मैनेजर अनुरोध एक-दूसरे को ओवरराइट करने के अनुरोध करते हैं तो सेटमिडिंगिंट अलार्म को कई बार कॉल करने में कोई नुकसान नहीं होता है)।

मैंने कुछ स्थानों से सेट मिडनाइट अलार्म() को ऐप की मुख्य गतिविधि से, ऐपविजेटप्रोवाइडर के ऑनअपडेट() आदि से कॉल करने का प्रयास किया)। सबकुछ अच्छी तरह से काम करता है और अलार्म प्रबंधक इरादे प्राप्त होते हैं और विजेट अपडेट किया जाता है, लेकिन जब तक ऐप चलता है तब तक। अगर मैंने ऐप को मार दिया, तो विगेट्स मध्यरात्रि में अपडेट करना बंद कर देता है।

क्या कोई विचार मध्यरात्रि पर विजेट को अपडेट करने का तरीका बताता है? क्या मुझे सेवा जोड़ने की ज़रूरत है? यदि हां, तो कैसे? कोई उदाहरण?

मैं थोड़ा आश्चर्यचकित हूं कि इस बुनियादी कार्यक्षमता को काम करने के लिए यह कितना छोटा नहीं है।

+0

विजेट अभी भी अपडेट होना चाहिए क्योंकि आप इसके लिए अलार्म सेट कर रहे हैं। तो इससे कोई फर्क नहीं पड़ता कि ऐप चल रहा है या नहीं। यदि डिवाइस पुनरारंभ होता है तो यह माटर करता है और आप शुरुआत से अपना अलार्म पंजीकृत नहीं करते हैं। –

+0

जब एक दोहराने वाला अलार्म सेट होता है और इसे कभी भी रद्द नहीं किया जाता है। एंड्रॉइड सिस्टम किस स्थिति में इसे रद्द करता है, अगर बिल्कुल? मुझे प्रासंगिक जानकारी नहीं मिल सका। उदाहरण के लिए, क्या यह उस गतिविधि या सेवा से जुड़ा हुआ है जिसने इसे भेजा है या यह हमेशा के लिए स्वतंत्र रूप से रहता है? – user1076637

उत्तर

0

मैं द्वारा इस समस्या को हल:

  1. एक सेवा Intent.ACTION_TIME_TICK संदेश को सुनने के लिए शुरू करो। फिर समय टिके जाने पर विजेट को प्रसारण भेजें। (हर मिनट में)।

  2. विजेट और न्यायाधीश मौसम में प्रसारण प्राप्त करें यह द्वारा आधी रात है:

कोड:

if (MyWidget.BROADCAST_TIME_TICK.equals(action)) { 
     //If it's midnight, then update. 
     int hour = Calendar.getInstance().get(Calendar.HOUR); 
     int minute = Calendar.getInstance().get(Calendar.MINUTE); 
     Utils.log(TAG, "time is : " + hour+":" + minute); 
     if (!(hour == 0 && minute == 0)) { //Only update at midnight's time tick. 
      return; 
     } else { 
      //Do the midnight stuff. 
     } 
    } 
0

अपने प्रकट विजेट रिसीवर

<intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> 
      <action android:name="android.intent.action.DATE_CHANGED" />... 

के विज्ञापन इस तिथि में परिवर्तन आपके ऑनसाइट() को "android.intent.action.DATE_CHANGED" के साथ आग लगने के लिए ट्रिगर करेगा कार्रवाई

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