前言
前段時間看了一部紀錄片《中國遊客在巴黎》,講述了外國人眼中“中國式旅遊”:熱衷景點打卡,沉迷拍照留念,無暇仔細欣賞;留足時間,買買買,不能枉此行。網友總結中國式旅遊“上車睡覺,下車拍照,回到家啥也不知道”,可以說是小編本編了。我趕緊“反思”了下,覺得純粹是因為我懶,不想做旅遊攻略,只能跟團到“人從眾”景點欣賞別人的後腦勺。每逢此刻,我就想有個可以推薦旅遊行程、適時出行提示、推薦衣食住票資訊等的全能“管家”。
重點來了,華為推出的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脫穎而出,更懂使用者,也更動人心
【情景感知服務】讓“買買買”有了新的開啟方式
訪問華為開發者聯盟官網
獲取開發指導文件
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間瞭解 HMS Core 最新技術資訊~