【问题标题】:Android AppWidgetProvider listen to the callback from serviceAndroid AppWidgetProvider 监听来自服务的回调
【发布时间】:2016-05-26 21:15:17
【问题描述】:

我正在尝试从任何带有广播的服务中捕获我的小部件提供程序中的回调。 但这不起作用。

这是我的小部件提供者

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);
    }
}

也许这是错误的方式?如何更好地组织widget和factory之间的广播?

【问题讨论】:

    标签: android appwidgetprovider


    【解决方案1】:

    这是我的小部件提供者

    这应该会崩溃,因为 AppWidgetProviderBroadcastReceiver,并且您不能在提供给 onReceive()onReceive()Context 上调用 registerReceiver()

    无论如何,一旦onUpdate() 返回,您的AppWidgetProvider 实例连同其注册的接收者都将消失。如果您的 AppWidgetProvider 存活时间超过一毫秒,那么您做错了。

    我正在尝试从任何带有广播的服务中捕获我的小部件提供程序中的回调

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

    【讨论】:

      猜你喜欢
      • 2016-10-01
      • 2016-08-25
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 2014-11-18
      • 2013-09-02
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多