0

Hallo können Sie so freundlich sein, zu sehen, Snippets und sagen Sie mir, warum mein Dienst nicht nach dem Aufruf startService() starten. Ich versuche ein Widget zu erstellen, das einen Dienst für alle Widgets auf dem Bildschirm ausführt. Dieser Service stellt eine Factory zum Ausfüllen einer Listenansicht bereit. Ich bin neu in Widgets, also wenn ich etwas falsch mache, warne mich bitte darüber.Warum läuft mein Widget nicht?

Dies ist die Widget-Provider-Klasse:

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

    } 

} 

dies ist der 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"); 
     }); 
    } 

} 

und dies ist die Fabrik:

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

} 

Antwort

0

Problem behoben. Stellt sich heraus, ich habe vergessen, einige der folgenden Methoden aufzurufen:

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