@Override
 public void enablerResume() {
   mReceiver = new EventReceiver();
   mReceiver.initialize();
   mSimTracker.takeSnapshot();
   updateUI();
 }
 @Override
 public void enablerPause() {
   if (mReceiver != null) {
     mReceiver.destroy();
     mReceiver = null;
   }
 }
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

    System.out.println("Receive event.");

    if (eventReceiver == null) {
      throw new IdeaWxException(
          IdeaWxExceptionCode.WX_EVENT_RECEIVER_NOT_FOUND, "EventReceiver is not found.");
    }

    InputStream in = req.getInputStream();
    resp.setContentType("application/xml");
    resp.setCharacterEncoding("UTF-8");

    SAXReader reader = new SAXReader();
    Document doc;
    try {
      doc = reader.read(in);
      Element root = doc.getRootElement();

      System.out.println(doc.asXML());

      WxBaseReceivedMessage receiveMessage = parseReceiveMessage(root);
      WxSendMessage message;
      if (receiveMessage instanceof WxSubscribeEvent) {
        message = eventReceiver.subscribeEvent((WxSubscribeEvent) receiveMessage);
      } else if (receiveMessage instanceof WxUnsubscribeEvent) {
        message = eventReceiver.unsubscribeEvent((WxUnsubscribeEvent) receiveMessage);
      } else if (receiveMessage instanceof WxScanEvent) {
        message = eventReceiver.scanEvent((WxScanEvent) receiveMessage);
      } else if (receiveMessage instanceof WxLocationEvent) {
        message = eventReceiver.locationEvent((WxLocationEvent) receiveMessage);
      } else if (receiveMessage instanceof WxMenuEvent) {
        message = eventReceiver.menuEvent((WxMenuEvent) receiveMessage);
      } else if (receiveMessage instanceof WxTextMessage) {
        message = eventReceiver.textMessage((WxTextMessage) receiveMessage);
      } else if (receiveMessage instanceof WxImageMessage) {
        message = eventReceiver.imageMessage((WxImageMessage) receiveMessage);
      } else if (receiveMessage instanceof WxVideoMessage) {
        message = eventReceiver.videoMessage((WxVideoMessage) receiveMessage);
      } else if (receiveMessage instanceof WxVoiceMessage) {
        message = eventReceiver.voiceMessage((WxVoiceMessage) receiveMessage);
      } else if (receiveMessage instanceof WxShortVideoMessage) {
        message = eventReceiver.shortVideoMessage((WxShortVideoMessage) receiveMessage);
      } else if (receiveMessage instanceof WxLocationMessage) {
        message = eventReceiver.locationMessage((WxLocationMessage) receiveMessage);
      } else if (receiveMessage instanceof WxLinkMessage) {
        message = eventReceiver.linkMessage((WxLinkMessage) receiveMessage);
      } else {
        message = new WxNullMessage();
      }

      System.out.println("Event receive end.");
      System.out.println(message.getXmlStr());
      // 响应消息
      PrintWriter out = resp.getWriter();
      out.write(message.getXmlStr());
      out.flush();
      out.close();

    } catch (DocumentException e) {
      e.printStackTrace();
      throw new IdeaWxException(IdeaWxExceptionCode.WX_EVENT_XML_ERROR, "XML parse error.", e);
    }
  }