Tôi có một AppWidget có một StackView chứa trong nó. Cùng với AppWidget, tôi có một dịch vụ được bắt đầu khi người dùng thêm AppWidget của tôi vào màn hình chính để thăm dò dữ liệu mới cứ hai giờ một lần. Khi dịch vụ tìm thấy dữ liệu mới, tôi cần cho nó cảnh báo AppWidget của tôi, và cũng chuyển dữ liệu đó đến RemoteViewsService (có RemoteViewsFactory của tôi) để nó có thể tạo các khung nhìn cần thiết cho dữ liệu mới.Chuyển một mảng các số nguyên từ một AppWidget đến một RemoteViewsService từ trước được kết xuất bởi RemoteViewsFactory
Hiện tại, khi dịch vụ tìm thấy dữ liệu mới, tôi đã phát sóng dữ liệu mới cho AppWidget của mình rằng dữ liệu mới đã được tìm thấy, chuyển dữ liệu đó dưới dạng một dãy số nguyên trong một mục đích.
Phương thức onReceive của tôi trong AppWidgetProvider của tôi kéo dữ liệu đó ra, và sau đó tôi đi qua quá trình thiết lập một mục đích mới được chuyển đến RemoteViews của tôi cho AppWidget. Mã mẫu bên dưới:
public void onReceive(Context context, Intent intent)
{
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, SampleAppWidgetProvider.class));
int[] sampleData = intent.getIntArrayExtra(Intent.EXTRA_TITLE);
for (int i = 0; i < appWidgetIds.length; i++)
{
// RemoteViewsFactory service intent
Intent remoteViewsFactoryIntent = new Intent(context, SampleAppWidgetService.class);
remoteViewsFactoryIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
remoteViewsFactoryIntent.setData(Uri.parse(remoteViewsFactoryIntent.toUri(Intent.URI_INTENT_SCHEME)));
remoteViewsFactoryIntent.putExtra(Intent.EXTRA_TITLE, sampleData);
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
// Sync up the remoteviews factory
rv.setRemoteAdapter(appWidgetIds[i], R.id.sample_widget, remoteViewsFactoryIntent);
rv.setEmptyView(R.id.sample_widget, R.id.empty_view);
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
Đây là lần đầu tiên hoạt động. Dữ liệu được hiển thị bởi RemoteViewsService/RemoteViewsFactory. Dữ liệu mới tiếp theo không nhấn vào hàm tạo của RemoteViewsFactory vì dịch vụ cho nhà máy đó đang chạy.
Tôi làm cách nào để cập nhật dữ liệu? Tôi cảm thấy như tôi nên được sử dụng onDataSetChanged, nhưng làm thế nào tôi sẽ truy cập vào ý định mà tôi đã vượt qua từ onWeceive của AppWidget?
Tôi đánh giá cao bất kỳ thông tin chi tiết nào về cách thực hiện điều này đúng cách. Cảm ơn.
Nếu tôi có thể nhận onGetViewFactory trong RemoteViewsService để chạy một lần nữa, tôi sẽ có thể để có được các dữ liệu mới từ mục đích truyền cho dữ liệu. Hoặc nếu tôi bằng cách nào đó có thể nói với dịch vụ để làm mới dữ liệu của nó ... – Steven