2012-01-09 24 views
27

मेरे पास एक एंड्रॉइड 2.1 के खिलाफ बनाया गया एक विजेट है जो बाजार में ठीक और बिक्री कर रहा है।एंड्रॉइड 4.0: विजेट दिखाई नहीं दे रहे हैं?

मेरे पास कोई उपयोगकर्ता शिकायत करता था कि उसने इसे खरीदा है और यह कभी भी अपने एंड्रॉइड 4.0 डिवाइस पर दिखाई नहीं देता है।

मैंने 4.0 एमुलेटर लोड किया, इसे ग्रहण से चलाया, यह एक सफल स्थापना की सूचना दी और वास्तव में मैं इसे "विजेट पूर्वावलोकन" ऐप में सूचीबद्ध देख सकता हूं, और मैं इसे वहां चला सकता हूं और यह ठीक लगता है, लेकिन यह "विजेट्स" के तहत कहीं भी नहीं दिखता है - मैं इसे वास्तव में होम स्क्रीन पर खींचने के लिए नहीं ढूंढ सकता! मुझे लगता है कि यह वही बात है जिसे उपयोगकर्ता देख रहा है।

कोई विचार क्या हो रहा है? 2.1 में यह ठीक क्यों है लेकिन सफल इंस्टॉल के बाद भी 4.0 पर सूची में दिखाई नहीं देता है?

यह, मेरी लेआउट \ widget.xml फ़ाइल यह है कि अगर किसी भी मदद के लिए:

<RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TextView android:layout_width="wrap_content" android:id="@+id/blankspot" android:layout_height="5dp" android:gravity="center" android:shadowDy="1" android:shadowDx="1" android:layout_centerHorizontal="true"></TextView> 
    <ImageButton android:layout_below="@+id/blankspot" android:layout_width="60dp" android:layout_height="60dp" android:id="@+id/widgetIconButton" android:layout_centerHorizontal="true" android:scaleType="centerCrop" android:src="@drawable/volumeprofilesplus" android:background="@null"></ImageButton> 
    <ImageView android:layout_width="60dp" android:layout_height="20dp" android:id="@+id/override" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:scaleType="fitXY" android:background="@null" android:src="@drawable/overredcaps" android:visibility="invisible"></ImageView> 
    <ImageButton android:layout_below="@+id/widgetIconButton" android:layout_width="70dp" android:layout_height="30dp" android:id="@+id/widgetSettingsButton" android:layout_centerHorizontal="true" android:scaleType="fitXY" android:src="@drawable/settings" android:background="@null"></ImageButton> 
</RelativeLayout> 

और एक्सएमएल \ widget_provider.xml:

<?xml version="1.0" encoding="utf-8"?> 
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="72dip" 
    android:minHeight="72dip" 
    android:updatePeriodMillis="0" 
    android:initialLayout="@layout/main" >  
</appwidget-provider> 
+1

कृपया पोस्ट को आपके {विजेट} .xml – Force

+0

प्रकट या प्रदाता एक्सएमएल? लेमेम कोड को सही तरीके से पेस्ट करने का तरीका बताता है ... – JamieB

+0

'लेआउट \ widget.xml' - क्या यह एक" टाइपो "है या आपका प्रदाता xml वास्तव में लेआउट फ़ोल्डर में है? बल्कि 'res/xml/widget.xml' में होना चाहिए। –

उत्तर

17

प्राप्त नहीं होगा तो यहाँ समाधान मैं के साथ आया है:

आप एक गतिविधि है कि लांचर पर दिखाई देगा की जरूरत है। तो सबसे पहले हम Ye Olde विजेट रिसीवर है, जैसे इतना:

<receiver android:name=".VolumeProfilesWidget" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />     
     <!-- Broadcast Receiver that will also process our self created action --> 
     <action android:name="net.thepurge.volumeprofiles.plus.VolumeProfilesWidget.ACTION_WIDGET_RECEIVER"/>    
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" android:resource="@xml/volumeprofiles_widget_provider" /> 
</receiver> 

और फिर हम कुछ गतिविधि की जरूरत मुख्य और लॉन्चर सेट के साथ: जहाँ तक

<activity android:name=".MainActivity" 
      android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" />     
     <action android:name="net.thepurge.volumeprofiles.plus.VolumeProfilesWidget.ACTION_WIDGET_CONFIGURE"/> 
    </intent-filter> 
</activity> 

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

मेरे मामले में, मेरे विजेट ने इसे दबाए जाने पर एक गतिविधि लॉन्च की, इसलिए मैंने उस गतिविधि को लॉन्चर/मेन में बनाया और बस एक बार पॉपअप संवाद जोड़ा जो मूल रूप से कहता है "आप इसे एप्लिकेशन के रूप में चला सकते हैं लेकिन आप इसके बजाय विजेट का उपयोग करना चाहते हैं "।

