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以上版本必须写

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 师北宸一块听听写作课。写作躲我的意义。 写作对于我的意义 我是一个再普通不过的普通人,从事着最普通的职业,过着普通...
    隆震阅读 258评论 2 1
  • 虽已入夏,山里的夜仍有凉意。坐在炉灶旁,感觉暖暖的。火光映红了老母亲的脸,我一如既往地听母亲絮絮叨叨,无非就是谁...
    胖婆阅读 468评论 0 2