让你的音乐APP脱颖而出,更懂用户,也更动人心

场景

情景感知服务能带来什么?

  作为音乐发烧友,闲下来的时候总想打开App,享受沉浸在音乐中的放松。然而,App推荐的歌单经常没法满足我的需要,如果App能根据我当前的情景状态,推送给我的歌曲恰好就是我当前最想听的,那该多好啊~

什么是情景感知服务?

  情景感知服务(Awareness Kit)能感知用户当前的时间、地理位置、活动状态、耳机状态、天气状况、环境光、车载连接状态、信标连接状态等情景,并通过能常驻后台运行的围栏能力向APP进行提醒,使APP能第一时间给用户提供精准和贴心的服务。上述情景感知能力还在不断扩充中,而且您可以自由组合这些感知能力,构建组合围栏,从而让APP的服务能力更加智能,更加精准。

在情景感知服务的支持下,App能给用户带来如下体验

  • 每次连接上耳机(有线耳机、蓝牙耳机),手机通知栏会弹出音乐App通知,提示用户时候是否要启动音乐播放,或者是否要自动播放音乐

  • 点击通知,可以打开音乐APP,并展示用户当前情境下最恰当的歌单

  • 跑步开始,推荐节奏轻快歌单;跑步结束,推荐节奏缓场歌单

  • 清晨起床,连接耳机,来点清新音乐;夜深人静,连接耳机,让静心的音乐让我舒缓

  • 发动汽车,手机连接蓝牙车载,音乐App自动切换成车载模式,并主动询问是否播放各场景的行车音乐(白天、夜晚、雨天、晴天,推荐各不同)

  • 不同的节日,应该有特别的节日音乐

同时,用户还可以通过各种感知能力的组合围栏,设置排除场景,避免给用户过多打扰。

情景感知服务的优势

  无需用户提前开启App,用户进入地理围栏范围后,即可后台激活App,触发通知。

  无惧App进程被系统杀死,通过围栏服务,依然可接受到通知。

  点击通知,即可前台激活APP,点击直接跳转App推荐界面。

  通过组合围栏实现精准推送;也可避免在用户不需要的场景提供无效通知,避免频繁打扰。


开发前准备

Awareness Kit集成需要有如下3个关键步骤,可以参考华为开发者联盟的文档

  1. AppGallery Connect配置
  2. 集成HMS Awareness SDK
  3. 配置混淆脚本

    https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/awareness-preparation

代码开发关键步骤

  1. 创建耳机围栏
//创建一个感知耳机连接的围栏,当耳机处于连接状态时,此围栏的状态为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";
  1. 注册围栏
//把刚刚创建好的耳机围栏和它对应的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();
});
  1. 创建广播接收器监听围栏事件
