评论

收藏

[Android] 华为Awareness kit,您旅途路上的超智能管家

移动开发 移动开发 发布于:2021-10-15 14:38 | 阅读数:347 | 评论:0

前言
前段时间看了一部纪录片《中国游客在巴黎》,讲述了外国人眼中“中国式旅游”:热衷景点打卡,沉迷拍照留念,无暇仔细欣赏;留足时间,买买买,不能枉此行。网友总结中国式旅游“上车睡觉,下车拍照,回到家啥也不知道”,可以说是小编本编了。我赶紧“反思”了下,觉得纯粹是因为我懒,不想做旅游攻略,只能跟团到“人从众”景点欣赏别人的后脑勺。每逢此刻,我就想有个可以推荐旅游行程、适时出行提示、推荐衣食住票信息等的全能“管家”。
重点来了,华为推出的Awareness Kit情景感知服务完全可以实现这些功能和服务,并且完全免费,这简直就是造福懒人旅游的必备神器啊!
旅游出行应用场景
华为情景感知服务(HUAWEI Awareness Kit)通过提供获取用户当前时间、位置、活动状态、音频设备状态、环境光、天气、信标等情景感知组合能力,并调用这些能力,帮助App更快速、高效的洞悉用户当前所处的情景,提供更加智慧、贴心的体验。
外出旅行时,在Awareness Kit支持下,天气感知能力提醒用户准备合适旅行衣服,位置感知能力推荐出行、餐饮、景点、票务等信息,时间和天气感知能力提醒日出/日落等信息,让用户获得超贴心的旅伴服务。
DSC0000.png

关键开发代码
开发准备
1、配置AppGallery Connect。
2、集成HMS Core SDK。
3、配置混淆脚本。
具体操作参考官网:配置AppGallery Connect
接口调用代码
1、指定权限
在调用位置、天气、时间等能力时,开发者需要先在Manifest中指定相应的权限。
2、导入接口类
开发者在使用各项感知能力时,需要导入情景感知服务的公共能力和与各项功能状态相关的类。比如:时间感知能力导入接口类
import com.huawei.hmf.tasks.OnFailureListener;
import com.huawei.hmf.tasks.OnSuccessListener;
import com.huawei.hms.kit.awareness.Awareness;
//导入时间快照相关类
import com.huawei.hms.kit.awareness.capture.TimeCategoriesResponse;
import com.huawei.hms.kit.awareness.status.TimeCategories;
//导入时间围栏相关类
import com.huawei.hms.kit.awareness.barrier.AwarenessBarrier;
import com.huawei.hms.kit.awareness.barrier.BarrierStatus;
import com.huawei.hms.kit.awareness.barrier.TimeBarrier;
import com.huawei.hms.kit.awareness.barrier.BarrierUpdateRequest;
3、Capture能力开发
Capture API允许app请求用户当前状态,如用户当前时间、位置、活动状态、设备状态等。
(1)获取Awareness kit的“Capture Client”。
(2)通过“Capture Client”调用时间状态查询能力接口查询情景状态。
(3)监听情景感知服务结果返回,进行应用的业务处理。
例如:天气感知能力
Awareness.getCaptureClient(this).getWeatherByDevice()
    .addOnSuccessListener(new OnSuccessListener<WeatherStatusResponse>() {
      @Override
      public void onSuccess(WeatherStatusResponse weatherStatusResponse) {
        WeatherStatus weatherStatus = weatherStatusResponse.getWeatherStatus();
        WeatherSituation weatherSituation = weatherStatus.getWeatherSituation();
        Situation situation = weatherSituation.getSituation();
        // 更多返回的天气数据信息可参考华为开发者文档
        String weatherInfoStr = "City:" + weatherSituation.getCity().getName() + "\n" +
            "Weather id is " + situation.getWeatherId() + "\n" +
            "CN Weather id is " + situation.getCnWeatherId() + "\n" +
            "Temperature is " + situation.getTemperatureC() + "℃" +
            "," + situation.getTemperatureF() + "℉" + "\n" +
            "Wind speed is " + situation.getWindSpeed() + "km/h" + "\n" +
            "Wind direction is " + situation.getWindDir() + "\n" +
            "Humidity is " + situation.getHumidity() + "%";
        Log.i(TAG, weatherInfoStr);
      }
    })
    .addOnFailureListener(new OnFailureListener() {
      @Override
      public void onFailure(Exception e) {
        Log.e(TAG, "get weather failed");
      }
    });
```
**4、Barrier能力开发**

Barrier API可以为app设定情景状态的“围栏”,当用户状态达到预设情景状态时,情景感知服务会触发app发送通知。

以开发地理围栏“enter”的“Barrier“为例,进入设定的位置范围后触发Barrier。

(1)定义Barrier。
AwarenessBarrier enterBarrier = LocationBarrier.enter(latitude, longitude, radius);
(2)定义Barrier状态改变时触发的“PendingIntent”。

(3)定义Barrier对应的标签Label,然后添加Barrier。
String locationBarrierLabel = "location enter barrier";
BarrierUpdateRequest.Builder builder = new BarrierUpdateRequest.Builder();
BarrierUpdateRequest request = builder.addBarrier(locationBarrierLabel, enterBarrier,pendingIntent).build();
Awareness.getBarrierClient(context).updateBarriers(request)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getApplicationContext(), "add barrier success", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
Toast.makeText(getApplicationContext(), "add barrier failed", Toast.LENGTH_SHORT).show();
Log.e(TAG, "add barrier failed", e);
}
});
```
(4)定义广播接收器,用于监听Barrier事件,收到事件后进行应用的业务处理。
class LocationBarrierReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    BarrierStatus barrierStatus = BarrierStatus.extract(intent);
    String label = barrierStatus.getBarrierLabel();
    switch(barrierStatus.getPresentStatus()) {
      case BarrierStatus.TRUE:
        Log.i(TAG, label + " status:true");
        break;
      case BarrierStatus.FALSE:
        Log.i(TAG, label + " status:false");
        break;
      case BarrierStatus.UNKNOWN:
        Log.i(TAG, label + " status:unknown");
        break;
    }
  }
}
以上是部分功能的接口调用示例代码。
更详细的开发指南请参考华为开发者联盟-情景感知服务官网
结束语
华为情景感知服务通过调用时间、位置、天气、活动状态、设备状态等功能,广泛应用于旅游出行、运动健康、音乐、游戏、摄影等app,为用户提供更智慧、更贴心的体验。
【情景感知服务】精品开发案例介绍
【情景感知服务】让你的音乐APP脱颖而出,更懂用户,也更动人心
【情景感知服务】让“买买买”有了新的打开方式
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~


   
   
   
                        

关注下面的标签,发现更多相似文章