2017-11-10 4 views
0

Ich arbeite an einer App, um Sensordaten von der Uhr zu erhalten. Ich beginne die Erfassung mit dem Telefon, aber es gibt Fälle, in denen die Uhr und das Telefon scheinbar perfekt verbunden sind, aber wenn ich den Befehl "Start Acquisition" sende, passiert nichts. Die Uhr muss neu gestartet werden, um den Befehl zu akzeptieren.Android-Kleidung empfängt manchmal keine Nachrichten vom Telefon

Dies ist, wie ich die Verbindung vom Telefon Gebäude:

mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Wearable.API) 
      .addConnectionCallbacks(MainActivity.this) 
      .addOnConnectionFailedListener(this) 
      .build(); 
    mGoogleApiClient.connect(); 

Dies ist, wie ich die Daten vom Telefon bin das Senden:

if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { 

     final PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/toWear"); 
     putDataMapReq.getDataMap().putInt("duration", duration); // Duration of data, selected in TimeSelector 
     putDataMapReq.getDataMap().putString("type", type); 
     putDataMapReq.getDataMap().putString("name", name); 
     putDataMapReq.getDataMap().putString("Starting Time", startingTime); // Starting Time of data 
     putDataMapReq.getDataMap().putBoolean("Stop", false); //Stop is set True when Phone has to stop watch from taking data 
     putDataMapReq.setUrgent(); 
     PutDataRequest request = putDataMapReq.asPutDataRequest(); 
     Wearable.DataApi.putDataItem(mGoogleApiClient, request).setResultCallback(new ResultCallback<DataApi.DataItemResult>() { 
      @Override 
      public void onResult(DataApi.DataItemResult dataItemResult) { 
      } 
     }); 

    } 
    else 
    { 
     Toast.makeText(context, "Not Connected properly", Toast.LENGTH_LONG).show(); 

    } 

Dies ist, wie ich bin Akzeptieren der Daten in der Smartwatch:

public void onDataChanged(DataEventBuffer dataEvents) { 
    count=0; 
    broadcaster = LocalBroadcastManager.getInstance(this); 

    for (DataEvent event : dataEvents) { 
     if (event.getType() == DataEvent.TYPE_CHANGED) { 
      // DataItem changed 
      DataItem item = event.getDataItem(); 

      if (item.getUri().getPath().compareTo("/toWear") == 0) { 
       DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap(); 


       int duration = dataMap.getInt("duration"); 
       stop=dataMap.getBoolean("Stop"); 
       String type = dataMap.getString("type"); 
       String name = dataMap.getString("name"); 
       String startingTime= dataMap.getString("Starting Time"); 
       // updateCount(dataMap.getInt(COUNT_KEY)); 


       Bundle b= new Bundle(); 
       b.putInt("duration",duration); 
       b.putString("Starting Time",startingTime); 

       if(!stop) { 
        AcquisitionStatus=true; 
        setAcquisitionStatus(true); 
        Intent sensorServ = new Intent(MyService.this, SensorService.class); 
        sensorServ.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY); 
        sensorServ.putExtras(b); 
        startService(sensorServ); 

       } 
       else { 
        AcquisitionStatus = false; 
        setAcquisitionStatus(false); 
       } 

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

Ich möchte wissen, warum es ist, dass manchmal trotz einer richtigen Verbindung zu haben eingerichtet wurde, empfängt die Smartwatch die Daten vom Telefon nicht.

Antwort

0

Die Android Wear Data API gewährleistet eine 100% ige Übertragung der Daten. Wenn die zwei Daten identisch sind, werden die Daten nicht gesendet, da nichts auf dem Bildschirm aktualisiert wird. Überprüfen Sie, ob die Daten identisch sind.

+0

Vielen Dank, aber die Daten sind nicht das Gleiche. Ich sende die Daten von 3 Sensoren über einen Zeitraum von 10 Sekunden. Mit einer Abtastfrequenz von 100Hz. – DivisionSi

+0

Nehmen wir an, Sie senden drei Daten. Sind die letzten gesendeten Daten oder die Daten in der Mitte oder zuerst? Wenn die Daten in der Mitte fehlen, wird sie möglicherweise mit dem nächsten Wert aktualisiert. Wenn Sie beispielsweise einen Typ mit dem Wert "10" gesendet haben und nach 10 Sekunden eine weitere Daten mit dem Wert "15" senden, gibt es eine höhere Wahrscheinlichkeit, dass nur die letzten Werte an die Abnutzung gesendet werden . Weil die Daten nicht gesendet werden, sobald sie generiert werden. Android stellt sie in eine Warteschlange und verarbeitet sie. Können Sie einmal prüfen, ob die Daten in der Mitte oder zuletzt verloren sind? –

+0

Angenommen, 3 Daten werden gesendet. Dies ist der Fall, in 20% der Fälle werden alle 3 gesendet. In den anderen 80% Fällen fehlen die Daten am Ende. Ich würde zum Beispiel nicht den dritten bekommen, oder wenn ich den zweiten nicht bekomme, würde ich auch den dritten verpassen. Sobald ich 1 Daten verpasse, sind auch diejenigen verloren, die danach kommen. – DivisionSi

Verwandte Themen