一个应用程序如何向用户显示更多的POI细节?
在应用程序中显示POI细节对开发者来说是一个挑战。想知道如何应对这样的挑战吗?请继续阅读以了解详情。
随着移动互联网的日益普及,移动应用程序现在已经成为我们日常生活中不可或缺的一部分,并提供越来越多的多样化功能,给用户带来了许多好处。其中一个功能是在应用程序中搜索兴趣点(POI)或地方,如银行和餐馆。
当用户在一个应用程序中搜索一个兴趣点时,除了关于该兴趣点的一般信息,如名称和位置,他们还希望显示其他相关细节。例如,当在打车软件中搜索一个POI时,用户通常希望该软件同时显示搜索到的POI和附近的其他POI,以便用户可以选择最方便的接送点。在手机银行应用中搜索银行网点时,用户通常希望应用同时显示搜索到的银行网点和附近类似类型的POI及其细节,如营业时间、电话号码和附近的道路。
然而,在应用程序中显示POI的细节对于非地图相关的应用程序的开发者来说通常是一个挑战,因为它需要大量详细的POI数据,而这些数据对于大多数应用程序的开发者来说通常很难收集。因此,如果有一种服务,当用户在应用中搜索不同类型的POI(如酒店、餐馆和景区)时,应用可以利用这种服务为他们提供POI的信息(如营业时间和评级),那不是很好吗?
幸运的是,HMS核心网站套件提供了一站式的POI搜索服务,它拥有全球200多个国家和地区的超过2.6亿的POI。此外,该服务支持70多种语言,使用户有能力用自己的母语搜索地方。套件中的地点详情搜索功能允许应用程序根据POI的独特ID获得有关POI的信息,如名称、地址、经度和纬度。例如,用户可以在移动银行应用中搜索附近的银行分行,并查看每个分行的信息,如营业时间和电话号码,或者在旅游应用中搜索一个风景区的位置,并查看附近的酒店和天气预报的信息,这都要归功于地点细节搜索功能。地点细节搜索功能甚至可以被基于位置的游戏所利用,当玩家在游戏中搜索某个POI时,可以利用该功能显示游戏中的任务和其他玩家的排名。
这个工具包的整合过程很简单,我将在下面演示。
演示
下面的截图可以给你一个关于地点详细搜索功能的印象。
集成程序
准备工作
在开始之前,你需要做一些准备工作,比如在AppGallery Connect中配置你的应用信息,整合Site SDK,以及配置混淆配置文件。
如果你使用Android Studio,你可以通过Maven资源库将SDK集成到你的项目中。配置混淆配置文件的目的是为了防止SDK被混淆。
你可以按照这里的指示来做相关准备工作。在本文中,我将不对准备步骤进行描述。
开发地方详细搜索
在做完相关准备工作后,你需要实现获取POI详细信息的地点详细搜索功能。其过程如下。
1.声明一个SearchService对象并使用SearchServiceFactory来实例化该对象。
在创建SearchService对象时,你需要传递Context参数和API密钥。如果你想在HMS核心(APK)需要更新时显示一个更新向导,建议你传递活动类型的Context参数。至于API密钥,它是在你在HUAWEI开发者网站上创建应用时生成的。注意,你需要使用URLEncoder.encode("Your apiKey", "UTF-8") 方法对API密钥进行编码。
2.创建一个DetailSearchRequest对象并设置相关参数。
该对象将被用作搜索POI详细信息的请求主体。相关参数如下:
- siteId:一个POI的ID。该参数是强制性的。
- language:显示搜索结果的语言。如果没有指定语言,将使用英语,如果英语不可用,将使用当地语言。
- children: 表示是否返回关于POI的子节点的信息。默认值为false,表示不返回子节点信息。如果该参数被设置为 "true",将返回所有关于POI的子节点的信息。
3.创建一个SearchResultListener对象来监听搜索结果。
4.使用创建的SearchService对象来调用detailSearch()方法,并将创建的DetailSearchRequest和SearchResultListener对象传递给该方法。
5.使用创建的SearchResultListener对象获得DetailSearchResponse对象。你可以从DetailSearchResponse对象中获得一个Site对象,然后对其进行解析以获得搜索结果。
示例代码如下:
// Declare a SearchService object.
private SearchService searchService;
// Create a SearchService instance.
searchService = SearchServiceFactory.create(this, "
API key
");
// Create a request body.
DetailSearchRequest request = new DetailSearchRequest();
request.setSiteId("
C2B922CC4651907A1C463127836D3957
");
request.setLanguage("
fr
");
request.setChildren(
false
);
// Create a search result listener.
SearchResultListener<DetailSearchResponse> resultListener = new SearchResultListener<DetailSearchResponse>() {
// Return the search result when the search is successful.
@Override
public void onSearchResult(DetailSearchResponse result) {
Site site;
if (result == null || (site = result.getSite()) == null) {
return;
}
Log.i("TAG", String.format("siteId: '%s', name: %s\r\n", site.getSiteId(), site.getName()));
}
// Return the result code and description when a search exception occurs.
@Override
public void onSearchError(SearchStatus status) {
Log.i("TAG", "Error : " + status.getErrorCode() + " " + status.getErrorMessage());
}
};
// Call the place detail search API.
searchService.detailSearch(request, resultListener);
现在你已经完成了整合过程,你的应用程序应该能够向用户显示他们搜索的POI的详细信息。
结论
移动应用程序现在是我们日常生活中不可或缺的一部分。为了改善用户体验并为用户提供更方便的体验,移动应用程序正在提供越来越多的功能,如POI搜索。
当在应用程序中搜索POI时,除了一般的信息,如POI的名称和位置,用户通常希望能显示其他与环境相关的信息,如营业时间和附近的类似POI。然而,在应用程序中显示POI的细节对于非地图相关的应用程序的开发者来说是一个挑战,因为它需要大量详细的POI数据,而这些数据对于大多数应用程序的开发者来说通常很难收集。
在这篇文章中,我展示了我是如何使用地点细节搜索功能解决这一挑战的,这使得我的应用程序能够向用户显示POI细节。整个整合过程简单明了,成本效益高,是向用户显示POI细节的有效方式。