//本示例中我们耳机围栏的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被杀后依然推送,可以把该接收器设置为静态广播接收器。

  1. 通过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脱颖而出,更懂用户,也更动人心的更多相关文章

  1. 华为Awareness kit,您旅途路上的超智能管家

    前言 前段时间看了一部纪录片<中国游客在巴黎>,讲述了外国人眼中"中国式旅游":热衷景点打卡,沉迷拍照留念,无暇仔细欣赏:留足时间,买买买,不能枉此行.网友总结中国式旅 ...

  2. 从四大音乐APP首页设计对比分析产品方向

    原帖:http://www.ui.cn/detail/63201.html 本文章中作者例举四个音乐APP应用:虾米.网易.百度.QQ首页 1. 推荐内容:作者将四个首页界面划分出官方推荐与个性化推荐 ...

  3. 网易云音乐APP分析

    网易云音乐-感受音乐的力量 你选择的产品是?  网易云音乐 为什么选择该产品作为分析? 之前用的一直是QQ音乐,但是有一天一个朋友分享了一首网易云上的音乐(顺便分享一下歌名:Drop By Drop) ...

  4. 个人作业2:QQ音乐APP案例分析

    APP案例分析 QQ音乐 选择理由:毕竟作为QQ音乐九年的资深老用户以及音乐爱好者 第一部分 调研 1.第一次上手的体验    我算是很早期的QQ音乐的用户,用QQ音乐七八年,除了体验各方面还不错之外 ...

  5. 音乐类产品——“网易云音乐”app交互原型模板(免费使用)

    网易云音乐虽是一款音乐app,但有人说它也是社交界的一股清流以及一匹黑马.音乐带给人的感染,激发着很多人在这里表达着他们的情绪和心声.网易云音乐上的真实用户点评,不仅被印在地铁的广告牌上,还在朋友圈频 ...

  6. 如何下载网易云音乐APP里的MV和短视频?

    本人:网易云音乐死粉,朋友圈大多都用的是云音乐,因为推荐功能牛逼 然后:发现云音乐APP里越来越多吸引我的短视频,经常看到好的就想保存到相册,然后微信发给朋友 但是:不知道怎么下载网易云音乐的短视频, ...

  7. html+css+js实现类似音乐app似的列表播放

    最近做了一个类似于音乐app里面列表播放的功能,主要是音频播放和按钮状态的联动: 界面如下: 如上图所示 上面有一个播放按钮 下面有一个播放列表 上面还有一个歌曲长度的总时长 上面一个按钮能控制下面所 ...

  8. 【音乐App】—— Vue-music 项目学习笔记:项目准备

    前言: 学习慕课网Vue高级实战课程后,在实践中总结一些这个项目带给自己的收获,希望可以再次巩固关于Vue开发的知识.这一篇主要梳理:项目概况.项目准备.页面骨架搭建.项目github地址:https ...

  9. 明令禁止下,哪些APP在违规获取用户信息?

    2019年4月28日消息  移动互联网时代各大APP大行其道,用户为了更便捷地享受互联网服务,常常需要让渡部分个人信息.在信息获取不透明的情况下,不少APP运营企业出现过度获取乃至违规获取用户信息的情 ...

随机推荐

  1. stand up meeting 12/21/2015

    part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云  完成PDF UI主页面的页面切换功能,待完善    4  完善 ...

  2. shiro:集成Springboot(六)

    1:导入相关依赖 <!--thymeleaf 模板引擎依赖包--> <dependency> <groupId>org.springframework.boot&l ...

  3. C#多线程(12):线程池

    目录 线程池 ThreadPool 常用属性和方法 线程池说明和示例 线程池线程数 线程池线程数说明 不支持的线程池异步委托 任务取消功能 计时器 线程池 线程池全称为托管线程池,线程池受 .NET ...

  4. MapReduce基本认识

    MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算. 主要由Split.Map.Partition.Sort.Combine(需要自己写).Merge.Reduce组成,一般来 ...

  5. 在Windows中使用VirtualBox安装Ubuntu

    VeitualBox官网下载:https://www.virtualbox.org/wiki/Downloads 安装教程:http://dblab.xmu.edu.cn/blog/337-2/ 安装 ...

  6. shll脚本常用格式和规则使用

    shll脚本格式和规则 脚本文件必须已 .sh 结尾(yuan.sh) 脚本第一行必须是:#!/bin/bash 激活脚本的二种方式(sh yuan.sh)(给脚本X权限,以绝对路径执行脚本) 逻辑与 ...

  7. IDE使用GIT控制项目版本

    IDEA本身继承GIT开发插件.只需要安装windows git客户端即可使用. check in project 检入项目 将新创建的项目上传到服务器. 对于git来说,空的目录不会上传到远程仓库. ...

  8. 图解Python的垃圾回收机制

    Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾.在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的 ...

  9. 第九次-DFA最小化,语法分析初步

    1.将DFA最小化:教材P65 第9题 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 3.自上而下语法分析,回溯产生的原因是什么? 4.P100 练习4,反复提取 ...

  10. SQLI-LABS学习笔记(四)

    第十六关   和之前的关卡一样,修改闭合,无意义的关卡   ")闭合即可   第十七关   这题从源码上看发现     这里进行了两次查询   先查询了用户名是否存在   再查询密码是否匹配 ...