2016-03-30 4 views
0

Ich habe eine Handy-App heruntergeladen und versucht, eine Uhr für mein Android-Wear-Projekt zu implementieren. Ziel ist es, Temperaturinformationen vom Telefon an das Verschleißgerät zu übermitteln und das Zifferblatt zu aktualisieren.Android Wear onDataChanged heißt nicht

Ich habe versucht: 1. denselben Paketnamen 2. gleiche applicationId 3. gleichen Abhängigkeiten Versionen 4. gleichen Berechtigungen 5. auf meinem Handy Seite weiß ich sicher, dass meine Daten jedes Mal anders ist (so das Update muss passieren)

Ich benutze auch Daten, damit meine Daten synchronisiert werden müssen.

Ich führe meine App zuerst am Telefon aus, stelle sicher, dass sie korrekt läuft und dass sie Daten aktualisiert und an mein Verschleißgerät sendet. Dann starte ich mein Verschleißmodul und erhalte nichts, weil die onDataChanged-Methode nie aufgerufen wird.

@Override 
    public void onDataChanged(DataEventBuffer dataEvents) { 
     Log.v("SunshineWatchFace", "onDataChanged"); 
     try{ 
      for(DataEvent dataEvent: dataEvents){ 
       if(dataEvent.getType() != DataEvent.TYPE_CHANGED){ 
        continue; 
       } 

       DataItem dataItem = dataEvent.getDataItem(); 
       if(dataItem.getUri().getPath().compareTo("weather_update") == 0){ 
        DataMap dataMap = DataMapItem.fromDataItem(dataItem).getDataMap(); 
        minTemp = dataMap.getString("min-temp"); 
        maxTemp = dataMap.getString("max-temp"); 
        weatherImage = dataMap.getInt("weather-image"); 
        Log.v("SunshineWatchFace", minTemp); 
        Log.v("SunshineWatchFace", maxTemp); 
       } 
      } 
      dataEvents.release(); 
      if(!isInAmbientMode()){ 
       invalidate(); 
      } 
     }catch (Exception e){ 
      Log.v("SunshineWatchFace",e.getMessage()); 
     } 
    } 

Wäre wirklich zu schätzen jede Hilfe

GitHub_Link

Ich habe viel Zeit damit verbracht, dieses Problem zu lösen.

Antwort

1

Ihnen eine Pull-Anfrage auf GitHub mit Korrekturen gesendet. Scheint, wie Sie nur vergessen, Ihre Google-Client :)

mGoogleApiClient.connect(); 

Und einige zusätzliche kleine Änderungen im Code (etwas Refactoring) zu verbinden.

0

Haben Sie Ihren CanvasWatchFaceService als Listener zu Datenänderungsereignissen hinzugefügt? In onConnected stellen Sie sicher, Sie rufen:

Wearable.DataApi.addListener(mGoogleApiClient, this); 
0

Ihr sollte immer überprüfen, ob:

  1. Ihr Handy ist mit dem Verschleiß verbunden
  2. Die Paketnamen sind die gleichen
  3. Sie verwenden die gleichen Google Play-Dienstversion für beide Apps
  4. Sie signieren sowohl mobile Apps als auch Apps mit demselben Keystore

Ich habe für 10 Tage auf GoUbiquitous stecken, bis ich die letzten herauszufinden: - \

1

Sie haben eine BroadcastReceiver in Ihrer Watch Klasse zu erstellen, und es unter dem registerReceiver() -Methode registrieren.

Erstellen Sie die BroadcastReceiver ersten, zum Beispiel:

final BroadcastReceiver mWeatherReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // Get the data from the intent here 
      // and set the variables you're going to use in your onDraw method 
     } 
}; 

dann den Empfänger registrieren, zum Beispiel:

private void registerReceiver() { 

     //This is where you have the default watch face receiver 
     // Register your new weather receiver 
     IntentFilter weatherFilter = new IntentFilter("ACTION_WEATHER_CHANGED"); 
     SunshineWatchFace.this.registerReceiver(mWeatherReceiver, weatherFilter); 
    } 

schließlich auf dem onDataChanged von Ihnen WatchListenerService, die Daten über Intent die schicken Rundfunkempfänger. Zum Beispiel:

 @Override 
      public void onDataChanged(DataEventBuffer dataEvents) { 

      // Check the data type 
        if (event.getType() == DataEvent.TYPE_CHANGED) { 
        // Get the data map 
        dataMap = DataMapItem.fromDataItem(event.getDataItem()).getDataMap(); 
        Log.i(LOG_TAG, "DataMap received on watch: " + dataMap); 

        // Get the data map items 
        String sunshine_temperature_high = dataMap.getString("sunshine_temperature_high"); 
        String sunshine_temperature_low = dataMap.getString("sunshine_temperature_low"); 

        // Create the intent 
        Intent send_weather = new Intent("ACTION_WEATHER_CHANGED"); 
        send_weather.putExtra("sunshine_temperature_high", sunshine_temperature_high); 
        send_weather.putExtra("sunshine_temperature_low", sunshine_temperature_low); 
        // Broadcast it 
        sendBroadcast(send_weather); 

       } 
       else if (event.getType() == DataEvent.TYPE_DELETED) { 
        // DataItem deleted 
       } 
    }