前言目前Android应用在后台杀掉进程后收不到通知。接收推送通知,需要集成各个厂商的推送SDK。以小米为例一、接入前的准备工作1、登录小米开发者网站:https://dev.mi.com/console/ap...,创建一个App,获取AppId、AppKey和AppSecret。2、下载安卓客户端SDK压缩包。下载地址:http://dev.xiaomi.com/mipush/...压缩包中包含ServerSDK、ClientSDK和androidDEMO。2.SDK接入指南2.1.配置AndroidManifest.xml文件小米推送服务SDK支持的最低Android版本为2.3。推送服务所需的权限列表:推送服务需要配置的service和receiver:这里XMPushService和PingReceiver定义在pushservice进程中,你也可以配置它们运行在任意进程中,如果不配置android:process属性,它们会运行在应用程序的主进程中。2.2.自定义一个BroadcastReceiver类为接收消息,您需要自定义一个继承自PushMessageReceiver类的BroadcastReceiverpublicclassDemoMessageReceiverextendsPushMessageReceiver{privateStringmRegId;私人长mResultCode=-1;私有字符串mReason;私有字符串mCommand;私有字符串mMessage;私有字符串主题;私有字符串malias;私有字符串mUserAccount;私有字符串mStartTime;私有字符串mEndTime;@OverridepublicvoidonReceivePassThroughMessage(Contextcontext,MiPushMessagemessage){mMessage=message.getContent();if(!TextUtils.isEmpty(message.getTopic())){mTopic=message.getTopic();}elseif(!TextUtils.isEmpty(message.getAlias())){mAlias=message.getAlias();}elseif(!TextUtils.isEmpty(message.getUserAccount())){mUserAccount=message.getUserAccount();}}@OverridepublicvoidonNotificationMessageClicked(上下文上下文,MiPushMessage消息){mMessage=message.getContent();if(!TextUtils.isEmpty(message.getTopic())){mTopic=message.getTopic();}elseif(!TextUtils.isEmpty(message.getAlias())){mAlias=message.getAlias();}elseif(!TextUtils.isEmpty(message.getUserAccount())){mUserAccount=message.getUserAccount();}}@OverridepublicvoidonNotificationMessageArrived(Contextcontext,MiPushMessagemessage){mMessage=message.getContent();if(!TextUtils.isEmpty(message.getTopic())){mTopic=message.getTopic();}elseif(!TextUtils.isEmpty(message.getAlias())){mAlias=message.getAlias();}elseif(!TextUtils.isEmpty(message.getUserAccount())){mUserAccount=message.getUserAccount();}}@OverridepublicvoidonCommandResult(Contextcontext,MiPushCommandMessagemessage){Stringcommand=消息.getCommand();Listarguments=message.getCommandArguments();StringcmdArg1=((arguments!=null&&arguments.size()>0)?arguments.get(0):null);StringcmdArg2=((arguments!=null&&arguments.size()>1)?arguments.get(1):null);if(MiPushClient.COMMAND_REGISTER.equals(command)){if(message.getResultCode()==ErrorCode.SUCCESS){mRegId=cmdArg1;}}elseif(MiPushClient.COMMAND_SET_ALIAS.equals(command)){if(message.getResultCode()==ErrorCode.SUCCESS){malias=cmdArg1;}}elseif(MiPushClient.COMMAND_UNSET_ALIAS.equals(command)){if(message.getResultCode()==ErrorCode.SUCCESS){malias=cmdArg1;}}elseif(MiPushClient.COMMAND_SUBSCRIBE_TOPIC.equals(command)){if(message.getResultCode()==ErrorCode.SUCCESS){mTopic=cmdArg1;}}elseif(MiPushClient.COMMAND_UNSUBSCRIBE_TOPIC.equals(command)){if(message.getResultCode()==ErrorCode.SUCCESS){mTopic=cmdArg1;}}elseif(MiPushClient.COMMAND_SET_ACCEPT_TIME.equals(command)){if(message.getResultCode()==ErrorCode.SUCCESS){mStartTime=cmdArg1;mEndTime=cmdArg2;}}}@OverridepublicvoidonReceiveRegisterResult(Contextcontext,MiPushCommandMessagemessage){Stringcommand=message.getCommand();Listarguments=message.getCommandArguments();StringcmdArg1=((arguments!=null&&arguments.size()>0)?arguments.get(0):null);StringcmdArg2=((arguments!=null&&arguments.size()>1)?arguments.get(1):null);如果(MiPushClient.COMMAND_REGISTER.equals(命令)){if(message.getResultCode()==ErrorCode.SUCCESS){mRegId=cmdArg1;}}}}在AndroidManifest.xml文件中注册自定义的BroadcastReceiver2.3。注册推送服务通过调用MiPushClient.registerPush初始化小米推送服务注册,可以在自定义的onCommandResult和onReceiveRegisterResult中接收到注册结果,regId为当前app在当前设备上的唯一标识。您可以将regId上传到您自己的服务器,以便您可以方便地向其发送消息。为了提高推送的注册率,可以在Application的onCreate中初始化推送。您还可以根据需要在其他地方初始化推送。代码如下:publicclassDemoApplicationextendsApplication{publicstaticfinalStringAPP_ID="yourappid";publicstaticfinalStringAPP_KEY="你的应用密钥";publicstaticfinalStringTAG="你的包名";@OverridepublicvoidonCreate(){super.onCreate();//初始化push推送服务if(shouldInit()){MiPushClient.registerPush(this,APP_ID,APP_KEY);}//打开LogLoggerInterfacenewLogger=newLoggerInterface(){@OverridepublicvoidsetTag(Stringtag){//忽略}@Overridepublicvoidlog(Stringcontent,Throwablet){Log.d(TAG,content,t);}@Overridepublicvoidlog(Stringcontent){Log.d(TAG,content);}};Logger.setLogger(this,newLogger);}privatebooleanshouldInit(){ActivityManageram=((ActivityManager)getSystemService(Context.ACTIVITY_SERVICE));ListprocessInfos=am.getRunningAppProcesses();StringmainProcessName=getApplicationInfo().processName;intmyPid=Process.myPid();for(RunningAppProcessInfoinfo:process(Infos){ifinfo.pid==myPid&&mainProcessName.equals(info.processName)){returntrue;}}返回假;}}3。测试创建推送并填写推送内容后台关闭应用,点击推送,仍能收到推送通知,说明集成成功