【情景感知服务】让你的音乐APP更智能更懂用户(增加demo源代码)
场景
情景感知服务能带来什么
作为音乐发烧友,闲下来的时候总想打开App,享受沉浸在音乐中的放松。然而,App推荐的歌单经常没法满足我的需要,如果App能根据我当前的情景状态,推送给我的歌曲恰好就是我当前最想听的,那该多好啊~
什么是情景感知服务?
情景感知服务(Awareness
Kit)能感知用户当前的时间、地理位置、活动状态、耳机状态、天气状况、环境光、车载连接状态、信标连接状态等情景,并通过能常驻后台运行的围栏能力向APP进行提醒,使APP能第一时间给用户提供精准和贴心的服务。上述情景感知能力还在不断扩充中,而且您可以自由组合这些感知能力,构建组合围栏,从而让APP的服务能力更加智能,更加精准。
在情景感知服务的支持下,App能给用户带来如下体验
l 每次连接上耳机(有线耳机、蓝牙耳机),手机通知栏会弹出音乐App通知,提示用户时候是否要启动音乐播放,或者是否要自动播放音乐
l 点击通知,可以打开音乐APP,并展示用户当前情境下最恰当的歌单
l 跑步开始,推荐节奏轻快歌单;跑步结束,推荐节奏缓场歌单
l 清晨起床,连接耳机,来点清新音乐;夜深人静,连接耳机,让静心的音乐让我舒缓
l 发动汽车,手机连接蓝牙车载,音乐App自动切换成车载模式,并主动询问是否播放各场景的行车音乐(白天、夜晚、雨天、晴天,推荐各不同)
l 不同的节日,应该有特别的节日音乐
同时,用户还可以通过各种感知能力的组合围栏,设置排除场景,避免给用户过多打扰
情景感知服务的优势
无需用户提前开启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
代码开发关键步骤
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";
2.注册围栏
//把刚刚创建好的耳机围栏和它对应的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();});
3.创建广播接收器监听围栏事件
//本示例中我们耳机围栏的PendingIntent设置的是发送广播,所以需要定义对应的广播接收器来监听围栏的状态
public final class HeadsetBarrierReceiver extends BroadcastReceiver {@Overridepublic 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....}}
}
4.通过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);});
Demo效果
为了便于开发者更好的理解此场景,我们也做了一个demo app,展示情景感知给音乐app带来的更好体验,请移步Github
https://github.com/Bun-Cheung/Awa-Music
开发者交流
更多建议和需求,欢迎联系 awareness@huawei.com
【情景感知服务】让你的音乐APP更智能更懂用户(增加demo源代码)相关推荐
- android 情景感知 sdk,情景感知服务
在Manifest指定权限 在调用情景感知能力时,开发者需要先在Manifest中指定相应的权限.使用不同情景感知能力需指定不同的权限,具体所需权限请参阅<开发指南>.例如,使用耳机状态感 ...
- 响铃:版权合作后,手机真的迎来了只装一个音乐APP的时代?
文 | 曾响铃 来源 | 科技向令说(xiangling0815) 最近,音乐APP产品领域发生了两件大事. 先是3月6日阿里音乐与网易云音乐宣布达成音乐版权互相转授权合作,阿里转授滚石.韩国SM.B ...
- 著名音乐app网易云推广运营策划案
著名音乐app网易云推广运营策划案 目 录 市场状况 市场分析 市场推广目标 市场推广策略 市场推广计划 广告战略制定 媒体渠道策划 广告预算 广告效果评估 一. ...
- 音乐也社交:多米音乐App 5.0版更新,新添歌单功能,把UGC引入社区中
多米音乐今天在车库咖啡举行发布会,正式发布5.0版,并宣布多米移动端激活总用户达1.5亿.这个版本的App新添了歌单功能,让用户参与社区的内容创造.iOS版已上架,Android版也很快会更新. 一般 ...
- Google Awareness(情景感知)
谷歌Awareness的官网:https://developer.android.com/studio/publish/app-signing.html 在刚刚过去的I/O2016谷歌开发者大会上,谷 ...
- Android 音乐APP(五)音乐通知栏、后台播放音乐
Android 音乐通知栏 前言 正文 ① 通知栏按钮点击监听 ② 通知栏点击监听 ③ 通知栏业务处理 ④ 运行效果图 结语 前言 这篇文章的标题有些言简意赅了,也突出了这篇文章的核心,那就是通知 ...
- 牛X,网易开源了这个项目后,结果被山寨出了无数个网易云音乐APP,网友炸锅了!...
个点击上方"Github中文社区",关注 看遍Github好玩的项目 第023期原创分享 作者:huber 大家好,我是hub哥 大家印象中的国产开源,也许更多关注的是BAT.京东 ...
- Android——一个简单的音乐APP(二)
一个简单的音乐APP 效果视频 前言 音乐下载 音乐下载效果图 实习步骤&思想 添加到下载队列 单任务下载 多任务下载 音乐下载 获取音乐下载源 创建本地路径 创建目录 开始音乐下载 下载进度 ...
- k8s v1.17 新特性预告: 拓扑感知服务路由
大家好,我是 roc,来自腾讯云容器服务(TKE)团队,今天给大家介绍下我参与开发的一个 k8s v1.17 新特性: 拓扑感知服务路由. 01 名词解释 拓扑域: 表示在集群中的某一类 " ...
最新文章
- 【鸿蒙 HarmonyOS】Ability 简介 ( 简介 | 创建应用 | Page Ability 生命周期 )
- 使用Httpclient来替代客户端的jsonp跨域解决方案
- 计算机考研各个学校科目,计算机考研学校的前几个排名
- P3441-[POI2006]MET-Subway【图论,贪心】
- 菜鸟教程 之 JavaScript 实例
- 为什么 Nginx 比 Apache 更牛叉?
- mysql 内存表 限制_MySQL内存表的弊端
- 阿里云HBase产品体系架构及特性解析
- Python字符串逆序输出(六种方法)
- 远程RPC调用用于js逆向
- java实现开根号:牛顿迭代法
- Word基础(三十六)题注与标题样式
- UE4 相对坐标转世界坐标
- python入门教程陈孟林_Python基础教程学习路线
- 传说中 VUE 的“语法糖”到底是啥?
- 几何光学学习笔记(10)- 3.4 理想光学系统的放大率
- java实现手写签名_手写签字,保存笔迹到图片
- 认认真真做事,勤勤恳恳做人
- RabbitMQ-2-工作模式及参数配置
- idea 2019.1.3注册码(亲测可用)