2010-11-29 13 views
6

मैं एंड्रॉइड विजेट पर काम कर रहा हूं और यह एपीआई लेवल 5 या इससे अधिक में बहुत अच्छा काम करता है। यह एपीआई लेवल 1 या 2 में बिल्कुल समर्थित नहीं है। इसे 3 और 4 में बिल्कुल ठीक काम करना चाहिए, लेकिन किसी कारण से विजेट अपडेट नहीं होता है।एपीआई 3 या 4 में मेरा ऐप विजेट अपडेट क्यों नहीं होता है?

ऑन अपडेट विधि को त्रुटियों के बिना बुलाया जाता है और निष्पादित करता है; हालांकि, 3 और 4 में यह विजेट के पाठ को नहीं बदलता है। मैं एक नुकसान पर बहुत ज्यादा हूँ। कोई विचार? अपने अद्यतन विधि के अंत आप सुपर कॉल करने की आवश्यकता पर

:

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 

    DataAccess helper = new DataAccess(context); 
    String text = helper.getCurrentText(); 
    helper.close(); 

    if (text != null) 
     views.setTextViewText(R.id.widget_text, text); 

    Intent intent = new Intent(context, WidgetDetailsActivity.class); 
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0); 
    views.setOnClickPendingIntent(R.id.widget, pending); 

    appWidgetManager.updateAppWidget(appWidgetIds, views); 
} 
+0

क्या आपने विजेट को डीबग किया है? क्या आपको अपेक्षित पाठ मिलता है? क्या लंबित इरादा काम करता है? क्या ऑनअपडेट बिल्कुल निष्पादित है? – Kaj

+0

हाँ, मैंने डीबगर संलग्न किया और पाठ बदलने के अलावा सब कुछ काम किया। मैं रंग, आकार, व्यवहार, और उन सभी को बदल सकता था लेकिन मैं पाठ को बदल नहीं सका। मैंने वास्तव में लंबे समय से 1.5 या 1.6 में कोशिश नहीं की है क्योंकि वह संस्करण अधिक से अधिक अप्रचलित हो रहा है। –

+0

अजीब। मेरे पास विजेट हैं जो 1.5+ के साथ काम करते हैं, और ग्रंथों को अपडेट करने में कोई समस्या नहीं है। – Kaj

उत्तर

0

इस प्रयास करें।

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 

    DataAccess helper = new DataAccess(context); 
    String text = helper.getCurrentText(); 
    helper.close(); 

    if (text != null) 
     views.setTextViewText(R.id.widget_text, text); 

    Intent intent = new Intent(context, WidgetDetailsActivity.class); 
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0); 
    views.setOnClickPendingIntent(R.id.widget, pending); 

    appWidgetManager.updateAppWidget(appWidgetIds, views); 

    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 
+0

मैंने कोशिश की। अभी भी कोई भाग्य नहीं है। यह दूरस्थ विचारों को निष्पादित करने के लिए प्रतीत नहीं होता है। –

0

आप अद्यतन पद्धति पर सेवा शुरू करने और यहाँ मैं दे onReceive और सेवा डेमो भी सेवा में अपने सभी कोड डाल दिया, की जरूरत है context.startService(new Intent(context, UpdateService.class));

public static class UpdateService extends Service { 
    @Override 
    public void onStart(Intent intent, int startId) { 
     // Build the widget update for today 
     RemoteViews updateViews = buildUpdate(this); 
     // Push update for this widget to the home screen 
     ComponentName thisWidget = new ComponentName(this, 
       Widget.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(this); 
     manager.updateAppWidget(thisWidget, updateViews); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    final RemoteViews remoteViews = buildUpdate(context); 
    ComponentName cn = new ComponentName(context, Widget.class); 
    AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteViews); 
    super.onReceive(context, intent); 
} 

जहां buildUpdate अपने विजेट अद्यतन करने के लिए विधि है कोड

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