हम कोड के माध्यम से विजेट को सक्षम या अक्षम करना चाहते हैं। जब हम "अक्षम" कहते हैं तो हमारा मतलब है कि किसी एप्लिकेशन में पंजीकृत एक विजेट उपयोगकर्ता को उपलब्ध विजेट्स की सूची में दिखाई नहीं दे सकता है जब वे विजेट को अपनी होम स्क्रीन पर जोड़ने का प्रयास करते हैं। दुर्भाग्यवश, उत्तर के बिना कई बार यह सवाल पूछा गया है।गतिशील रूप से विजेट को सक्षम या अक्षम करने से
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(new ComponentName("com.example.android.apis", ".appwidget.ExampleBroadcastReceiver"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, // or DISABLED
PackageManager.DONT_KILL_APP);
लेकिन यह काम नहीं करता है:
एक अलग विजेट सवाल जो सुझाव दिया है कि यह विजेट निष्क्रिय करने के लिए पैकेज मैनेजर उपयोग संभव हो गया था करने के लिए एक प्रतिक्रिया डायने Hackborn से हुई थी। विजेट घटक विजेट की सूची में अभी भी दिखाई देगा। हो सकता है कि AppWidgetService है, जो उपलब्ध विजेट सूची लोड करता है, उपलब्ध विजेट की इस सूची कैश (\ src \ आधार \ सेवाओं \ जावा \ कॉम \ एंड्रॉयड \ सर्वर पर एंड्रॉयड स्रोत के Base.git में स्थित है)। यदि यह मामला था, तो उपर्युक्त कोड जो विजेट घटक को सक्षम या अक्षम करता है, डिवाइस रीसेट के बाद काम करेगा क्योंकि कोई कैश नहीं होगा; ऐसा नहीं होता।
मैंने AppWidgetProvider के कुछ तरीकों को ओवरराइड करने की कोशिश की है, जैसे किसी भी ईवेंट को फ़िल्टर करना। मुझे नहीं लगता कि यह कहीं भी जाएगा, क्योंकि ऐपविड्ज सेवा, जो सूची को पॉप्युलेट करती है, स्टार्टअप पर ACTION_APPWIDGET_UPDATE कार्रवाई को पकड़ने के लिए पैकेज प्रबंधक का उपयोग करती है और जब पैकेज जोड़ा जाता है (यानी एक नया ऐप है स्थापित)। एकमात्र ऐसा समय है जब प्रदाता इस सूची से हटाया गया है ACTION_PACKAGE_REMOVED प्रसारण पर है। इसलिए दिया गया है कि प्रदाता हमेशा घटक की सक्षम/अक्षम स्थिति की परवाह किए बिना, मैंने वास्तविक सूची गतिविधि को देखा है जो लॉन्चर ऐप से दिखाया गया है जब उपयोगकर्ता लंबे समय तक डेस्कटॉप पर क्लिक करता है और जोड़ता है एक विजेट: सेटिंग्स में AppWidgetPickActivity com.android.settings में सेटिंग्स। जीआईटी। यह, दुर्भाग्य से, सूची सीधे AppWidgetService से, भरता घटक के सक्षम की स्थिति के लिए किसी भी छानने के बिना: शून्य putInstalledAppWidgets (सूची आइटम) { सूची स्थापित = mAppWidgetManager.getInstalledProviders(); putAppWidgetItems (स्थापित, शून्य, आइटम); }
मुझे यह देखना अच्छा लगेगा कि किसी ने इस बाधा को दूर किया है या नहीं। शायद मैं गलत तरीके से इसके बारे में जा रहा हूं। मैं चाहता हूं कि विजेट को उपयोगकर्ता को उपलब्ध विजेट्स की सूची से हटा दें, जब वे को अपनी होम स्क्रीन पर विजेट जोड़ें।
3 साल के बाद इस मुद्दे पर किसी भी अद्यतन:
यहाँ मैं बनाया सहायक विधि है? –