位置服务SDK提供位置查询服务,帮助开发者的用户更加方便地使用位置相关服务,以及帮助开发者快速获取用户。Site Kit通过提供如下核心能力,帮助开发者快速构建基于位置服务的产品,满足用户对探索周边地点的需求:
开发者通过位置服务SDK可以开发围绕位置搜索的App,比如:
集成Site Kit能力,需要完成以下准备工作
具体操作,请按照《HUAWEI HMS Core集成准备》中详细说明来完成。
(a) 下载应用中的"agconnect-services.json"配置文件。
(b) 将"agconnect-services.json"配置在模块级目录下,如下图所示。
(a) 打开模块级的build.gradle文件。
(b) 在"dependencies "中添加如下编译依赖。
dependencies {
implementation 'com.huawei.hms:site:{version}'
}
(c) 在文件头添加配置 apply plugin: 'com.huawei.agconnect'
<?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>
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
*/
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private SearchService searchService;
private TextView resultTextView;
private EditText queryInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
searchService = SearchServiceFactory.create(this, URLEncoder.encode("your_api_key", "utf-8"));
} catch (UnsupportedEncodingException e) {
Log.e(TAG, "encode apikey error");
}
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());
textSearchRequest.setHwPoiType(HwLocationType.TOWER);
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;
if (null != textSearchResponse) {
if (null != textSearchResponse.getSites()) {
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())));
}
} else {
response.append("textSearchResponse.getSites() is null!");
}
} else {
response.append("textSearchResponse is null!");
}
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并学到了:
详细开发者文档请参见位置服务。
您可以点击下方按钮下载源码。