2016-11-23 76 views
0

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

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

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

回答

0

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

如果您希望天气包含在通知条件中,您可以做的一件事就是当您收到意向的栅栏回调时请求天气快照,然后在天气与您的目标匹配时发起通知条件。

例如,在Awareness API guide直接从代码片段借款,

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

诚然,这是一个有点实现你想要的东西的一种迂回的方式,但它似乎解决您的使用情况的唯一途径。