我试图从任何广播服务中捕获我的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);
}
}
也许这是错误的方式?如何更好地组织小工具和工厂之间的广播?
答案 0 :(得分:0)
这是我的小部件提供商
这应该会崩溃,因为AppWidgetProvider
是BroadcastReceiver
,并且您无法在提供给registerReceiver()
的{{1}}上致电Context
onReceive()
1}}。
无论如何,一旦BroadcastReceiver
返回,您的onUpdate()
实例及其注册的接收者就会消失。如果您的AppWidgetProvider
的生命时间超过一毫秒,那么您就错了。
我试图通过广播
的任何服务在我的小部件提供程序中捕获回调
我不太确定你想要完成什么。请记住,服务或其他任何内容都可以通过AppWidgetProvider
直接更新应用小部件。如果您有用于更新app小部件内容的公共代码,请将其放在AppWidgetManager
方法或实用程序类中,并从static
和服务中使用它(或者更新应用程序所需的任何其他内容)插件)。