1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android Studio百度地图仿QQ发说说选择位置功能

Android Studio百度地图仿QQ发说说选择位置功能

时间:2024-04-03 07:04:02

相关推荐

Android Studio百度地图仿QQ发说说选择位置功能

此功能实现也相对简单,主要是对百度地图的应用,以及Android基础的知识。

百度地图用到了定位功能和附近POI搜索功能。

效果图:

实现步骤、思路:

1.新建Android项目

2.创建AK。

打开百度地图开发者平台:/

如果是新用户,请先注册账号,登录后,进入控制台(/apiconsole/key/create)

,创建自己的应用,里面有详细的步骤。

附:Android调试版SHA1值的获取方法

C:\Users\Administrator\.android>keytool -list -v -keystore debug.keystore密码:android

3.下载所需的jar包

下载jar包需要根据自己的功能,此功能需要定位及附近位置搜索。

jar包下载

4.Android studio初始化配置百度地图

步骤参考百度开发集成文档

5.贴出关键源码

LocationActivity.java

package com.hbck.myapplication;import android.content.Intent;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.EditText;import android.widget.ListView;import android.widget.Toast;import com.baidu.location.BDAbstractLocationListener;import com.baidu.location.BDLocation;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.model.LatLng;import com.baidu.mapapi.search.core.PoiInfo;import com.baidu.mapapi.search.core.SearchResult;import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;import com.baidu.mapapi.search.poi.PoiCitySearchOption;import com.baidu.mapapi.search.poi.PoiDetailResult;import com.baidu.mapapi.search.poi.PoiDetailSearchResult;import com.baidu.mapapi.search.poi.PoiIndoorResult;import com.baidu.mapapi.search.poi.PoiNearbySearchOption;import com.baidu.mapapi.search.poi.PoiResult;import com.baidu.mapapi.search.poi.PoiSearch;import java.util.ArrayList;import java.util.List;/*** 百度定位** @Date -11-06.*/public class LocationActivity extends AppCompatActivity {public LocationClient mLocationClient = null;private MyLocationListener myListener = new MyLocationListener();private EditText et_key;private ListView listView;private String city;private LatLng latLng;private List<PoiInfo> allPoi = new ArrayList<>();private String address;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_location);initView();initLocation();}private void initView() {et_key = findViewById(R.id.et_key);et_key.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void afterTextChanged(Editable editable) {if (editable.length() != 0 && !"".equals(editable.toString())) {//citySearch(editable.toString());nearbyPoiSearch(editable.toString(), latLng);}else {nearbyPoiSearch(address, latLng);}}});listView = findViewById(R.id.listView);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {String result = "";if (i != 0) {result = allPoi.get(i).getName();}Intent intent = getIntent();intent.putExtra("address", result);setResult(RESULT_OK, intent);finish();}});}private void initLocation() {mLocationClient = new LocationClient(getApplicationContext());//声明LocationClient类mLocationClient.registerLocationListener(myListener);//注册监听函数//配置定位SDK参数LocationClientOption option = new LocationClientOption();//可选,是否需要地址信息,默认为不需要,即参数为false//如果开发者需要获得当前点的地址信息,此处必须为trueoption.setIsNeedAddress(true);//可选,是否需要周边POI信息,默认为不需要,即参数为false//如果开发者需要获得周边POI信息,此处必须为trueoption.setIsNeedLocationPoiList(true);//mLocationClient为第二步初始化过的LocationClient对象//需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用//更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明mLocationClient.setLocOption(option);mLocationClient.start();}public void finish(View view) {finish();}public class MyLocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果//以下只列举部分获取地址相关的结果信息//更多结果信息获取说明,请参照类参考中BDLocation类中的说明address = location.getBuildingName();if (address == null)address = location.getAddrStr(); //获取详细地址信息String country = location.getCountry(); //获取国家String province = location.getProvince(); //获取省份city = location.getCity(); //获取城市String district = location.getDistrict(); //获取区县String street = location.getStreet(); //获取街道信息latLng = new LatLng(location.getLatitude(), location.getLongitude());nearbyPoiSearch(address, latLng);}}/*** 周边poi检索示例*/public void nearbyPoiSearch(String key, LatLng latLng) {//创建poi检索实例PoiSearch poiSearch = PoiSearch.newInstance();//设置poi监听者该方法要先于检索方法searchNearby(PoiNearbySearchOption)前调用,否则会在某些场景出现拿不到回调结果的情况poiSearch.setOnGetPoiSearchResultListener(poiListener);//设置请求参数PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption().keyword(key)//检索关键字.location(latLng)//检索位置.pageNum(0)//分页编号,默认是0页.pageCapacity(30)//设置每页容量,默认10条.radius(2000);//附近检索半径//发起请求poiSearch.searchNearby(nearbySearchOption);//释放检索对象// poiSearch.destroy();}/* 城市内搜索*/private void citySearch(String key) {// 设置检索参数PoiSearch poiSearch = PoiSearch.newInstance();// 设置检索监听器poiSearch.setOnGetPoiSearchResultListener(poiListener);PoiCitySearchOption citySearchOption = new PoiCitySearchOption();citySearchOption.city(city);// 城市citySearchOption.keyword(key);// 关键字citySearchOption.pageCapacity(15);// 默认每页10条citySearchOption.pageNum(1);// 分页编号// 发起检索请求poiSearch.searchInCity(citySearchOption);}//创建poi监听者OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() {@Overridepublic void onGetPoiResult(PoiResult poiResult) {if (poiResult == null || poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {// 没有找到检索结果Toast.makeText(LocationActivity.this, "未找到结果", Toast.LENGTH_LONG).show();allPoi.clear();PoiInfo info = new PoiInfo();info.setName("不显示");info.setAddress("");allPoi.add(info);listView.setAdapter(new MyAdapter(LocationActivity.this, allPoi));return;}if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {// 检索结果正常返回allPoi.clear();PoiInfo info = new PoiInfo();info.setName("不显示");info.setAddress("");allPoi.add(info);allPoi.addAll(poiResult.getAllPoi());listView.setAdapter(new MyAdapter(LocationActivity.this, allPoi));}}@Overridepublic void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {Log.d("LocationActivity", "poiDetailResult:" + poiDetailResult);}@Overridepublic void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {Log.d("LocationActivity", "poiDetailSearchResult:" + poiDetailSearchResult);}@Overridepublic void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {Log.d("LocationActivity", "poiIndoorResult:" + poiIndoorResult);}};@Overrideprotected void onDestroy() {super.onDestroy();}}

ListView Adapter:MyAdapter.java

package com.hbck.myapplication;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.baidu.mapapi.search.core.PoiInfo;import java.util.List;/*** @Date -11-06.*/public class MyAdapter extends BaseAdapter {private Context mContext;private List<PoiInfo> list;public MyAdapter(Context mContext, List<PoiInfo> list) {this.mContext = mContext;this.list = list;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int i) {return list.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {ViewHolder holder = null;if (view == null) {view = View.inflate(mContext, R.layout.item_address, null);holder = new ViewHolder(view);view.setTag(holder);} else {holder = (ViewHolder) view.getTag();}holder.tv_name.setText(list.get(i).name);holder.tv_address.setText(list.get(i).address);return view;}static class ViewHolder {public TextView tv_name;public TextView tv_address;public ViewHolder(View view) {tv_name = view.findViewById(R.id.tv_name);tv_address = view.findViewById(R.id.tv_address);}}}

界面布局:activity_location.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#F0F1F3"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#3CA7FD"><Buttonandroid:onClick="finish"android:id="@+id/btn_cancel"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@null"android:text="取消"android:textColor="#fff"android:textSize="16sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="地点"android:textColor="#fff"android:textSize="18sp" /></RelativeLayout><EditTextandroid:id="@+id/et_key"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="16dp"android:background="#fff"android:drawableLeft="@mipmap/ic_search_40dp"android:hint="搜索其他位置"android:padding="5dp"android:textColor="#000"android:textColorHint="#A6A6A6"android:textSize="14sp" /><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FAFAFA"android:dividerHeight="1dp"></ListView></LinearLayout>

主要代码就这些,完整代码就不列了,都是些基础的功能,如有问题,欢迎骚扰,乐意解答技术问题。

如有代码代写需求或需要源码的或软件定制的,请加QQ:2103752102,

Android、IOS、javaweb,c#等

小强程序设计工作室:淘宝店

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。