百度问问我要提问提问,什么也解决不了,退了吧!

6749人阅读
android(4)
&&&&& 在使用百度推送的时候,如果有多个应用,并且启动了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版会加上。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:111035次
积分:1149
积分:1149
排名:千里之外
原创:24篇
评论:32条
(2)(1)(8)(5)(13)(2)提问的技巧_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
提问的技巧
上传于||文档简介
&&提问的技巧
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 百度提问 的文章

 

随机推荐