Android AppWidgetProvider收听来自服务

时间:2016-05-26 21:15:18

标签: android appwidgetprovider

我试图从任何广播服务中捕获我的widget提供程序中的回调。 但这并不奏效。

这是我的小部件提供商

public class MyProvider extends AppWidgetProvider {

    final String LOG_TAG = "States";
    public final static String BROADCAST_ACTION = "action";
    BroadcastReceiver br;

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        br = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                Log.d(LOG_TAG, "receive intent"); // No fire here!!

            }
        };
        IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION);
        context.registerReceiver(br, intFilt);
    }
}

这是我想要回调的remoteViewsFactory。

public class MyFactory implements RemoteViewsFactory {

    Context context;
    int widgetID;
    final String LIST_READY = "list_ready";
    public final static String BROADCAST_ACTION = "action";

    @Override
    public void onDataSetChanged() {
        Intent intent = new Intent(BROADCAST_ACTION);
        intent.putExtra(LIST_READY, 1);
        context.sendBroadcast(intent);
    }
}

也许这是错误的方式?如何更好地组织小工具和工厂之间的广播?

1 个答案:

答案 0 :(得分:0)

  

这是我的小部件提供商

这应该会崩溃,因为AppWidgetProviderBroadcastReceiver,并且您无法在提供给registerReceiver()的{​​{1}}上致电Context onReceive() 1}}。

无论如何,一旦BroadcastReceiver返回,您的onUpdate()实例及其注册的接收者就会消失。如果您的AppWidgetProvider的生命时间超过一毫秒,那么您就错了。

  

我试图通过广播

的任何服务在我的小部件提供程序中捕获回调

我不太确定你想要完成什么。请记住,服务或其他任何内容都可以通过AppWidgetProvider直接更新应用小部件。如果您有用于更新app小部件内容的公共代码,请将其放在AppWidgetManager方法或实用程序类中,并从static和服务中使用它(或者更新应用程序所需的任何其他内容)插件)。