Android 4.0: les widgets n'apparaissent pas?

J'ai un widget que j'ai créé contre Android 2.1 qui a été bien et la vente sur le marché.

J'ai eu un utilisateur se plaindre qu'il l'a acheté et il n'est jamais apparu sur son appareil Android 4.0.

J'ai chargé l'émulateur 4.0, l'ai exécuté à partir D'Eclipse, il a signalé une installation réussie et en fait je peux le voir listé dans l'application "Widget Preview", et je peux l'exécuter là-bas et cela semble bien, mais il n'apparaît nulle part sous "Widgets" - Je ne peux pas réellement le trouver pour le faire glisser écran d'accueil! Je suppose que c'est la même chose que l'utilisateur voit.

Une idée de ce qui se passe ici? Pourquoi est-ce bien dans 2.1 mais n'apparaît pas dans la liste sur 4.0, même après une installation réussie?

Ceci est ma mise en page widget.fichier xml, si c'est une aide:

<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>

Et le xmlwidget_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>
27
demandé sur JamieB 2012-01-10 00:44:14

5 réponses

Voici donc la solution que j'ai trouvée:

Vous avez besoin d'une activité qui apparaîtra sur le lanceur. Donc, nous avons d'abord vous Olde widget récepteur, comme ceci:

<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>

Et puis nous avons besoin d'une activité, avec le jeu principal et lanceur:

<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>

Pour autant que je sache, vous devez le faire même si votre widget est juste censé être un widget PUR sans activités associées. À tout le moins, faire une activité factice qui lance un écran qui dit " votre widget est maintenant prêt pour utilisez! Recherchez-le sous widgets et faites-le glisser vers votre écran d'accueil!"

Dans mon cas, mon widget a lancé une activité lorsque vous l'avez poussé, donc j'ai fait cette activité dans LAUNCHER / MAIN et j'ai juste ajouté une boîte de dialogue contextuelle unique qui dit essentiellement "vous pouvez l'exécuter en tant qu'application mais vous pouvez utiliser le widget à la place".

Notez que sur l'émulateur 4.0, Je n'ai jamais vu mon widget apparaître lors d'une première installation avant ce changement. Simplement avoir une activité définie sur MAIN et LAUNCHER semblait être suffisant pour faire apparaître le widget.

17
répondu JamieB 2014-09-08 18:12:22

Après des jours, j'ai trouvé la solution

Allez à l'une de vos activités qui seront lancées lorsque vous ouvrez l'application et de l'activité principale ajouter seulement cette ligne

SendBroadcast(Nouvelle intention (intention.ACTION_MAIN).addCategory(Intention.CATEGORY_HOME));

Comme exemple

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);



}

C'est tout, cela donnera au système que l'application principale est en cours d'exécution et il obtiendra le widget sur le lanceur :) ligne simple c'est ça ne modifie rien dans le manifester il suffit de garder la façon dont vous avez développé votre application qui montre widget normalement dans les versions précédentes

9
répondu Yasin Hassanien 2013-01-10 18:41:17

J'ai le même problème. Je l'ai corrigé en supprimant les balises <PreferenceScreen> dans mon appwidgetprovider.xml(located in res/xml).

3
répondu Timur Suleimanov 2012-10-17 09:05:39

Vous devez démarrer manuellement l'application associée au moins une fois pour que le widget apparaisse. Avant cela, il est dans un état non exécutable et il ne recevra pas d'émissions, etc.

1
répondu Nikolay Elenkov 2012-01-10 03:22:47

Ma solution (Widget sur 4.1.2) était de s'assurer que le widget était installé sur le stockage interne du périphérique.

Selon: Documentation Android: install-location , vous ne devez pas installer de widgets sur un stockage externe.

J'ai dû désinstaller mon widget, l'installer à nouveau et après cela j'ai vu les changements !

Lien Utile:

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

0
répondu mayo 2015-09-13 18:30:49