基于contentprovider数据更改的Android应用程序小部件更新

基于contentprovider数据更改的Android应用程序小部件更新,android,android-widget,android-contentprovider,Android,Android Widget,Android Contentprovider,我正在尝试向launcher3应用程序添加一个小部件,它从一个单独进程中运行的contentprovider获取数据,并在小部件的listview中显示数据。每当contentprovider数据发生更改时,小部件必须更新其listview项。我正在寻找一些示例来了解它是如何工作的。有人能给我指出一些链接或示例吗?您必须手动触发更新。一种方法是向您的AppWidgetProvider发送广播意图 public class MyAppWidgetProvider extends AppWidget

我正在尝试向launcher3应用程序添加一个小部件,它从一个单独进程中运行的contentprovider获取数据,并在小部件的listview中显示数据。每当contentprovider数据发生更改时,小部件必须更新其listview项。我正在寻找一些示例来了解它是如何工作的。有人能给我指出一些链接或示例吗?

您必须手动触发更新。一种方法是向您的
AppWidgetProvider
发送广播意图

public class MyAppWidgetProvider extends AppWidgetProvider {
    private static final String REFRESH_ACTION = "com.mypackage.appwidget.action.REFRESH";

    public static void sendRefreshBroadcast(Context context) {
        Intent intent = new Intent(REFRESH_ACTION);
        intent.setComponent(new ComponentName(context, MyAppWidgetProvider.class));
        context.sendBroadcast(intent);
    }

    @Override
    public void onReceive(final Context context, Intent intent) {
        final String action = intent.getAction();

        if (REFRESH_ACTION.equals(action)) {
            // refresh all your widgets
            AppWidgetManager mgr = AppWidgetManager.getInstance(context);
            ComponentName cn = new ComponentName(context, ScheduleWidgetProvider.class);
            mgr.notifyAppWidgetViewDataChanged(mgr.getAppWidgetIds(cn), R.id.widget_list);
        }
        super.onReceive(context, intent);
    }

    ...
}

当应用程序小部件显示的数据发生变化时,
ContentProvider
只需调用
MyAppWidgetProvider.sendRefreshBroadcast(getContext())

您知道如何基本上更新小部件的视图吗?是,我在这里遵循这个示例-但是我需要更多关于如何在contentprovider数据更改时进行小部件更新的详细信息。