0

我有一个用例,其中当天气晴朗、用户活动正在步行并且还有一个特定位置时会发出通知。我应该如何结合这三个条件?

我知道我们可以使用AwarenessFence.and()添加多个栅栏,但由于我们将从 Snapsot API 获取天气数据,我们如何在栅栏 API 中添加该条件。

我相信以前有人会遇到同样的问题并解决了它。请分享您的意见。

4

1 回答 1

0

Awareness API 尚不支持基于天气上下文创建栅栏。正如您所提到的,您可以为位置和活动创建 AwarenessFence,然后将它们与AwarenessFence.and()or结合起来AwarenessFence.or()

如果您希望天气包含在您的通知标准中,您可以做的一件事是在收到有关意图的围栏回调时请求天气快照,然后在天气符合您的目标条件时启动通知。

例如,直接借用Awareness API 指南中的代码片段,

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

诚然,这是实现您想要的东西的一种迂回方式,但它似乎是解决您的用例的唯一方法。

于 2017-02-10T22:29:06.457 回答