合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
widget是内置地点搜索建议功能的搜索组件。当用户在搜索框输入搜索词时,组件会显示一个可供选择的预测地点列表,当用户选择列表中任意一项时,会返回一个Site对象,然后您的应用可以使用该对象获取所选地点的详细信息。
有两种方式可以在您的应用中使用搜索组件:
使用时需在应用级的build.gradle文件中,在"dependencies"里添加如下编译依赖,如果未添加将会报错:implementation 'androidx.recyclerview:recyclerview:1.1.0'。API密钥是您在华为开发者联盟创建应用时生成的API密钥,注意使用时需要调用URLEncoder.encode("Your apiKey", "UTF-8")方法对API密钥进行encodeURI编码。
通过SearchFragment将搜索组件添加到您的应用中,请执行以下步骤:
<fragment
android:id="@+id/widget_fragment"
android:name="com.huawei.hms.site.widget.SearchFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> SearchFragment fragment = (SearchFragment) getSupportFragmentManager().findFragmentById(R.id.widget_fragment);
// 设置SearchFragment的API key
fragment.setApiKey("API key");
fragment.setOnSiteSelectedListener(new SiteSelectionListener() {
@Override
public void onSiteSelected(Site data) {
Toast.makeText(getApplication(), data.getName(), Toast.LENGTH_LONG).show();
}
@Override
public void onError(SearchStatus status) {
Toast
.makeText(getApplication(), status.getErrorCode() + "\n" + status.getErrorMessage(),
Toast.LENGTH_LONG)
.show();
}
});val fragment: SearchFragment = supportFragmentManager.findFragmentById(R.id.widget_fragment) as SearchFragment
// 设置SearchFragment的API key
fragment.setApiKey("API key")
fragment.setOnSiteSelectedListener(object : SiteSelectionListener {
override fun onSiteSelected(data: Site) {
Toast.makeText(application, data.getName(), Toast.LENGTH_LONG).show()
}
override fun onError(status: SearchStatus) {
Toast
.makeText(application, status.getErrorCode() + "\n" + status.getErrorMessage(),
Toast.LENGTH_LONG)
.show()
}
})| 图1 搜索框 | 图2 搜索结果列表 |
使用Intent启动搜索组件,请按照以下步骤操作:
private SearchIntent searchIntent;
searchIntent = new SearchIntent();
searchIntent.setApiKey("API key"); private val searchIntent = SearchIntent()
searchIntent.setApiKey("API key")Intent intent = searchIntent.getIntent(this); startActivityForResult(intent, SearchIntent.SEARCH_REQUEST_CODE);
val intent = searchIntent.getIntent(this) startActivityForResult(intent, SearchIntent.SEARCH_REQUEST_CODE)
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (SearchIntent.SEARCH_REQUEST_CODE == requestCode) {
if (SearchIntent.isSuccess(resultCode)) {
Site site;
site = searchIntent.getSiteFromIntent(data);
Toast.makeText(getApplication(), site.getName(), Toast.LENGTH_LONG).show();
}
}
}override fun onActivityResult(requestCode: Int, resultCode: Int, @Nullable data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (SearchIntent.SEARCH_REQUEST_CODE == requestCode) {
if (SearchIntent.isSuccess(resultCode)) {
val site: Site = searchIntent.getSiteFromIntent(data)
Toast.makeText(application, site.getName(), Toast.LENGTH_LONG).show()
}
}
}SearchFragment和SearchIntent都可以通过setFilter(SearchFilter)限制搜索建议结果,此时需要创建SearchFilter对象来设置限制条件,如下表所示。
| 接口 | 描述 |
|---|---|
| setQuery(String query) | 设置搜索关键字。 |
| setLocation(Coordinate location) | 设置搜索结果偏向的经纬度。 |
| setRadius(Integer radius) | 设置搜索半径,单位:米。取值范围:[1, 50000],默认50000米。 |
| setBounds(CoordinateBounds bounds) | 设置搜索结果偏向的范围。 |
| setCountryCode(String countryCode) | 设置在指定国家内搜索,采用ISO 3166-1 alpha-2。 |
| setLanguage(String language) | 设置搜索结果返回的语言,取值范围参见支持的语言的语种代码。如果不指定语种,返回英语,如果没有英语,返回当地语言。 |
| setPoiType(List<LocationType> poiType) | 设置返回地点的POI类型。取值范围是LocationType的子集,包括GEOCODE、ADDRESS、ESTABLISHMENT、REGIONS、CITIES五种类型。 |
| setPoliticalView(String politicalView) | 设置政治观点。 注意 该接口已废弃。 |
| setChildren(boolean children) | 设置是否返回子节点。 |
| setStrictBounds(Boolean strictBounds) | 设置是否严格限制在Bounds内搜索,默认值为false。 |