百度推送在退出应用后收不到通知的问题解析

      在使用百度推送的时候,如果有多个应用,并且启动了pushservice服务,当你彻底退出其中一个app,或者长按home键杀掉app之后,这个app将无法收到通知,这是什么原因呢?

      实际上通知已经被pushservice收到了,也发出了广播,但只有当pushreceiver收到com.baidu.android.pushservice.action.notification.SHOW 这个广播的时候,才会进行默认的状态栏提示。问题就出在这里,因为android 4.0以后,对于所有广播消息,默认会加上 FLAG_EXCLUDE_STOPPED_PACKAGES 这个flag,所以app彻底退出后,就无法收到通知了。


看下反编译后的代码就知道了:

   发送notification广播代码: 

    Intent intent = new Intent("com.baidu.android.pushservice.action.notification.SHOW");
    intent.setPackage(publicmsg.f);
    intent.putExtra("public_msg", publicmsg);
    intent.putExtra("notify_type", "rich_media");
    intent.putExtra("app_id", s1);
    intent.putExtra("message_id", s2);
    intent.putExtra("pushService_package_name", context.getPackageName());
    intent.putExtra("service_name", "com.baidu.android.pushservice.PushService");
    context.sendBroadcast(intent);

再看看发送message的广播代码:

   发送message广播,注意设置了flasg,并且flag是32,能自动启动stopped应用
    Intent intent1 = new Intent("com.baidu.android.pushservice.action.MESSAGE");
    intent1.setPackage(e1.a);
    intent1.putExtra("message", abyte0);
    intent1.putExtra("message_string", new String(abyte0, "UTF-8"));
    intent1.setFlags(32);
    c.sendBroadcast(intent1);

现在知道了吧,杀掉进程后,能收到消息,却收不到通知,flag 32 就是 FLAG_INCLUDE_STOPPED_PACKAGES,也就是会启动彻底退出的应用以接收消息。

这个问题我已经反馈给百度推送的技术,预计4.3版会加上。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值