android AppWidget坑爹的现象

我想写个安卓的widget组件。我先把架子写出来。测试下按钮的点击事件是否能接收到。我用PendingIntent.getBroadcast(),然后用remoteViews.setOnClickPendingIntent来发送一个广播,然后在onReceive中接收广播的回调。但是坑爹的事情发生了。广播死活接收不到,测试了好久,换了各种方法都不行。最后我clear一下as项目。然后再部署进去就能接收到了。然后接收到了我就接着优化下代码,进一步开发。然后。。坑爹的事又发生了。我只是把刚刚的代码封装到一个方法中,再次测试,广播又是死活接收不到。然后各种测试还是不行。最后我把代码撤回到优化前的样子。原封不动!!还是接收不到。各种clear项目,各种修改,,都接收不到按钮点击的广播事件。。。这究竟是我电脑或手机的问题还是android的bug啊!!!坑爹。。。

建议你先熟悉下广播的机制。

说实话没太看懂 你是想写桌面的窗口组件(AppWidget)吗?还是就是一个简单的自定义View

安卓的广播是需要注册及解绑的,注册需要的是Context上下文,该上下文可以是Activity,Service,或者是Application,然后你要声明你接受什么广播,发送接收名称得一致,退出的时候需要解绑。按照这个思路,首先你得1确认你的广播已经注册成功和你的appWidget已经被调用并处于正常生命周期内,其次是发送接收的广播名称声明一致,再然后你得确认广播是否发送成功。

remoteview底层基于binder机制,在应用中创建的view和添加到widget的remoteview不是一个东西。
查看一下在第一次收到广播后有没有对widget进行了修改。
再看一下广播接收器是静态还是动态注册的,是不是退出界面时候把receiver给关闭了。
最后看下广播是本地的还是全局的,或者说广播是不是被自己再某个地方拦截掉了。
这些都是无迹可寻的,可以在点击widget发送广播之前就打印日志,看到底是广播接收失败还是click事件没有监听,如果还是不行可以把代码打出来让别人帮忙编译调试一下