0

Bonjour pouvez-vous être si gentil de voir ces extraits et dites-moi pourquoi mon service ne démarre pas après avoir appelé startService(). J'essaye de créer un Widget, qui exécute un service pour tous les widgets sur l'écran. Ce service fournit une usine pour remplir une vue de liste. Je suis nouveau sur les widgets, donc si je fais quelque chose de mal, avertissez-moi.Pourquoi mon widget ne fonctionne-t-il pas?

Ceci est la classe Provider Widget:

public class MyWidProvider extends AppWidgetProvider { 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_list_view); 
     rv.setEmptyView(R.id.mywid_listview, R.id.empty_view); 
     appWidgetManager.updateAppWidget(appWidgetIds, rv); 
     Log.d("MyWidProvider", "start service <<<<<<<<<"); 
     //here I am starting the service 
     Intent intent = new Intent(context, MyWidService.class); 
     context.startService(intent); 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 

    } 

} 

c'est le service:

public class MyWidService extends RemoteViewsService { 
    Realm realm; 
    @Override 
    public MyWidFactory onGetViewFactory(Intent intent) { 
     Log.d("MyWidService", " onGetViewFactory()<<<<<<<<<<"); 
     Context context = getApplicationContext(); 
     Realm.init(context); 
     realm = Realm.getDefaultInstance(); 
     realm.isAutoRefresh(); 
     populateRealm(); 
     return new MyWidFactory(context, intent, realm); 
    } 

    private void populateRealm() { 
     realm.executeTransaction((t) ->{ 
      final Task myTask = realm.createObject(Task.class); 
      myTask.setText("this is random widget Task"); 
      final Task myTask2 = realm.createObject(Task.class); 
      myTask2.setText("this is my second widget task"); 
     }); 
    } 

} 

et c'est l'usine:

class MyWidFactory implements RemoteViewsService.RemoteViewsFactory { 
    private Context mContext; 
    private RealmResults<Task> tasks; 
    private Realm realm; 
    MyWidFactory(Context context, Intent intent, Realm realm) { 
     mContext = context; 
     this.realm = realm; 
    } 
    // Initialize the data set. 
    public void onCreate() { 
     Log.d("MyWidFactory", "onCreate() <<<<<<<<"); 
     tasks = realm.where(Task.class).findAll(); 
    } 
/*-------------------more methods-------------*/ 

} 

Répondre

0

Problème résolu. Il s'avère que j'ai oublié d'appeler certaines des méthodes ci-dessous:

Intent intent = new Intent(context, MyWidService.class); 
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 
rv.setRemoteAdapter(R.id.mywid_listview, intent); 
context.startService(intent); 
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.widget_list_text); 
appWidgetManager.updateAppWidget(appWidgetIds, rv);