華為Awareness kit,您旅途路上的超智慧管家

華為移動服務發表於2021-10-18

前言

前段時間看了一部紀錄片《中國遊客在巴黎》,講述了外國人眼中“中國式旅遊”:熱衷景點打卡,沉迷拍照留念,無暇仔細欣賞;留足時間,買買買,不能枉此行。網友總結中國式旅遊“上車睡覺,下車拍照,回到家啥也不知道”,可以說是小編本編了。我趕緊“反思”了下,覺得純粹是因為我懶,不想做旅遊攻略,只能跟團到“人從眾”景點欣賞別人的後腦勺。每逢此刻,我就想有個可以推薦旅遊行程、適時出行提示、推薦衣食住票資訊等的全能“管家”。

重點來了,華為推出的Awareness Kit情景感知服務完全可以實現這些功能和服務,並且完全免費,這簡直就是造福懶人旅遊的必備神器啊!

旅遊出行應用場景
華為情景感知服務(HUAWEI Awareness Kit)通過提供獲取使用者當前時間、位置、活動狀態、音訊裝置狀態、環境光、天氣、信標等情景感知組合能力,並呼叫這些能力,幫助App更快速、高效的洞悉使用者當前所處的情景,提供更加智慧、貼心的體驗。

外出旅行時,在Awareness Kit支援下,天氣感知能力提醒使用者準備合適旅行衣服,位置感知能力推薦出行、餐飲、景點、票務等資訊,時間和天氣感知能力提醒日出/日落等資訊,讓使用者獲得超貼心的旅伴服務。

關鍵開發程式碼

開發準備

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<Void>() {
            @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脫穎而出,更懂使用者,也更動人心

【情景感知服務】讓“買買買”有了新的開啟方式

訪問華為開發者聯盟官網
獲取開發指導文件
華為移動服務開源倉庫地址:GitHubGitee

關注我們,第一時間瞭解 HMS Core 最新技術資訊~

相關文章