Передача данных из сервиса в виджет через намерения

У меня есть служба, которая вызывает намерение отправить пользовательский текст на мой AppWidgetProvider. Для этого я использую метод onRecieve и проверяю правильность действий.

Итак, у меня есть два вопроса: первый - правильный ли это, а второй - почему мой метод onReceive никогда не вызывается?

Я добавил манифест этой следующей части

<receiver android:label="KreativBarometer Widget"
   android:name=".widget.MyWidgetProvider" >
   <intent-filter >
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>
   <meta-data
       android:name="android.appwidget.provider"
       android:resource="@xml/widget_info" />
 </receiver>

Мой AppWidgetProvider использует следующий метод onReceive

public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("APPWIDGET_UPDATE")){
        String text = intent.getStringExtra("newItemArrived");
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        views.setTextViewText(R.id.TextView01, text);
    }
    super.onReceive(context, intent);
}

и для тестирования я использую это намерение

Intent intent = new Intent("APPWIDGET_UPDATE");
intent.putExtra("newItemArrived", "Neue Frage erschienen");
sendBroadcast(intent);

2 ответа

Я думаю, что вы должны изменить свой файл манифеста, чтобы включить две вещи:

  1. Еще одно действие в вашем <receiver> чтобы указать, что у вас есть намерение войти в ваш виджет

  2. Зарегистрируйте свой сервис.

Возможно, это видео будет полезно: https://youtu.be/DJsNmS-PvD8?t=2m7s

Чтобы передать пользовательскую дату, вам нужно использовать Bundle как:

      val intent = Intent(context, ItemsCollectionRemoteViewsService::class.java)
            .apply {
                val extrasBundle = Bundle()
                extrasBundle.putSerializable(WIDGET_DATA, widgetData)
                putExtra(WIDGET_Bundle_DATA, extrasBundle)
            }
        remoteViews.setRemoteAdapter(R.id.items_list_view, intent)
Другие вопросы по тегам