PendingIntent的通知发送

关于PendingIntent传值的问题,自己又发现了一些新的实现方法

现在我有这么个需求:

服务器不停的向客户端push消息,客户端在开机时或客户端启动时会开启一个service来接收服务器push下来的消息,客户端接收消息后向用户发送通知提示用户有新的消息,并且消息中带有参数。用户通过点击通知可以启动主程序,并且接收到相应的参数。

注:如果用户不是点击通知,而是通过其他方式进入程序则不能获取到参数。

 从上述需求可以onNewIntent已经不满足要求了。因为onNewIntent的启动是在startActivity执行的时候才被触发,也就是主程序必须已经启动了。主程序没有启动,点击通知启动主程序,由于主程序是第一启动,肯定不会触发startActivity,所以onNewIntent也不会被执行,那么参数也不不能获取到。

如果在主程序没有启动的时候点击通知,程序启动想获取到通知中携带的参数,我想到的解决方案如下(简单描述下):

Intent intent = new Intent(NOTIFICATION_ACTION);
Bundle bundle = new Bundle();
bundle.putString("str", pStr);
intent.putExtras(bundle);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, pId, intent, PendingIntent.FLAG_UPDATE_CURRENT);

getBroadcast方法发出广播,这样在service中可以接收到所发出的广播来获取其中intent中携带的数据,然后再执行其他的逻辑。
使用通知发送广播的机制可以避免Activity是单例的问题、主程序没有启动获取参数的需求,同时还可以区分主程序的启动是从通知启动还是直接点图标启动。
(水平有限,有更好解决方案的麻烦告知)
posted @ 2012-02-13 13:52  烟卷儿  阅读(3116)  评论(0编辑  收藏  举报