Передача данных из сервиса в виджет через намерения
У меня есть служба, которая вызывает намерение отправить пользовательский текст на мой 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 ответа
Я думаю, что вы должны изменить свой файл манифеста, чтобы включить две вещи:
Еще одно действие в вашем
<receiver>
чтобы указать, что у вас есть намерение войти в ваш виджетЗарегистрируйте свой сервис.
Возможно, это видео будет полезно: 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)