2017-11-10 17 views
0

私は時計のセンサーデータを取得するためにアプリを開発中です。私は電話を使って取得を開始しますが、時計と電話機が完全に接続されているように見える場合がありますが、「開始取得」コマンドを送信しても何も起こりません。コマンドを受け入れるには時計を再起動する必要があります。Androidのウェアが受信しない場合がある

これは私が携帯電話からの接続を構築しています方法です:

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

これは私が携帯電話からデータを送信しています方法です:

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(); 

    } 

これは、私はどのようにありますスマートウォッチのデータを受け入れる:

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 
     } 
    } 
} 

私は知りたいのですが、なぜそれが適切な接続スマートウォッチは電話からデータを受信できません。

答えて

0

Android Wear Data APIは、データの100%の転送を保証します。 2つのデータが同じ場合は、画面上の何も更新されないため、データは送信されません。データが同じかどうかを確認してください。

+0

ありがとうございますが、データは同じではありません。 3つのセンサーから取得したデータを10秒間にわたって送信します。サンプリング周波数は100Hzです。 – DivisionSi

+0

3つのデータを送信しているとします。最後に送信されたデータが欠落しているのか、中間または最初のデータですか?中央のデータが欠落している場合は、次の値で更新される可能性があります。たとえば、値が「10」のタイプを10秒後に送信した場合、値「15」の別のデータを送信すると、最近の値のみがウェアに送信される可能性が高くなります。データは生成されるとすぐには送信されないためです。 Androidはそれをキューに入れて処理します。途中または最後のデータが失われているかどうか一度確認できますか? –

+0

3つのデータが送信されると仮定します。これが起こりますが、20%のケースではすべて3が送信されます。他の80%のケースでは、最後のデータがミスします。たとえば、私は第3のものを手に入れませんでした。もし第2のものを手に入れなければ、第3のものも見逃してしまいます。私が1データを欠場するとすぐに、それ以降のデータも失われます。 – DivisionSi

関連する問題