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是单例的问题、主程序没有启动获取参数的需求,同时还可以区分主程序的启动是从通知启动还是直接点图标启动。
(水平有限,有更好解决方案的麻烦告知)