【情景感知服務(wù)】讓你的音樂APP更智能更懂用戶(增加demo源代碼)

場景

情景感知服務(wù)能帶來什么

作為音樂發(fā)燒友,閑下來的時候總想打開App还绘,享受沉浸在音樂中的放松。然而栖袋,App推薦的歌單經(jīng)常沒法滿足我的需要拍顷,如果App能根據(jù)我當前的情景狀態(tài),推送給我的歌曲恰好就是我當前最想聽的塘幅,那該多好啊~

什么是情景感知服務(wù)昔案?

情景感知服務(wù)(Awareness
Kit)能感知用戶當前的時間、地理位置电媳、活動狀態(tài)踏揣、耳機狀態(tài)、天氣狀況匾乓、環(huán)境光捞稿、車載連接狀態(tài)、信標連接狀態(tài)等情景钝尸,并通過能常駐后臺運行的圍欄能力向APP進行提醒括享,使APP能第一時間給用戶提供精準和貼心的服務(wù)。上述情景感知能力還在不斷擴充中珍促,而且您可以自由組合這些感知能力铃辖,構(gòu)建組合圍欄,從而讓APP的服務(wù)能力更加智能猪叙,更加精準娇斩。

在情景感知服務(wù)的支持下,App能給用戶帶來如下體驗

l 每次連接上耳機(有線耳機穴翩、藍牙耳機)犬第,手機通知欄會彈出音樂App通知,提示用戶時候是否要啟動音樂播放芒帕,或者是否要自動播放音樂

l 點擊通知歉嗓,可以打開音樂APP,并展示用戶當前情境下最恰當?shù)母鑶?/p>

l 跑步開始背蟆,推薦節(jié)奏輕快歌單鉴分;跑步結(jié)束哮幢,推薦節(jié)奏緩場歌單

l 清晨起床,連接耳機志珍,來點清新音樂橙垢;夜深人靜,連接耳機伦糯,讓靜心的音樂讓我舒緩

l 發(fā)動汽車柜某,手機連接藍牙車載,音樂App自動切換成車載模式敛纲,并主動詢問是否播放各場景的行車音樂(白天喂击、夜晚、雨天淤翔、晴天惭等,推薦各不同)

l 不同的節(jié)日,應(yīng)該有特別的節(jié)日音樂

同時办铡,用戶還可以通過各種感知能力的組合圍欄,設(shè)置排除場景琳要,避免給用戶過多打擾

情景感知服務(wù)的優(yōu)勢

無需用戶提前開啟App寡具,用戶進入地理圍欄范圍后,即可后臺激活A(yù)pp稚补,觸發(fā)通知童叠。

無懼App進程被系統(tǒng)殺死,通過圍欄服務(wù)课幕,依然可接受到通知厦坛。

點擊通知,即可前臺激活A(yù)PP乍惊,點擊直接跳轉(zhuǎn)App推薦界面杜秸。

通過組合圍欄實現(xiàn)精準推送;也可避免在用戶不需要的場景提供無效通知润绎,避免頻繁打擾撬碟。

開發(fā)前準備

Awareness Kit集成需要有如下3個關(guān)鍵步驟,可以參考華為開發(fā)者聯(lián)盟的文檔

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

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

代碼開發(fā)關(guān)鍵步驟

1.創(chuàng)建耳機圍欄

//創(chuàng)建一個感知耳機連接的圍欄莉撇,當耳機處于連接狀態(tài)時呢蛤,此圍欄的狀態(tài)為true
AwarenessBarrier headsetBarrier = HeadsetBarrier.keeping(HeadsetStatus.CONNECTED);
 
//創(chuàng)建一個PendingIntent,當圍欄狀態(tài)改變的時候棍郎,會觸發(fā)該PendingIntent其障,這里以發(fā)送廣播為例
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
 
//創(chuàng)建圍欄的標簽,后續(xù)可以通過標簽查詢或者刪除對應(yīng)圍欄
String headsetBarrierLabel = "headset keeping connected label";

2.注冊圍欄

//把剛剛創(chuàng)建好的耳機圍欄和它對應(yīng)的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.創(chuàng)建廣播接收器監(jiān)聽圍欄事件

