简介

华为位置SDK提供位置查询服务,帮助开发者的用户更加方便地使用位置相关服务,以及帮助开发者快速获取用户。Site Kit通过提供如下核心能力,帮助开发者快速构建基于位置服务的产品,满足用户对探索周边地点的需求:

您将建立什么

开发者通过华为位置SDK可以开发围绕位置搜索的APP,比如:

您将会学到什么

硬件要求

软件要求

集成HUAWEI HMS Core能力,需要完成以下准备工作

具体操作,请按照《HUAWEI HMS Core集成准备》中详细说明来完成。

1、打开Android Studio,选择File – New – New Project,选择Empty Activity, 新建工程。
2、配置HMS SDK的maven仓地址。

3、添加编译依赖

  1. 打开应用级的build.gradle文件。
  2. 在"dependencies "中添加如下编译依赖。
    dependencies { implementation 'com.huawei.hms:site:{version}' }
  3. 在文件头添加配置 apply plugin: ‘com.huawei.agconnect'

1. 在layout中添加EditText,用来输入查询的关键字;添加TextView,用来展示查询结果;以及其他一些组件。

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="30dp" android:layout_gravity="bottom" android:background="#D3D3D3" android:gravity="center_vertical" android:paddingLeft="5dp" android:text="Parameters" android:textSize="16sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Query: " /> <EditText android:id="@+id/edit_text_text_search_query" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:autofillHints="" android:hint="" android:imeOptions="actionGo" android:inputType="text" android:text="Eiffel Tower" /> </LinearLayout> <Button android:id="@+id/button_text_search" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="search" android:text="Search" android:textAllCaps="false" /> <TextView android:layout_width="match_parent" android:layout_height="30dp" android:layout_gravity="bottom" android:background="#D3D3D3" android:gravity="center_vertical" android:paddingLeft="5dp" android:text="Result" android:textSize="16sp" /> <TextView android:id="@+id/response_text_search" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textIsSelectable="true" /> </LinearLayout> </ScrollView>

2. 声明SearchService对象,并在onCreate方法中通过SearchServiceFactory实例化SearchService。

package com.huawei.codelab.sitecodelab; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.TextView; import com.huawei.hms.site.api.SearchResultListener; import com.huawei.hms.site.api.SearchService; import com.huawei.hms.site.api.SearchServiceFactory; import com.huawei.hms.site.api.model.AddressDetail; import com.huawei.hms.site.api.model.SearchStatus; import com.huawei.hms.site.api.model.Site; import com.huawei.hms.site.api.model.TextSearchRequest; import com.huawei.hms.site.api.model.TextSearchResponse; import androidx.appcompat.app.AppCompatActivity; /** * site activity entrance class * * @author David * @since 2019-12-12 */ public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private SearchService searchService; TextView resultTextView; EditText queryInput; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); searchService = SearchServiceFactory.create(this); queryInput = findViewById(R.id.edit_text_text_search_query); resultTextView = findViewById(R.id.response_text_search); } }

3. 创建TextSearchRequest对象,它是位置搜索的请求体。其中query是必选参数,其他是可选参数:

4. 调用textSearch接口,需传入上一步创建的TextSearchRequest和结果监听对象SearchResultListener,从回调的onSearchResult方法中获取结果,并展示地点信息。

public void search(View view) { TextSearchRequest textSearchRequest = new TextSearchRequest(); textSearchRequest.setQuery(queryInput.getText().toString()); searchService.textSearch(textSearchRequest, new SearchResultListener<TextSearchResponse>() { @Override public void onSearchResult(TextSearchResponse textSearchResponse) { StringBuilder response = new StringBuilder("\n"); response.append("success\n"); int count = 1; AddressDetail addressDetail; for (Site site : textSearchResponse.getSites()) { addressDetail = site.getAddress(); response.append(String.format( "[%s] name: %s, formatAddress: %s, country: %s, countryCode: %s \r\n", "" + (count++), site.getName(), site.getFormatAddress(), (addressDetail == null ? "" : addressDetail.getCountry()), (addressDetail == null ? "" : addressDetail.getCountryCode()))); } Log.d(TAG, "search result is : " + response); resultTextView.setText(response.toString()); } @Override public void onSearchError(SearchStatus searchStatus) { Log.e(TAG, "onSearchError is: " + searchStatus.getErrorCode()); } }); }

编译、加载、调试

使用Android Studio自带的Gradle编译工具,双击installDebug,即可安装Demo。

调测准备

打开开发调试版本的位置服务APP后,查询字符串已预置Eiffel Tower,点击Search按钮,查看是否能获取到结果。

干得好,你已经成功完成了Codelab并学到了:

详细开发者文档请参考位置服务

本Codelab中所用demo源码下载地址如下:

源码下载

已复制代码