2016-12-19 3 views
0

Ich habe bereits versucht, viele Möglichkeiten, um dies zu lösen, aber nichts funktioniert.WearableListenerService ruft onDataChanged on Wear nicht auf

making-wearablelistenerservice-ondatachanged-call-on-every-putdatamaprequest

wearablelistenerservices-ondatachanged-not-called-on-phone

AndroidManifest.xml

<service android:name="my.package.ListenerService" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.wearable.DATA_CHANGED" /> 
      <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" /> 

      <data 
       android:host="*" 
       android:pathPrefix="/prefix" 
       android:scheme="wear" /> 
     </intent-filter> 
    </service> 

MainActivity

IntentFilter messageFilter = new IntentFilter(Intent.ACTION_SEND); 
    MobillsWearActivity.MessageReceiver messageReceiver = new MobillsWearActivity.MessageReceiver(); 
    LocalBroadcastManager.getInstance(this).registerReceiver(messageReceiver, messageFilter); 

Dienst

public class ListenerService extends WearableListenerService { 

private final String TAG_WEAR = "[on-wear]"; 

@Override 
public void onDataChanged(DataEventBuffer dataEvents) { 


    for (DataEvent event : dataEvents) { 

     // Check the data type 
     if (event.getType() == DataEvent.TYPE_CHANGED) { 

      DataMapItem dataItem = DataMapItem.fromDataItem (event.getDataItem()); 
      String jsonString = dataItem.getDataMap().getString("listDespesas"); 

      // Broadcast message to wearable activity for display 
      Intent messageIntent = new Intent(); 
      messageIntent.setAction(Intent.ACTION_SEND); 
      messageIntent.putExtra("listDespesas", jsonString); 
      LocalBroadcastManager.getInstance(this).sendBroadcast(messageIntent); 

      Log.i(TAG_WEAR, "Recebido no wearable: "+jsonString); 
     } 

    } 
} 

@Override 
public void onMessageReceived(MessageEvent messageEvent) { 
    Toast.makeText(this, "Received message", Toast.LENGTH_LONG).show(); 
} 


} 
+1

Schauen Sie sich diese Frage SO [25141046] (http://stackoverflow.com/questions/25141046/wearablelistenerservice-ondatachanged-is-not-called?rq=1) und [34565918] (http: // Stackoverflow. com/questions/34565918/ondatachanged-isn% C2% B4t-called-on-android-tragen? rq = 1) wenn es Ihnen helfen kann. – KENdi

+0

Danke! Die Antwort von Tom arbeitet http://stackoverflow.com/questions/25141046/wearablelistenerservice-ondatachedished-is-not-called?rq=1 –

Antwort

0

Die Antwort von Tom in diesem Link funktioniert für mich

There are two things you can check:

  • package der Verschleiß App sollte package von identisch sein die Geräte-App
  • onDataChanged() wird nur aufgerufen, wenn sich die Daten wirklich ändern. Wenn Sie dieselben Daten mehrmals in DataApi eingeben, wird die Methode nur einmal aufgerufen, bis Sie andere Daten schreiben. Sie könnten den Daten einen Zeitstempel hinzufügen, um sicherzustellen, dass die Methode für jede Schreiboperation einmal aufgerufen wird. Die Verwendung des DataApi ist jedoch in Bezug auf die Verwendung der Batterie möglicherweise teurer als das Senden einer Nachricht. Wenn Sie also nur eine Aktion auslösen möchten, nachdem Sie Daten in den DataApi gelegt haben, senden Sie einfach eine Nachricht, wenn Sie fertig sind.
Verwandte Themen