2011-09-22 10 views
9

अपडेट नहीं कर रहा है तो, मुझे एक विजेट मिला है, मैं इसे हर 60 सेकंड में अपडेट करना चाहता हूं। जब विजेट को होमस्क्रीन में पहली बार जोड़ा जाता है, तो यह इसके अपडेट फ़ंक्शन को ठीक करता है। इसके अलावा यह एक अलार्ममैनेजर शुरू करना है, जो प्रत्येक 60 सेकंड में अद्यतन विधि को दोबारा शुरू कर देगा। यही वह हिस्सा है जो वास्तव में ऐसा नहीं लगता है।AppWidget alarmmanager

public class ClockWidget extends AppWidgetProvider { 

    public static String CLOCK_WIDGET_UPDATE = "com.nickavv.cleanwidget.CLEANCLOCK_UPDATE"; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetIds[]) { 
     final int N = appWidgetIds.length; 
     for (int i = 0; i < N; i++) { 
      int appWidgetId = appWidgetIds[i]; 
      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.clocklayout); 
      appWidgetManager.updateAppWidget(appWidgetId, views); 
      updateAppWidget(context, appWidgetManager, appWidgetId); 
     } 
    } 

    public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { 
     Log.d("log","Entered update cycle"); 
     //Unimportant for these purposes 
     appWidgetManager.updateAppWidget(appWidgetId, views); 
    } 


    private PendingIntent createClockTickIntent(Context context) { 
     Intent intent = new Intent(CLOCK_WIDGET_UPDATE); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, 
       intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     return pendingIntent; 
    } 

    @Override 
    public void onEnabled(Context context) { 
     super.onEnabled(context); 
     Log.d("onEnabled","Widget Provider enabled. Starting timer to update widget every minute"); 
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 60000, createClockTickIntent(context)); 
    } 

    @Override 
    public void onDisabled(Context context) { 
     super.onDisabled(context); 
     Log.d("onDisabled", "Widget Provider disabled. Turning off timer"); 
     AlarmManager alarmManager = (AlarmManager) context 
     .getSystemService(Context.ALARM_SERVICE); 
     alarmManager.cancel(createClockTickIntent(context)); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
     Log.d("onReceive", "Received intent " + intent); 
     if (CLOCK_WIDGET_UPDATE.equals(intent.getAction())) { 
      Log.d("onReceive", "Clock update"); 
      // Get the widget manager and ids for this widget provider, then 
      // call the shared 
      // clock update method. 
      ComponentName thisAppWidget = new ComponentName(context.getPackageName(), getClass().getName()); 
      AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
      int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget); 
      for (int appWidgetID: ids) { 
       updateAppWidget(context, appWidgetManager, appWidgetID); 
      } 
     } 
    } 

} 

यह कुछ ट्यूटोरियल मैं इस मामले पर खोजे गए स्थान के उत्पाद है और Android के अपने खुद के ज्ञान: यहाँ मेरी कोड है। मेरे logcats के अनुसार, यह Log.d ("onReiveive", "घड़ी अद्यतन") कभी नहीं मिलता है; लाइन। और हाँ, मेरा मैनिफेस्ट घड़ी अद्यतन इरादे से स्थापित है। धन्यवाद!

संपादित करें: अतिरिक्त जानकारी। मैंने createClockTickIntent विधि में एक लॉग लाइन डाली है, और यह बंद हो जाती है। तो मुझे लगता है कि इसका मतलब है कि मेरा एप्लिकेशन अलार्म मैनेजर.सेट रीपेटिंग लाइन चला रहा है, कोई विचार नहीं कि वास्तव में क्यों दोहराया जा रहा है।

+1

भले ही आपने वर्तनी गलती को सही करके अपनी समस्या हल की हो, फिर भी इसे पोस्ट करने के लिए धन्यवाद - यह अलार्ममैनेजर का उपयोग करने के लिए सबसे आसान और सरल प्रदर्शन है जिसे मैंने कहीं भी देखा है! वहाँ बहुत सारे जटिल समाधान हैं, लेकिन यह उन सभी के माध्यम से कटौती करता है, जो समझने और कार्यान्वित करने के लिए सरल है। धन्यवाद! – drmrbrewer

उत्तर

3

अरघघ, यह एक साधारण टाइपो था। इरादा फ़िल्टर "com.nickavv.cleanwidgets.CLEANCLOCK_UPDATE" था, और मैंने लिखा था "com.nickavv.cleanwidget.CLEANCLOCK_UPDATE"

क्या दर्द है, लेकिन हे, अब मुझे पता है।

तो, मुझे किसी भी समस्या के साथ किसी के लिए कहानी का नैतिकता: अपनी वर्तनी जांचें! इसे दो बार, या दस बार जांचें। सब कुछ पर!

+2

या बस हमेशा कॉपी/पेस्ट करें :-) (प्रश्न के लिए धन्यवाद, बीटीडब्ल्यू! यह बहुत उपयोगी था कि आपने यह कैसे किया इस) –

-4

आपको appwidget-provider बनाना है और 0.6 सेकंड पर updatePeriodMillis सेट करना है, तो यह प्रति 60 सेकंड अपडेट होगा।

<?xml version="1.0" encoding="utf-8" ?> 
<appwidget-provider 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:minWidth="146dp" 
android:initialLayout="@layout/YourLayout" 
android:updatePeriodMillis="0.6" 
android:minHeight="144dp"/> 
+1

मुझे खेद है, मुझे पता है कि यह सही नहीं है। मेरे पास शुरुआत के लिए एक एपविजेट-प्रदाता है, लेकिन अपडेटपेरियोडमिलिस को 30 मिनट से कम होने की अनुमति नहीं है, इसलिए मुझे अलार्ममेनगर का उपयोग करना है। इसके अलावा, 60 मिलीसेकंड 0.6 सेकंड होगा, 60 सेकेंड नहीं। – Nick

+0

@ निक के जवाब देने के लिए बहुत बहुत धन्यवाद, आप सही हैं, लेकिन क्या आप सुनिश्चित हैं कि अपडेटपेरियोडमिलिस 30 मिनट से कम होने की अनुमति नहीं है? क्योंकि मैं एक विजेट बनाता हूं और इसे 10 मिनट पर सेट करता हूं और यह काम करता है। –

+1

हाँ, एंड्रॉइड 1.6 – Nick

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