//本示例中我們耳機圍欄的PendingIntent設(shè)置的是發(fā)送廣播励翼,所以需要定義對應(yīng)的廣播接收器來監(jiān)聽圍欄的狀態(tài)
public final class HeadsetBarrierReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //圍欄的信息通過intent傳遞過來蜈敢,我們通過Barrier.extract方法將其解析出來
        BarrierStatus barrierState = BarrierStatus.extract(intent);
        //通過BarrierStatus獲取label和圍欄的當前狀態(tài)
        String label = barrierState.getBarrierLabel();
        int status = barrierState.getPresentStatus();
        if (status == BarrierStatus.TRUE && label.equals(headsetBarrierLabel)) {
            //當圍欄狀態(tài)為true時,代表耳機處于連接狀態(tài)抚笔,這時就可以在通知欄推送相關(guān)消息
             //send Notification....
        }
    }
}

4.通過Awareness快照接口獲取當前情景狀態(tài)

在用戶點擊通知打開app后扶认,可以通過Awareness各個能力的快照接口來獲取用戶當前的情景狀態(tài)以推薦不同歌單。

例如獲取時間情景狀態(tài):

Awareness.getCaptureClient(context).getTimeCategories()
        .addOnSuccessListener(timeIntervalsResponse -> {
            TimeCategories categories = timeIntervalsResponse.getTimeCategories();
            if (categories.isTimeCategory(TimeBarrier.TIME_CATEGORY_HOLIDAY)) {
                //當天是節(jié)假日殊橙,可推薦節(jié)假日歌單
            }
             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();
        });

獲取用戶當前的活動狀態(tài)以推薦歌單:

Awareness.getCaptureClient(context).getBehavior()
        .addOnSuccessListener(behaviorResponse -> {
            BehaviorStatus behaviorStatus = behaviorResponse.getBehaviorStatus();
            DetectedBehavior mostLikelyBehavior = behaviorStatus.getMostLikelyBehavior();
            String str = "Most likely behavior is " + mostLikelyBehavior.getType();
        })
        .addOnFailureListener(e -> {
            //獲取活動狀態(tài)失敗
            Log.e(TAG, "Failed to get the behavior.", e);
        });

獲取當前是否是連接車載藍牙:

int deviceType = 0; // 0 代表獲取的設(shè)備類型為車載藍牙
Awareness.getCaptureClient(this).getBluetoothStatus(deviceType)
        .addOnSuccessListener(bluetoothStatusResponse -> {
            BluetoothStatus bluetoothStatus = bluetoothStatusResponse.getBluetoothStatus();
            int status = bluetoothStatus.getStatus();
            if (status == BluetoothStatus.CONNECTED) {
                //當前是連接車載藍牙膨蛮,可將app切換為車載模式
            }
        })
        .addOnFailureListener(e -> {
             //獲取車載藍牙狀態(tài)失敗
            Log.e(TAG, "Failed to get Bluetooth status.", e);
        });

Demo效果

為了便于開發(fā)者更好的理解此場景叠纹,我們也做了一個demo app,展示情景感知給音樂app帶來的更好體驗敞葛,請移步Github
https://github.com/Bun-Cheung/Awa-Music


開發(fā)者交流
更多建議和需求誉察,歡迎聯(lián)系 awareness@huawei.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惹谐,隨后出現(xiàn)的幾起案子持偏,更是在濱河造成了極大的恐慌,老刑警劉巖氨肌,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸿秆,死亡現(xiàn)場離奇詭異,居然都是意外死亡怎囚,警方通過查閱死者的電腦和手機卿叽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恳守,“玉大人考婴,你說我怎么就攤上這事〈吆妫” “怎么了沥阱?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伊群。 經(jīng)常有香客問我喳钟,道長,這世上最難降的妖魔是什么在岂? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任奔则,我火速辦了婚禮,結(jié)果婚禮上蔽午,老公的妹妹穿的比我還像新娘易茬。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布抽莱。 她就那樣靜靜地躺著范抓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪食铐。 梳的紋絲不亂的頭發(fā)上匕垫,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音虐呻,去河邊找鬼象泵。 笑死,一個胖子當著我的面吹牛斟叼,可吹牛的內(nèi)容都是我干的偶惠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼朗涩,長吁一口氣:“原來是場噩夢啊……” “哼忽孽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谢床,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤兄一,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后识腿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘾腰,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年覆履,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片费薄。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡硝全,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楞抡,到底是詐尸還是另有隱情伟众,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布召廷,位于F島的核電站凳厢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏竞慢。R本人自食惡果不足惜先紫,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筹煮。 院中可真熱鬧遮精,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至檬洞,卻和暖如春狸膏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背添怔。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工湾戳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澎灸。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓院塞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親性昭。 傳聞我的和親對象是個殘疾皇子拦止,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355