Awareness Kit让你的音乐APP脱颖而出,更懂用户,也更动人心
让你的音乐APP脱颖而出,更懂用户,也更动人心、
场景
情景感知服务能带来什么?
作为音乐发烧友,闲下来的时候总想打开App,享受沉浸在音乐中的放松。然而,App推荐的歌单经常没法满足我的需要,如果App能根据我当前的情景状态,推送给我的歌曲恰好就是我当前最想听的,那该多好啊~
什么是情景感知服务?
情景感知服务(Awareness Kit)能感知用户当前的时间、地理位置、活动状态、耳机状态、天气状况、环境光、车载连接状态、信标连接状态等情景,并通过能常驻后台运行的围栏能力向APP进行提醒,使APP能第一时间给用户提供精准和贴心的服务。上述情景感知能力还在不断扩充中,而且您可以自由组合这些感知能力,构建组合围栏,从而让APP的服务能力更加智能,更加精准。
在情景感知服务的支持下,App能给用户带来如下体验
每次连接上耳机(有线耳机、蓝牙耳机),手机通知栏会弹出音乐App通知,提示用户时候是否要启动音乐播放,或者是否要自动播放音乐
点击通知,可以打开音乐APP,并展示用户当前情境下最恰当的歌单
跑步开始,推荐节奏轻快歌单;跑步结束,推荐节奏缓场歌单
清晨起床,连接耳机,来点清新音乐;夜深人静,连接耳机,让静心的音乐让我舒缓
发动汽车,手机连接蓝牙车载,音乐App自动切换成车载模式,并主动询问是否播放各场景的行车音乐(白天、夜晚、雨天、晴天,推荐各不同)
不同的节日,应该有特别的节日音乐
同时,用户还可以通过各种感知能力的组合围栏,设置排除场景,避免给用户过多打扰。
情景感知服务的优势
无需用户提前开启App,用户进入地理围栏范围后,即可后台激活App,触发通知。
无惧App进程被系统杀死,通过围栏服务,依然可接受到通知。
点击通知,即可前台激活APP,点击直接跳转App推荐界面。
通过组合围栏实现精准推送;也可避免在用户不需要的场景提供无效通知,避免频繁打扰。
开发前准备
Awareness Kit集成需要有如下3个关键步骤,可以参考华为开发者联盟的文档
- AppGallery Connect配置
- 集成HMS Awareness SDK
- 配置混淆脚本
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/awareness-preparation
代码开发关键步骤
- 创建耳机围栏
//创建一个感知耳机连接的围栏,当耳机处于连接状态时,此围栏的状态为true
AwarenessBarrier headsetBarrier = HeadsetBarrier.keeping(HeadsetStatus.CONNECTED);
//创建一个PendingIntent,当围栏状态改变的时候,会触发该PendingIntent,这里以发送广播为例
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
//创建围栏的标签,后续可以通过标签查询或者删除对应围栏
String headsetBarrierLabel = "headset keeping connected label";
- 注册围栏
//把刚刚创建好的耳机围栏和它对应的label,pendingIntent注册给Awareness kit
Awareness.getBarrierClient(context).updateBarriers(new BarrierUpdateRequest.Builder()
.addBarrier(headsetBarrierLabel,headsetBarrier,pendingIntent).build())
.addOnSuccessListener(aVoid -> {
//注册围栏成功
Log.i(TAG,"add barrier success");
})
.addOnFailureListener(e -> {
//注册围栏失败
Log.e(TAG,"add barrier failed");
e.printStackTrace();
});
- 创建广播接收器监听围栏事件
//本示例中我们耳机围栏的PendingIntent设置的是发送广播,所以需要定义对应的广播接收器来监听围栏的状态
public final class HeadsetBarrierReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//围栏的信息通过intent传递过来,我们通过Barrier.extract方法将其解析出来
BarrierStatus barrierState = BarrierStatus.extract(intent);
//通过BarrierStatus获取label和围栏的当前状态
String label = barrierState.getBarrierLabel();
int status = barrierState.getPresentStatus();
if (status == BarrierStatus.TRUE && label.equals(headsetBarrierLabel)) {
//当围栏状态为true时,代表耳机处于连接状态,这时就可以在通知栏推送相关消息
//send Notification....
}
}
}
定义完广播接收器后别忘记注册该广播接收器,如果需要APP被杀后依然推送,可以把该接收器设置为静态广播接收器。
- 通过Awareness快照接口获取当前情景状态
在用户点击通知打开app后,可以通过Awareness各个能力的快照接口来获取用户当前的情景状态以推荐不同歌单。
例如获取时间情景状态:
Awareness.getCaptureClient(context).getTimeCategories()
.addOnSuccessListener(timeIntervalsResponse -> {
TimeCategories categories = timeIntervalsResponse.getTimeCategories();
if (categories.isTimeCategory(TimeBarrier.TIME_CATEGORY_HOLIDAY)) {
//当天是节假日,可推荐节假日歌单
}
if (categories.isTimeCategory(TimeBarrier.TIME_CATEGORY_WEEKEND)) {
//当天是周末,可推荐周末歌单
}
if (categories.isTimeCategory(TimeBarrier.TIME_CATEGORY_NIGHT)) {
//当前是深夜,可推荐深夜歌单
}
})
.addOnFailureListener(e -> {
//获取时间信息失败
Log.e(TAG, "get Time Categories failed");
e.printStackTrace();
});
获取用户当前的活动状态以推荐歌单:
Awareness.getCaptureClient(context).getBehavior()
.addOnSuccessListener(behaviorResponse -> {
BehaviorStatus behaviorStatus = behaviorResponse.getBehaviorStatus();
DetectedBehavior mostLikelyBehavior = behaviorStatus.getMostLikelyBehavior();
String str = "Most likely behavior is " + mostLikelyBehavior.getType();
})
.addOnFailureListener(e -> {
//获取活动状态失败
Log.e(TAG, "Failed to get the behavior.", e);
});
获取当前是否是连接车载蓝牙:
int deviceType = 0; // 0 代表获取的设备类型为车载蓝牙
Awareness.getCaptureClient(this).getBluetoothStatus(deviceType)
.addOnSuccessListener(bluetoothStatusResponse -> {
BluetoothStatus bluetoothStatus = bluetoothStatusResponse.getBluetoothStatus();
int status = bluetoothStatus.getStatus();
if (status == BluetoothStatus.CONNECTED) {
//当前是连接车载蓝牙,可将app切换为车载模式
}
})
.addOnFailureListener(e -> {
//获取车载蓝牙状态失败
Log.e(TAG, "Failed to get Bluetooth status.", e);
});
往期链接:一文搞懂文本识别、银行卡识别、通用卡证识别、身份证识别
内容来源:https://developer.huawei.com/consumer/cn/forum/topicview?fid=18&tid=0201246052748810283&pid=0301246052748810253
原作者:Ascend
Awareness Kit让你的音乐APP脱颖而出,更懂用户,也更动人心的更多相关文章
- 华为Awareness kit,您旅途路上的超智能管家
前言 前段时间看了一部纪录片<中国游客在巴黎>,讲述了外国人眼中"中国式旅游":热衷景点打卡,沉迷拍照留念,无暇仔细欣赏:留足时间,买买买,不能枉此行.网友总结中国式旅 ...
- 从四大音乐APP首页设计对比分析产品方向
原帖:http://www.ui.cn/detail/63201.html 本文章中作者例举四个音乐APP应用:虾米.网易.百度.QQ首页 1. 推荐内容:作者将四个首页界面划分出官方推荐与个性化推荐 ...
- 网易云音乐APP分析
网易云音乐-感受音乐的力量 你选择的产品是? 网易云音乐 为什么选择该产品作为分析? 之前用的一直是QQ音乐,但是有一天一个朋友分享了一首网易云上的音乐(顺便分享一下歌名:Drop By Drop) ...
- 个人作业2:QQ音乐APP案例分析
APP案例分析 QQ音乐 选择理由:毕竟作为QQ音乐九年的资深老用户以及音乐爱好者 第一部分 调研 1.第一次上手的体验 我算是很早期的QQ音乐的用户,用QQ音乐七八年,除了体验各方面还不错之外 ...
- 音乐类产品——“网易云音乐”app交互原型模板(免费使用)
网易云音乐虽是一款音乐app,但有人说它也是社交界的一股清流以及一匹黑马.音乐带给人的感染,激发着很多人在这里表达着他们的情绪和心声.网易云音乐上的真实用户点评,不仅被印在地铁的广告牌上,还在朋友圈频 ...
- 如何下载网易云音乐APP里的MV和短视频?
本人:网易云音乐死粉,朋友圈大多都用的是云音乐,因为推荐功能牛逼 然后:发现云音乐APP里越来越多吸引我的短视频,经常看到好的就想保存到相册,然后微信发给朋友 但是:不知道怎么下载网易云音乐的短视频, ...
- html+css+js实现类似音乐app似的列表播放
最近做了一个类似于音乐app里面列表播放的功能,主要是音频播放和按钮状态的联动: 界面如下: 如上图所示 上面有一个播放按钮 下面有一个播放列表 上面还有一个歌曲长度的总时长 上面一个按钮能控制下面所 ...
- 【音乐App】—— Vue-music 项目学习笔记:项目准备
前言: 学习慕课网Vue高级实战课程后,在实践中总结一些这个项目带给自己的收获,希望可以再次巩固关于Vue开发的知识.这一篇主要梳理:项目概况.项目准备.页面骨架搭建.项目github地址:https ...
- 明令禁止下,哪些APP在违规获取用户信息?
2019年4月28日消息 移动互联网时代各大APP大行其道,用户为了更便捷地享受互联网服务,常常需要让渡部分个人信息.在信息获取不透明的情况下,不少APP运营企业出现过度获取乃至违规获取用户信息的情 ...
随机推荐
- 网站假死 重启NGINX无效 必须重启PHP 原因分析
一.错误提示说明: Nginx 502 Bad Gateway:请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止. Nginx 504 G ...
- 2016NOIP普及组T2回文日期
回文日期 分类:枚举,函数 [题目描述] 日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期 ...
- 关于赋值的Java面试题
面试题:(1) short s = 1:s = s + 1;(2) short s = 1;s += 1;问:上面两个代码有没有问题,如果有,哪里有问题? 答:(1) 第一个是错的,会报错损失精度,因 ...
- 透彻理解C++11新特性:右值引用、std::move、std::forward
目录 浅拷贝.深拷贝 左值.右值 右值引用类型 强转右值 std::move 重新审视右值引用 右值引用类型和右值的关系 函数参数传递 函数返还值传递 万能引用 引用折叠 完美转发 std::forw ...
- AtomineerUtils使用说明
AtomineerUtils使用说明 VS2015PluginCrackAtomineer 介绍 AtomineerUtils 是国外的一款用于生成源代码注释的一款 VS 插件工具. 这款插件,支持 ...
- KVM虚拟化平台环境部署
一:安装依赖包 二:配置网卡 三:配置环境 实验环境: KVM01 192.168.200.10 关闭防火墙及相关的安全机制 [root@KVM01 ~]# systemctl stop fire ...
- Java本地的项目,怎么可以让别人通过外网访问-内网穿透
2019独角兽企业重金招聘Python工程师标准>>> 一.点击链接 https://natapp.cn/ 注册个免费的账户 NATAPP官网 二.登陆进去以后查看authtoken ...
- C# richtextbox 自动下拉到最后 方法 & RichTextBox读取txt中文后出现乱码
C# richtextbox 自动滚动到最后 光标到最后 自动显示最后一行 private void richTextBox1_TextChanged(object sender, EventArg ...
- 第 43 章 Baidu Map
43.1. BMap.Circle var point = new BMap.Point(22.111, 114.111); var styleCircleF = { strokeColor:&quo ...
- #Week4 Logistic Regression
一.Classification 主要讨论二元分类. 线性回归处理分类问题显然不靠谱,所以采用逻辑回归. 二.Hypothesis Representation 假设函数变为\(h_\theta(x) ...