app widget 在8.0以上收不到广播问题解决

AppWidget的基础知识可以参考网上也有的资料,相对比较实用的可以看看这篇:

app widget简单用法之音乐播放器桌面控件

但在实际调测过程中,8.0版本以上的手机死活收不到service发过来的ACTION消息,试了6.0和7.0时没有问题的。查了android官方的一些说法,在8.0以上广播机制有所变化,sendbroadcast前要指定下receiver的类(AppwidgetProvider本质上还是一个receiver),比如:在MyAppwidgetProvider里onUpdate时指定了一个按键的事件:

RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.myappwidget);

Intent intent_count = new Intent();

intent_count.setAction(Constant.ACTION_COUNT); 

PendingIntent pendingIntent_count = PendingIntent.getBroadcast(context, 0, intent_count, 0); 

remoteViews.setOnClickPendingIntent(R.id.wvbtn_t1, pendingIntent_count);

如果此时的广播是发给MyAppwidgetProvider自己的,则需要添加:

intent_count.setComponent(new ComponentName(context,MyAppWidgetProvider.class));//必须写

如果此时的广播是发给其他的service或者activity,则不要添加setComponent,调试发现加了广播收不到。

在其他的service或者activity里自己写个receiver,在onReceive里添加:其他代码可以参考上面的播放器文章

new_intent.setComponent(new ComponentName(context,MyAppWidgetProvider.class));//8.0以上版本必须写

其他的如静态注册按照常规实现即可。目前仅发现这一个问题,后续再补充吧。

你可能感兴趣的:(app widget 在8.0以上收不到广播问题解决)