AppWidget的基础知识可以参考网上也有的资料,相对比较实用的可以看看这篇:
但在实际调测过程中,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以上版本必须写
其他的如静态注册按照常规实现即可。目前仅发现这一个问题,后续再补充吧。