我有一个用例,其中当天气晴朗、用户活动正在步行并且还有一个特定位置时会发出通知。我应该如何结合这三个条件?
我知道我们可以使用AwarenessFence.and()
添加多个栅栏,但由于我们将从 Snapsot API 获取天气数据,我们如何在栅栏 API 中添加该条件。
我相信以前有人会遇到同样的问题并解决了它。请分享您的意见。
我有一个用例,其中当天气晴朗、用户活动正在步行并且还有一个特定位置时会发出通知。我应该如何结合这三个条件?
我知道我们可以使用AwarenessFence.and()
添加多个栅栏,但由于我们将从 Snapsot API 获取天气数据,我们如何在栅栏 API 中添加该条件。
我相信以前有人会遇到同样的问题并解决了它。请分享您的意见。
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;
}
}
}
}
诚然,这是实现您想要的东西的一种迂回方式,但它似乎是解决您的用例的唯一方法。