2013-11-28 17 views
5

मुझे एक एपविजेट है कि मैं किसी गतिविधि से अपडेट करने का प्रयास कर रहा हूं।AppWidgetManager.getAppWidgetIds गतिविधि में एक खाली सूची देता है

ऐसा करने के लिए, मुझे एपविजेट आईडी चाहिए।

मैंने AppWidgetManager.getAppWidgetIds का उपयोग किया है लेकिन यह हमेशा एक खाली सूची देता है।

मैंने यह सुनिश्चित करने के लिए AppWidgetManager.getInstalledProviders भी उपयोग किया है कि मेरा ComponentName सही है, लेकिन फिर भी मुझे एक खाली सूची मिलती है।

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

क्या इसे हल करने का कोई और तरीका है? या विजेट को अद्यतन करने का एक और तरीका?

मेरे कोड:

ComponentName name = new ComponentName(packageName, boardcastReceiverClass); 
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); 
int[] ids = appWidgetManager.getAppWidgetIds(name); 
if (ids != null && ids.length > 0) { 
    getApplicationContext().sendBroadcast(getUpdateIntent(ids[0])); 
} 

धन्यवाद।

अद्यतन: मुझे यह उल्लेख करना चाहिए कि मेरा AppWidgetProvider लाइब्रेरी प्रोजेक्ट में है। घटक नाम के अनुसार मुझे getInstalledProviders के साथ मिलता है, मैंने लाइब्रेरी के पैकेज नाम के साथ अपने ऐप का पैकेज नाम और क्लास नाम का उपयोग किया।

+0

शेयर जहां आपको लगता है गलती है ... –

+0

getAppWidgetIds (खाली सूची वापस आ जाएगी, तो उपयोगकर्ता को सक्षम नहीं किया/होम स्क्रीन पर अपने विजेट स्थापित। .. –

+0

@ गोपालराव हाँ, मुझे पता है। जब विजेट होम स्क्रीन पर था तब मैंने इसका परीक्षण किया। – Ran

उत्तर

12

आप आईडी

appWidgetManager.updateAppWidget(new ComponentName(this.getPackageName(),Widget.class.getName()), views); 

जानने के बिना अपने विजेट का उपयोग कर सकते यह आपको 'appWidgetID' पता करने के लिए बिना विजेट का उपयोग करते हैं । फिर गतिविधि में:

Intent intent = new Intent(this, Settings.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); 

views.setOnClickPendingIntent(R.id.btnActivate, pendingIntent); 

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); 
appWidgetManager.updateAppWidget(new ComponentName(this.getPackageName(), Widget.class.getName()), views); 
finish(); 
+0

यह मेरे प्रश्न के उत्तर की तरह लगता है, लेकिन मुझे पैरामीटर की पहचान करने में परेशानी हो रही है। आपके द्वारा उल्लिखित पैरामीटर [appWidgetManager.updateAppWidget (नया घटक नाम (this.getPackageName(), widget.class.getName()), विचार);], सबसे पहले विजेट विजेट विजेट प्रदाता है? विजेट कॉन्फ़िगरेशन? या विजेट से एक सेवा? और दूसरा, विचार, मैं किसी भी विचार वस्तुओं में गुजर रहा हूं, विचारों का क्या अर्थ है? सेवा वर्ग के भीतर एक दृश्य का उदाहरण क्या होगा? आपकी मदद के लिए अग्रिम धन्यवाद! – Silmarilos

+0

विचारों को स्क्रैच करें, मुझे पता चला कि इसका मतलब रिमोट व्यू है। – Silmarilos

0

एप्लिकेशन विजेट आईडी प्राप्त करने के .. कोड

नीचे इस का उपयोग

onReceive() विधि कोड

नीचे इस का उपयोग
int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, 
AppWidgetManager.INVALID_APPWIDGET_ID); 
onUpdate में

() आप पहले से ही पैरामीटर के रूप में id की सूची प्राप्त!

आप गतिविधि उपयोग से यह अपडेट करना चाहते हैं इस

Intent intent = new Intent(this, [activityname].class); 
    intent.setAction("android.appwidget.action.APPWIDGET_UPDATE"); 
    int ids[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), [activityname].class)); 
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids); 
    sendBroadcast(intent); 
+0

मैं रिसीवर से नहीं, गतिविधि से विजेट को अपडेट करने का प्रयास कर रहा हूं, इसलिए मेरे पास 'ऑन रीसीव' नहीं है। – Ran

1

मैं कुछ इसी तरह काम कर रहा हूं और यहां काम करने के लिए यह सबसे आसान तरीका है।

आपकी सेवा श्रेणी में डाल भी आप एक विजेट अद्यतन ट्रिगर करना चाहते हैं: के नाम से जाना

Intent brIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
sendBroadcast(brIntent); 

यह onReceive कारण होगा (संदर्भ संदर्भ, आशय आशय) विधि अपने AppWidgetProvider कक्षा में। फिर ऑनसीव विजेट को अपडेट करने के लिए कोड कॉल कर सकते हैं। एक नमूने के लिए, मैंने यहां उपयोग किया है। मैं केवल विजेट का पाठ अद्यतन करने कर रहा हूँ:) अपने कोड

 //Sample output text 
    String text = "My cat's name is wiggles."; 
    //get an AppWidgetManager 
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
    //getComponentName 
    ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class); 
    //get the IDs for all the instances of this widget 
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
    //update all of the widgets 
    for (int widgetId : allWidgetIds) { 
     //get any views in this instance of the widget 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
     // Set the text 
     remoteViews.setTextViewText(R.id.widgetField, text); 
     //update the widget with any change we just made 
     appWidgetManager.updateAppWidget(widgetId, remoteViews); 
    } 
संबंधित मुद्दे