2016-03-30 2 views
0

Я загрузил готовое приложение для телефона и попытался реализовать наблюдательный план для моего проекта по износу андроида. Цель состоит в том, чтобы передавать информацию о температуре с телефона на устройство износа и обновлять ее.Android Wear onDataChanged не называется

Я пробовал: 1. же имя пакета 2. ApplicationID же 3. же зависимостей версии 4. одинаковые права доступа 5. на моей стороне телефона я знаю, что мои данные по-разному каждый раз (так обновление должно произойти)

Я также использую элементы данных, поэтому мои данные должны синхронизироваться.

private void syncWatch(String min, String max, int image){ 
    Log.v("SunshineSyncAdapter", "syncWatch"); 
    String time = String.valueOf(new Date().getTime()); 
    PutDataMapRequest putDataMapRequest = PutDataMapRequest.create("/weather-update"); 
    putDataMapRequest.getDataMap().putLong("time", new Date().getTime()); // MOST IMPORTANT LINE FOR TIMESTAMP 

    putDataMapRequest.getDataMap().putString("min-temp", min + time); 
    putDataMapRequest.getDataMap().putString("max-temp", max + time); 
    Log.v("SunshineSyncAdapter", min + time + " " + max + time); 
    PutDataRequest request = putDataMapRequest.asPutDataRequest(); 

    if (mGoogleApiClient == null){ 
     Log.v("SunshineSyncAdapter", "NOOOOOOOOOOOOOOOOO, life is no good"); 
     return; 
    } 

    Wearable.DataApi.putDataItem(mGoogleApiClient,request).setResultCallback(new ResultCallback<DataApi.DataItemResult>() { 


     @Override 
     public void onResult(DataApi.DataItemResult dataItemResult) { 
      if (!dataItemResult.getStatus().isSuccess()) { 
       Log.v("MainActivity", "Something went wrong, watch was not notified"); 
      } else { 
       Log.v("MainActivity", "Success, Watch Notified"); 
      } 
     } 
    }); 
} 

Сначала я запускаю свое приложение на телефоне, чтобы убедиться, что оно работает правильно и что оно обновляется и отправляет элементы данных на мое устройство. Затем я запускаю свой модуль износа и ничего не получаю, потому что метод onDataChanged никогда не вызывается.

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

действительно бы признателен за любую помощь

GitHub_Link

Я потратил много времени, пытаясь решить эту проблему.

ответ

1

Отправил вам запрос на тягу на GitHub с исправлениями. Похоже, вы просто забыли подключить Google клиент :)

mGoogleApiClient.connect(); 

и некоторые дополнительные небольшие изменения в коде (некоторые рефакторинга).

0

Вы добавили свой CanvasWatchFaceService в качестве слушателя к событиям, изменившим данные? В onConnected убедитесь, что вы звоните:

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

Ваш всегда должны проверить, если:

  1. Ваш мобильный подключен к износу
  2. Имена пакетов одинаковы
  3. Вы используете тот же Служебная версия Google Play для обоих приложений
  4. Вы подписываете как мобильные, так и ночные приложения, используя одно и то же хранилище ключей

я застрял на GoUbiquitous в течение 10 дней, пока я не выяснить, последний: - \

1

Вы должны создать BroadcastReceiver в своем классе циферблат, и зарегистрировать его по методу registerReceiver().

Создание BroadcastReceiver первой, например:

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

Затем зарегистрировать приемник, например:

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

Наконец, на onDataChanged вас WatchListenerService, отправить данные через Intent к BroadcastReceiver. Например:

 @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 
       } 
    } 
Смежные вопросы