Объединить состояние погоды с состоянием активности пользователя

У меня есть вариант использования, в котором уведомление будет выдано, когда будет солнечная погода, активность пользователя будет идти, а также будет определенное место. Как мне совместить эти три условия?

Я знаю, что мы можем использовать AwarenessFence.and() для добавления нескольких заборов, но поскольку мы будем получать данные о погоде из API Snapsot, как мы можем добавить это условие в API забора.

Я уверен, что кто-то сталкивался с той же проблемой раньше и решил ее. Пожалуйста, поделитесь своим мнением.


person div    schedule 23.11.2016    source источник


Ответы (1)


API осведомленности еще не поддерживает создание заборов на основе контекста погоды. Как вы упомянули, вы можете создать AwarenessFence для местоположения и активности, а затем объединить их с AwarenessFence.and() или AwarenessFence.or().

Если вы хотите, чтобы погода была включена в ваши критерии для уведомлений, одна вещь, которую вы можете сделать, это запросить снимок погоды, когда вы получаете обратный вызов забора по намерению, а затем инициировать уведомление, если погода соответствует вашим целевым условиям.

Например, прямое заимствование фрагментов кода из руководства по API Awareness,

public class MyFenceReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
      FenceState fenceState = FenceState.extract(intent);

      if (TextUtils.equals(fenceState.getFenceKey(), "headphoneFence")) {
        switch(fenceState.getCurrentState()) {
            case FenceState.TRUE:
                WeatherResult weatherResult = 
                  Awareness.SnapshotApi.getWeather(mClient).await();
                if (weatherResult.getStatus().isSuccess()) {
                  Weather weather = weatherResult.getWeather();
                  if (myDesiredWeather(weather)) {
                    sendNotification();
                  }
                }
                break;
            case FenceState.FALSE:
                Log.i(TAG, "Headphones are NOT plugged in.");
                break;
            case FenceState.UNKNOWN:
                Log.i(TAG, "The headphone fence is in an unknown state.");
                break;
        }
      }
    }
}

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

person MRC    schedule 10.02.2017