title: WearableDataListener Service doesn't invoke onDataChanged method
body: <p>I am making a wear app which fetches data from database(which is on handheld) on launch of app home screen.
  So when the homepage activity launches, It sends a message using Wearable.MessageApi.sendMessage function from the android wear to handheld. On the handheld I have the WearableListenerService which receives this message in onMessageReceived function and reads database. After reading database it sends putDatamapRequest to the wear.</p>
  
  <p>Now on the wear side, I have another WearableListenerService. In this service, onDataChanged() function is never invoked. It runs at times, so far it ran for 2-3 times but otherwise it doesn't run. It's very random. Also once the data is received in Wear side, I set a static Arraylist, which I use to display data in Activity. But since the onDataChanged function is not always called, it gives empty array list. </p>
  
  <p>Here is my AndroidManifest file of wear app where I declared the service:</p>
  
  <pre><code>   &lt;service
          android:name="com.example.deals.DataListenerService"
          android:enabled="true"
          android:exported="true" &gt;
          &lt;intent-filter&gt;
              &lt;action android:name="com.google.android.gms.wearable.BIND_LISTENER" /&gt;
          &lt;/intent-filter&gt;
      &lt;/service&gt;
  </code></pre>
  
  <p>Here is my code to send message from wear to handheld:</p>
  
  <pre><code>mGoogleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
  
          @Override
          public void onConnected(Bundle bundle) {
                                      Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(new ResultCallback&lt;NodeApi.GetConnectedNodesResult&gt;() {
                          @Override
                          public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
                              if(!getConnectedNodesResult.getNodes().isEmpty())
                              {
                                  node = getConnectedNodesResult.getNodes().get(0);
                                  System.out.println("Connected: "+ node.getId());
                                  Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), FETCH_ALL_DEALS, null).setResultCallback(new ResultCallback&lt;MessageApi.SendMessageResult&gt;() {
                                      @Override
                                      public void onResult(MessageApi.SendMessageResult sendMessageResult) {
                                          if (!sendMessageResult.getStatus().isSuccess()) {
                                              Log.e("Wear:", "ERROR: failed to send Message: " + sendMessageResult.getStatus());
                                          }
                                          else
                                              System.out.println("success");
                                      }
                                  });
  
                              }
                              else
                                  System.out.println("Wear not connected to Phone");
                          }
                      });
  
          }
  
              @Override
              public void onConnectionSuspended(int i) {
  
              }
  
  
  
          })
          .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
              @Override
              public void onConnectionFailed(ConnectionResult result) {
                  Log.v("Phone to wear connection failed", "onConnectionFailed: " + result);
              }
          })
          .addApi(Wearable.API)
          .build();
          mGoogleApiClient.connect();
  </code></pre>
  
  <p>Here is my code for onMessageReceive on Handheld:</p>
  
  <pre><code> public void onMessageReceived(MessageEvent messageEvent) {
      System.out.println("Message Received on Phone on launch of wear homepage");
      if(messageEvent.getPath().equals(FETCH_ALL_DEALS)) {
          sendSavedDeals(); //fetch from db and make a datamap object using PutDataRequest
          System.out.println("Message Received on Phone on launch of wear homepage");
      }
      else {
          System.out.println("Unable to recognise action for "+messageEvent.getPath());
      }
  
  }
  </code></pre>
  
  <p>Now on my wear side I have a WearableListenerService but it's onDataChanged method never gets called. Could you please help me with that.</p>