2012-04-27 3 views
1

J'essaie de construire mon premier widget android - c'est une icône simple, sur laquelle lorsque je clique sur quelque chose hapens - sur "quelque chose" j'utilise le service. Tout va bien, mais j'ai un petit problème, que je ne comprends pas. Cela fonctionne très bien:Les services Android dans un fichier séparé ne fonctionnent pas

CLASS MYWIDGET.JAVA 
------------------------------------------------ 
public class MyWidget extends AppWidgetProvider { 

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction() == null) context.startService(new Intent(context, UpdateService.class)); 
    else super.onReceive(context, intent); 
} 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    context.startService(new Intent(context, UpdateService.class)); 
} 

public static class UpdateService extends IntentService { 

    public UpdateService() { 
     super("MyWidget$UpdateService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent arg0) { 
     ComponentName me = new ComponentName(this, MyWidget.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(this); 
     manager.updateAppWidget(me, buildUpdate(this)); 
    } 

    private RemoteViews buildUpdate (Context context) { 
     // i'm doing something here 
    } 
} 

}

mais quand j'extrais UpdateService dans un fichier séparé, il ne fonctionne pas:

CLASS MYWIDGET.JAVA 
------------------------------------------------ 
public class MyWidget extends AppWidgetProvider { 

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction() == null) context.startService(new Intent(context, UpdateService.class)); 
    else super.onReceive(context, intent); 
} 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    context.startService(new Intent(context, UpdateService.class)); 
} 

}

CLASS UPDATESERVICE.JAVA 
------------------------------- 
public class UpdateService extends IntentService { 

    public UpdateService() { 
     super("UpdateService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent arg0) { 
     ComponentName me = new ComponentName(this, MyWidget.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(this); 
     manager.updateAppWidget(me, buildUpdate(this)); 
    } 

    private RemoteViews buildUpdate (Context context) { 
     // i'm doing something here 
    } 
} 

}

Cette version ne marche pas travail - quand je clique sur l'icône du widget, aucune méthode dans le service de mise à jour n'est jamais appelée. Où devrait être le problème?

Répondre

1

Si vous déplacez ou renommez la classe de service, vous devrez refléter cette modification dans votre AndroidManifest.xml.

+0

ouais, je remarqué en même temps u écrit;) Qu'est-ce que une erreur stupide ... Je devrais avoir plus de pauses pendant le travail;) THX, problème résolu – qkx

1

Ajouter

<service android:name=".UpdateService" /> 

à votre manifest.xml (peut-être ont u'll pour définir le nom du package juste avant le nom lui-même)

Questions connexes