当你在使用位置搜索时,父子节点信息可以帮助您解锁更丰富的位置结果,让您的出行更便捷。比如当你在搜索机场不仅会返回机场的信息,还会返回航站楼、停车场、出入口等信息,为用户提供更场景化的位置结果,满足用户探索大型场所的需求。
本文介绍了如何使用华为位置服务实现搜索位置返回父子节点信息,以下是具体开发步骤
1. 开发前准备
您需要完成必要的开发准备工作,同时请确保您的工程中已经配置HMS Core SDK的Maven仓地址,并且完成了本服务的SDK集成。
1.1 在项目级build.gradle文件中配置maven仓地址。
buildscript {
repositories {
google()
jcenter()
maven { url 'https://developer.huawei.com/repo/' }
}
//配置AGC插件
dependencies {
classpath "com.android.tools.build:gradle:3.3.2"
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://developer.huawei.com/repo/' }
}
}
1.2 在应用级build.gradle中引入SDK。
ependencies {
implementation 'com.huawei.hms:site:4.0.0.202'
}
2. 开发步骤
2.1 创建搜索服务。
SearchService searchService = SearchServiceFactory.create(this, Utils.getApiKey());
2.2 开发者创建查询结果处理类
“SearchResultListener”,该类实现SearchResultListener接口,使用此类中的“onSearchResult(TextSearchResponse results)”方法获取查询结果并实现具体业务。
SearchResultListener<TextSearchResponse> resultListener = new SearchResultListener<TextSearchResponse>() {
@Override
public void onSearchResult(TextSearchResponse results) {
Log.d(TAG, "onTextSearchResult: " + results.toString());
List<Site> siteList;
if (results == null || results.getTotalCount() <= 0 || (siteList = results.getSites()) == null || siteList.size() <= 0) {
resultTextView.setText("Result is Empty!");
return;
}
for (Site site : siteList) {
// 开发者根据需要处理数据结果
....
// 子节点数据
if ((site.getPoi() != null)) {
ChildrenNode[] childrenNodes = poi.getChildrenNodes();
// 开发者根据需要处理数据结果
....
}
}
}
@Override
public void onSearchError(SearchStatus status) {
resultTextView.setText("Error : " + status.getErrorCode() + " " + status.getErrorMessage());
}
};
2.3 创建TextSearchRequest类,配置请求参数。
TextSearchRequest request = new TextSearchRequest();
String query = "Josep Tarradellas Airport";
request.setQuery(query);
Double lat = 41.300621;
Double lng = 2.0797638;
request.setLocation(new Coordinate(lat, lng));
// 设置获取子节点信息
request.setChildren(true);
2.4 设置请求结果处理器,实现请求与结果处理器的绑定。
searchService.textSearch(request, resultListener);
这样就实现了搜索位置返回父子节点信息 ,下面是实现效果图,展示下此功能的强大吧。
作者:胡椒