本文只使用了腾讯地图的 自动提示 功能
本文只使用了腾讯地图的 自动提示 功能
本文只使用了腾讯地图的 自动提示 功能
其他2D,3D,地图街景等功能请自行查阅官方文档
另外,如果想用高德地图的朋友
请看我的上一篇博客:使用高德地图SDK的自动补全功能
1.集成检索SDK有两种方法 - 基于AS,使用Eclipse的童鞋请参考官方文档
矢量地图 v4.0.3.2 开始支持 maven 配置地图sdk,配置方法:
工程顶级 gradle.properties 文件中加入:
maven{ url "https://oss.sonatype.org/content/groups/public" }module build.gradle 文件中添加依赖库名称:
dependencies { //这里始终使用最新的稳定版本,用户也可以指定 4.0.3.2 之后的地图 sdk 版本号 compile 'com.tencent.map:tencent-map-vector-sdk:latest.release' }使用JAR包
下载地址:http://lbs.qq.com/android_v1/log_search.html
解压并且把TencentSearch_v1.x.x.jar 加入到libs目录下,右键add as library
参考文档:http://lbs.qq.com/android_v1/guide-project-setup.html
这样就完成了第一步。
2.申请key
申请开发者账号:http://lbs.qq.com/console/user_info.html
需要填写手机和邮箱
进入控制台以后,就可以看到自己的KEY的,在授权应用设置自己的包名
3.在app -> AndroidManifest.xml 加入:
<meta-data android:name="TencentMapSDK" android:value="输入申请的开发者权限"/>4.混淆
#腾讯地图检索sdk -keep class com.tencent.lbssearch.**{*;} -keep class com.google.gson.examples.android.model.** { *; }完成了工程设置以后,就是撸代码的时间了~
1,创建activity_poi_keyword_search.xml布局文件,如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/et_keyword" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/white" android:hint="请输入地址关键字搜索" android:paddingLeft="8dp" android:textColor="@color/deep_black" android:textSize="14sp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/line_color"/> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </LinearLayout>2,创建recyclerview的item布局item_poi_keyword_search.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/ll_item_layout" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/white" android:orientation="vertical" > <View android:layout_width="match_parent" android:layout_height="0.5dp" android:background="@color/line_color"/> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingBottom="8dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="8dp"> <TextView android:id="@+id/tv_detailAddress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textColor="@color/deep_black" android:textSize="16sp"/> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textColor="@color/black" android:textSize="16sp"/> </LinearLayout> </LinearLayout>3,创建实体类TXPoiAddressBean
public class TXPoiAddressBean implements Serializable{ private String longitude;//经度 private String latitude;//纬度 private String title;//信息内容 private String adcode;//行政编码 public String province;//省 public String city;//城市 private String district;//区 private String address; //详细地址 public TXPoiAddressBean(String lon, String lat, String title, String adcode, String province, String city, String district,String address){ this.longitude = lon; this.latitude = lat; this.title = title; this.adcode = adcode; this.province = province; this.city = city; this.district = district; this.address = address; } public String getLongitude() { return longitude; } public String getLatitude() { return latitude; } public String getTitle() { return title; } public String getAdcode() { return adcode; } public String getProvince() { return province; } public String getCity() { return city; } public String getDistrict() { return district; } public String getAddress(){ return address; } }4,创建适配器TXPoiKeywordSearchAdapter
public class TXPoiKeywordSearchAdapter extends RecyclerView.Adapter<TXPoiKeywordSearchAdapter.MyViewHolder> { private List<TXPoiAddressBean> poiAddressBean; private Context mContext; public TXPoiKeywordSearchAdapter(Context context, List<TXPoiAddressBean> poiAddressBean) { this.poiAddressBean = poiAddressBean; this.mContext = context; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view; view = LayoutInflater.from(mContext).inflate(R.layout.item_poi_keyword_search, parent, false); return new MyViewHolder(view); } @SuppressLint("SetTextI18n") @Override public void onBindViewHolder(MyViewHolder holder, int position) { final TXPoiAddressBean poiAddressBean = this.poiAddressBean.get(position); holder.tv_detailAddress.setText(poiAddressBean.getTitle()); holder.tv_content.setText(poiAddressBean.getProvince() + "-" + poiAddressBean.getCity() + "-" + poiAddressBean.getDistrict()); holder.ll_item_layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ((TXPoiKeywordSearchActivity) mContext).setSearchData(poiAddressBean); } }); } @Override public int getItemCount() { if (poiAddressBean != null) { return poiAddressBean.size(); } else { return 0; } } class MyViewHolder extends RecyclerView.ViewHolder { TextView tv_content; TextView tv_detailAddress; LinearLayout ll_item_layout; private MyViewHolder(View itemView) { super(itemView); tv_detailAddress = (TextView) itemView.findViewById(R.id.tv_detailAddress); tv_content = (TextView) itemView.findViewById(R.id.tv_content); ll_item_layout = (LinearLayout) itemView.findViewById(R.id.ll_item_layout); } } }5,创建搜索界面类TXPoiKeywordSearchActivity
public class TXPoiKeywordSearchActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private EditText mEt_keyword; private String keyWord = "";// 搜索关键字 TencentSearch tencentSearch; SuggestionParam suggestionParam; private TXPoiAddressBean bean; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_poi_keyword_search); getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); initView(); initData(); initListener(); } private void initView() { mRecyclerView = (RecyclerView) findViewById(R.id.search_recyclerView); mEt_keyword = (EditText) findViewById(R.id.et_keyword); } private void initData() { mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); tencentSearch = new TencentSearch(this); } private void initListener() { mEt_keyword.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { keyWord = String.valueOf(charSequence); if (!"".equals(keyWord)) { suggestionParam.keyword(keyWord); doSearch(); } } @Override public void afterTextChanged(Editable editable) { } }); } // 查询回调 private void doSearch() { tencentSearch.suggestion(suggestionParam, new HttpResponseListener() { @Override public void onSuccess(int i, BaseObject baseObject) { SuggestionResultObject oj = (SuggestionResultObject) baseObject; if (oj.data != null) { ArrayList<TXPoiAddressBean> poiList = new ArrayList<>();//自己创建的数据集合 for (SuggestionResultObject.SuggestionData data : oj.data) { Location location = data.location; double lng = location.lng; double lat = location.lat; String address = data.address; String title = data.title; String adcode = data.adcode; String provinceName = data.province; String cityName = data.city; String district = data.district; poiList.add(new TXPoiAddressBean(String.valueOf(lng), String.valueOf(lat), title, adcode, provinceName , cityName, district, address)); } TXPoiKeywordSearchAdapter adapter = new TXPoiKeywordSearchAdapter(TXPoiKeywordSearchActivity.this, poiList); mRecyclerView.setAdapter(adapter); } } @Override public void onFailure(int i, String s, Throwable throwable) { } }); } // 返回搜索结果 public void setSearchData(TXPoiAddressBean bean) { this.bean = bean; // 编写业务逻辑 } }6.在AndroidManifest中注册PoiKeywordSearchActivity
7.在需要用到的地方startActivity跳转到PoiKeywordSearchActivity即可