ध्यान दें कि 4.0 एमुलेटर पर, मुझे इस बदलाव से पहले पहली बार इंस्टॉल करने के लिए अपना विजेट कभी नहीं मिला था। बस मेन और लॉन्चर को एक गतिविधि सेट होने के कारण विजेट दिखाने के लिए पर्याप्त लग रहा था।

+0

क्या यह केवल एमुलेटर के साथ एक मुद्दा है या यह एंड्रॉइड 4.0 उपकरणों को भी प्रभावित करता है? –

+1

स्पष्ट रूप से यह करता है। देखें [अंक 24208] (http://code.google.com/p/android/issues/detail?id=24208) –

+3

हाँ यह डिवाइस पर भी है। मैंने पहले उस ग्राहक से इसके बारे में सुना जिसने मेरा ऐप 4.0 डिवाइस के लिए खरीदा था और उसे नहीं मिला। वह इसे रीबूट करके प्रकट करने में सक्षम था लेकिन मुझे नहीं लगता कि "चुप रहो और रीबूट करें" एक बहुत अच्छा समाधान है, दीर्घकालिक है। (हालांकि यह माइक्रोसॉफ्ट के लिए सालों से काम करता है।) – JamieB

1

आप मैन्युअल रूप से जुड़े एप्लिकेशन शुरू करने की आवश्यकता विजेट को दिखाने के लिए कम से कम एक बार। इससे पहले कि यह एक गैर runnable अवस्था में है और यह प्रसारण, आदि

+0

आह, तो यह एक संयोग हो सकता है कि मैंने इसे रीबूट पर देखा, और इसे वास्तव में विजेट पूर्वावलोकन में खोलने पर क्या मिला? विजेट पूर्वावलोकन के अलावा, हम लोगों को "संबंधित ऐप मैन्युअल रूप से प्रारंभ करने" के लिए और कैसे कह सकते हैं? तकनीकी रूप से यह सिर्फ एक विजेट है - "एप्लिकेशन" के तहत दिखाने के लिए कुछ भी नहीं है। – JamieB

+0

हो सकता है, मैंने वास्तव में इसे विस्तार से नहीं देखा है। एक साधारण परीक्षण गतिविधि जोड़ें और इसे आज़माएं। यदि यह पता चला है कि यह आवश्यक है, तो आप इसे सेटिंग्स बदलने, निर्देश देने आदि का उपयोग कर सकते हैं आदर्श नहीं, मैं सहमत हूं। –

+1

मैंने मतदान किया क्योंकि मुझे नहीं लगता कि यह कोशिश है। मेरे पास एक शुद्ध विजेट है जिसका उपयोग मैंने 2.3 और 4.1 पर किसी भी संबंधित ऐप को चलाने के बिना किया था। मुझे यह स्वीकार करना होगा कि मैं यहां हूं क्योंकि वह विजेट बाद में भद्दा हो गया, लेकिन थोड़ी देर के लिए यह 'शुद्ध विजेट' के रूप में ठीक काम करता था। – Tom

3

एक ही समस्या है। मैंने अपने appwidgetprovider.xml(located in res/xml) में <PreferenceScreen> टैग हटाकर इसे ठीक किया।

+2

मेरे पास कहीं भी वरीयता स्क्रीन टैग नहीं थे। – JamieB

9

दिनों के बाद मैं समाधान

इसलिए की सुविधा देता है अपने गतिविधियों है कि और शुरू किया जाएगा आपके द्वारा ऐप्स खोलने मुख्य गतिविधि में से किसी के पास जाओ केवल इस लाइन को जोड़ने के

sendBroadcast (नया पता लगा आशय (Intent.ACTION_MAIN) .addCategory (आशय।CATEGORY_HOME));

उदाहरण के रूप में

public class Default class extends Activity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
     sendBroadcast(new Intent(Intent.ACTION_MAIN) 
     .addCategory(Intent.CATEGORY_HOME)); 
    setContentView(R.layout.main); 



} 

यह है कि, इस प्रणाली है कि मुख्य अनुप्रयोग अभी चल रहा है दे देंगे और यह लांचर :) सरल रेखा है कि यह में कुछ भी बदलाव न करें के लिए बाहर विजेट मिल जाएगा प्रकट अभी जिस तरह कि पिछले संस्करणों < 4.x

+0

यह काम करता है। धन्यवाद। –

+0

मेरे लिए भी काम किया – Coderji

0

मेरे समाधान (विजेट 4.1.2 पर) में normaly विजेट आपको दिखाता है कि उर एप्लिकेशन विकसित रखना सुनिश्चित करें कि विजेट आंतरिक उपकरण संग्रहण पर स्थापित किया गया था होना था।

के अनुसार: Android Documentation: install-location, आपको बाहरी संग्रहण पर विजेट इंस्टॉल नहीं करना चाहिए।

मुझे अपने विजेट को अनइंस्टॉल करना पड़ा, इसे फिर से इंस्टॉल करना पड़ा और उसके बाद मैंने बदलाव देखा!

उपयोगी लिंक:

http://www.technipages.com/fix-android-app-widgets-not-appearing-on-widget-list

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

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