微信发送位置源码
来源:互联网 发布:cnc串联程序软件 编辑:程序博客网 时间:2024/05/16 11:21
科技评论
如今的手机已经泛滥,谁都去做手机,做家具的也去做手机,的确,手机变得很重要,手机的重要直接带来的就是手机内部应用和服务的升级,APP也是服务的一种,人们都说软件已经走下滑路线,再加上,微信小程序的出现,更是加剧了软件淡化的趋势,其实,微信的小程序的确可以代替一部分软件,但是最终还是代替不了软件,就像小程序永远都不会代替微信它本身,也有一部分企业已经开发出自己的小程序,准备借势大展宏图,究竟效果怎样,到时我们就知道了,说到底它的最终模式还是一个像应用市场一样的东西,对于技术来讲,Android需求没有以前那么大了,不是因为小程序来了,而是时代快要变了,另一个势头我们都很期待。
效果演示
实现的功能
- 根据经纬度定位
- 根据所在的经纬度搜索附近的地点
- 根据关键字搜索地点
- 为地图增加标记
- 发送选择的地点位置信息
你能学到什么
- 高德地图的使用
- 如何定位(获取当前位置信息)
- 如何通过经纬度搜索附近的地点(也叫兴趣点poi)
- 如何通过关键字搜索附近的兴趣点
微信位置发送分析
- 进入发送页面后,自己当前位置有一个蓝色标记,它是不会变的,在蓝色的标记上有一个红色的小钉子,是用来显示你想要定位定到哪去,它在地图的中央
- 地图下面有一个列表,是根据当前的经纬度搜索出来的兴趣点,也叫poi,默认选中第一个条目,也就是当前的位置
- 当你点击列表的条目时,此时地图会根据你点击的条目变换到你所点击的地点去,此时,被点击的条目被选中
- 当你手动的移动地图的时候,中间的红色小钉,不会动,当你移动完地图之后,红色小红钉会有一个上下移动的动画,表示你要定位到红色小红钉处,此时根据小红钉所处的经纬度来搜索附近的兴趣点(poi)
- 进入搜索页面之后,通过关键字搜索地点,搜索完成之后,展示在列表里,默认选中第一个,点击条目之后,根据经纬度继续搜索附近的poi,此时列表的第一项是被点击的条目,地图同时移动到被点击的地点处
- 点击发送后拿到当前被选中的条目的位置信息,然后发送
分析完了微信的,下面就开始我们自己的,跟着我走,实现你自己想要的模样吧
代码实现及步骤
1. 首页获取定位信息
public class MapUtils implements AMapLocationListener { private AMapLocationClient locationClient = null; // 定位 private AMapLocationClientOption locationOption = null; // 定位设置 @Override public void onLocationChanged(AMapLocation aMapLocation) { mLonLatListener.getLonLat(aMapLocation); locationClient.stopLocation(); locationClient.onDestroy(); locationClient = null; locationOption = null; } private LonLatListener mLonLatListener; public void getLonLat(Context context, LonLatListener lonLatListener) { locationClient = new AMapLocationClient(context); locationOption = new AMapLocationClientOption(); locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);// 设置定位模式为高精度模式 locationClient.setLocationListener(this);// 设置定位监听 locationOption.setOnceLocation(false); // 单次定位 每隔2秒定位一次 locationOption.setNeedAddress(true);//返回地址信息 mLonLatListener = lonLatListener;//接口 locationClient.setLocationOption(locationOption);// 设置定位参数 locationClient.startLocation(); // 启动定位 } public interface LonLatListener { void getLonLat(AMapLocation aMapLocation); } }
2. 逆地理编码,经纬度转换
逆地理编码步骤:
- 创建GeocodeSearch实例
geocoderSearch = new GeocodeSearch(getApplicationContext());
- 实现GeocodeSearch.OnGeocodeSearchListener监听
//设置逆地理编码监听 geocoderSearch.setOnGeocodeSearchListener(this); /** * 逆地理编码查询回调 * * @param result * @param i */ @Override public void onRegeocodeSearched(RegeocodeResult result, int i) { if (i == 1000) {//转换成功 if (result != null && result.getRegeocodeAddress() != null && result.getRegeocodeAddress().getFormatAddress() != null) { //拿到详细地址 addressName = result.getRegeocodeAddress().getFormatAddress(); // 逆转地里编码不是每次都可以得到对应地图上的opi //条目中第一个地址 也就是当前你所在的地址 mAddressInfoFirst = new SearchAddressInfo(addressName, addressName, false, convertToLatLonPoint(mFinalChoosePosition)); //其实也是可以在这就能拿到附近的兴趣点的 } else { ToastUtil.show(this, "没有搜到"); } } else { ToastUtil.showerror(this, i); } } /** * 地理编码查询回调 * * @param geocodeResult * @param i */ @Override public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { }
通过RegeocodeResult拿到编码后的信息
3. 通过经纬度信息搜索poi
/** * 开始进行poi搜索 * 通过经纬度获取附近的poi信息 * <p> * 1、keyword 传 "" * 2、poiSearch.setBound(new PoiSearch.SearchBound(lpTemp, 5000, true)); 根据 */ protected void doSearchQueryByPosition() { currentPage = 0; query = new PoiSearch.Query("", "", city);// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国) query.setPageSize(20);// 设置每页最多返回多少条poiitem query.setPageNum(currentPage);// 设置查第一页 LatLonPoint llPoint = convertToLatLonPoint(mFinalChoosePosition); if (llPoint != null) { poiSearch = new PoiSearch(this, query); poiSearch.setOnPoiSearchListener(this); // 实现 onPoiSearched 和 onPoiItemSearched poiSearch.setBound(new PoiSearch.SearchBound(llPoint, 5000, true));// // 设置搜索区域为以lpTemp点为圆心,其周围5000米范围 poiSearch.searchPOIAsyn();// 异步搜索 } }
4. 通过关键字搜索poi
/** * 按照关键字搜索附近的poi信息 * * @param key */ protected void doSearchQueryByKeyWord(String key) { currentPage = 0; query = new PoiSearch.Query(key, "", city);// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国) query.setPageSize(20);// 设置每页最多返回多少条poiitem query.setPageNum(currentPage);// 设置查第一页 query.setCityLimit(true); //限定城市 if (lp != null) { poiSearch = new PoiSearch(this, query); poiSearch.setOnPoiSearchListener(this); // 实现 onPoiSearched 和 onPoiItemSearched poiSearch.setBound(new PoiSearch.SearchBound(lp, 5000, true));// // 设置搜索区域为以latLonPoint点为圆心,其周围5000米范围 poiSearch.searchPOIAsyn();// 异步搜索 } }
通过poiSearch.setOnPoiSearchListener(this)实现对搜索结果的监听,在onPoiSearched(),onPoiItemSearched()回调里处理返回的结果
5. 处理拿到的poi信息
@Override public void onPoiSearched(PoiResult result, int rcode) { if (rcode == 1000) { if (result != null && result.getQuery() != null) {// 搜索poi的结果 if (result.getQuery().equals(query)) {// 是否是同一条 poiResult = result; poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始 List<SuggestionCity> suggestionCities = poiResult .getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息 //搜索到数据 if (poiItems != null && poiItems.size() > 0) { mData.clear(); //先将 逆地理编码过的当前地址 也就是条目中第一个地址 放到集合中 mData.add(mAddressInfoFirst); SearchAddressInfo addressInfo = null; for (PoiItem poiItem : poiItems) { addressInfo = new SearchAddressInfo(poiItem.getTitle(), poiItem.getSnippet(), false, poiItem.getLatLonPoint()); mData.add(addressInfo); } if (isHandDrag) { mData.get(0).isChoose = true; } addressAdapter.notifyDataSetChanged(); } else if (suggestionCities != null && suggestionCities.size() > 0) { showSuggestCity(suggestionCities); } else { ToastUtil.show(ShareLocationActivity.this, "对不起,没有搜索到相关数据"); } } } else { Toast.makeText(this, "对不起,没有搜索到相关数据!", Toast.LENGTH_SHORT).show(); } } }
6. 移动地图
- 设置监听
//对amap添加移动地图事件监听器 aMap.setOnCameraChangeListener(this);
- 实现监听
/** * 移动地图时调用 * * @param cameraPosition */ @Override public void onCameraChange(CameraPosition cameraPosition) { } /** * 地图移动结束后调用 * * @param cameraPosition */ @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { //每次移动结束后地图中心的经纬度 mFinalChoosePosition = cameraPosition.target; centerImage.startAnimation(centerAnimation); if (isHandDrag || isFirstLoad) {//手动去拖动地图 // 开始进行poi搜索 getAddressFromLonLat(cameraPosition.target); doSearchQueryByPosition(); } else if (isBackFromSearch) { //搜索地址返回后 拿到选择的位置信息继续搜索附近的兴趣点 isBackFromSearch = false; doSearchQueryByPosition(); } else { addressAdapter.notifyDataSetChanged(); } isHandDrag = true; isFirstLoad = false; }
7. 分享页面的完整代码
public class ShareLocationActivity extends Activity implements GeocodeSearch.OnGeocodeSearchListener, AMap.OnMapClickListener, AMap.OnCameraChangeListener, PoiSearch.OnPoiSearchListener, AdapterView.OnItemClickListener, View.OnClickListener { private String addressName; private GeocodeSearch geocoderSearch; private MapView mapView; private ListView listView; private LatLonPoint latLonPoint; private AMap aMap; private Marker locationMarker; private LatLng mFinalChoosePosition; private ImageView centerImage; private Animation centerAnimation; private int currentPage = 0;// 当前页面,从0开始计数 private PoiSearch.Query query;// Poi查询条件类 private PoiSearch poiSearch; private String city; private PoiResult poiResult; // poi返回的结果 private List<PoiItem> poiItems;// poi数据 private ArrayList<SearchAddressInfo> mData = new ArrayList<>(); public SearchAddressInfo mAddressInfoFirst = null; private boolean isHandDrag = true; private boolean isFirstLoad = true; private boolean isBackFromSearch = false; private AddressAdapter addressAdapter; private UiSettings uiSettings; private ImageButton locationButton; private ImageView search; private TextView send; private ImageView back; private static final int SEARCH_ADDDRESS = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_share_location); double longitude = getIntent().getDoubleExtra("longitude", 0); double latitude = getIntent().getDoubleExtra("latitude", 0); city = getIntent().getStringExtra("cityCode"); //经纬度信息 latLonPoint = new LatLonPoint(latitude, longitude); mapView = (MapView) findViewById(R.id.mapview); listView = (ListView) findViewById(R.id.listview); centerImage = (ImageView) findViewById(R.id.center_image); locationButton = (ImageButton) findViewById(R.id.position_btn); search = (ImageView) findViewById(R.id.seach); send = (TextView) findViewById(R.id.send); back = (ImageView) findViewById(R.id.base_back); search.setOnClickListener(this); send.setOnClickListener(this); back.setOnClickListener(this); locationButton.setOnClickListener(this); mapView.onCreate(savedInstanceState); centerAnimation = AnimationUtils.loadAnimation(this, R.anim.center_anim); addressAdapter = new AddressAdapter(this, mData); listView.setAdapter(addressAdapter); listView.setOnItemClickListener(this); initMap(); } @Override protected void onResume() { super.onResume(); mapView.onResume(); } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); mapView.onSaveInstanceState(outState); } private void initMap() { if (aMap == null) { aMap = mapView.getMap(); //地图ui界面设置 uiSettings = aMap.getUiSettings(); //地图比例尺的开启 uiSettings.setScaleControlsEnabled(true); //关闭地图缩放按钮 就是那个加号 和减号 uiSettings.setZoomControlsEnabled(false); aMap.setOnMapClickListener(this); //对amap添加移动地图事件监听器 aMap.setOnCameraChangeListener(this); locationMarker = aMap.addMarker(new MarkerOptions() .anchor(0.5f, 0.5f) .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker))) .position(new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude()))); //拿到地图中心的经纬度 mFinalChoosePosition = locationMarker.getPosition(); } setMap(); aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude()), 20)); } private void setMap() { geocoderSearch = new GeocodeSearch(getApplicationContext()); //设置逆地理编码监听 geocoderSearch.setOnGeocodeSearchListener(this); } /** * 根据经纬度得到地址 */ public void getAddressFromLonLat(final LatLng latLonPoint) { // 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系 RegeocodeQuery query = new RegeocodeQuery(convertToLatLonPoint(latLonPoint), 200, GeocodeSearch.AMAP); geocoderSearch.getFromLocationAsyn(query);// 设置同步逆地理编码请求 } /** * 把LatLng对象转化为LatLonPoint对象 */ public static LatLonPoint convertToLatLonPoint(LatLng latlon) { return new LatLonPoint(latlon.latitude, latlon.longitude); } /** * 把LatLonPoint对象转化为LatLon对象 */ public LatLng convertToLatLng(LatLonPoint latLonPoint) { return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude()); } /** * 逆地理编码查询回调 * * @param result * @param i */ @Override public void onRegeocodeSearched(RegeocodeResult result, int i) { if (i == 1000) {//转换成功 if (result != null && result.getRegeocodeAddress() != null && result.getRegeocodeAddress().getFormatAddress() != null) { //拿到详细地址 addressName = result.getRegeocodeAddress().getFormatAddress(); // 逆转地里编码不是每次都可以得到对应地图上的opi //条目中第一个地址 也就是当前你所在的地址 mAddressInfoFirst = new SearchAddressInfo(addressName, addressName, false, convertToLatLonPoint(mFinalChoosePosition)); //其实也是可以在这就能拿到附近的兴趣点的 } else { ToastUtil.show(this, "没有搜到"); } } else { ToastUtil.showerror(this, i); } } /** * 地理编码查询回调 * * @param geocodeResult * @param i */ @Override public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { } @Override public void onMapClick(LatLng latLng) { Toast.makeText(this, "latitude" + String.valueOf(latLng.latitude), Toast.LENGTH_SHORT).show(); } /** * 移动地图时调用 * * @param cameraPosition */ @Override public void onCameraChange(CameraPosition cameraPosition) { } /** * 地图移动结束后调用 * * @param cameraPosition */ @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { //每次移动结束后地图中心的经纬度 mFinalChoosePosition = cameraPosition.target; centerImage.startAnimation(centerAnimation); if (isHandDrag || isFirstLoad) {//手动去拖动地图 // 开始进行poi搜索 getAddressFromLonLat(cameraPosition.target); doSearchQueryByPosition(); } else if (isBackFromSearch) { //搜索地址返回后 拿到选择的位置信息继续搜索附近的兴趣点 isBackFromSearch = false; doSearchQueryByPosition(); } else { addressAdapter.notifyDataSetChanged(); } isHandDrag = true; isFirstLoad = false; } /** * 开始进行poi搜索 * 通过经纬度获取附近的poi信息 * <p> * 1、keyword 传 "" * 2、poiSearch.setBound(new PoiSearch.SearchBound(lpTemp, 5000, true)); 根据 */ protected void doSearchQueryByPosition() { currentPage = 0; query = new PoiSearch.Query("", "", city);// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国) query.setPageSize(20);// 设置每页最多返回多少条poiitem query.setPageNum(currentPage);// 设置查第一页 LatLonPoint llPoint = convertToLatLonPoint(mFinalChoosePosition); if (llPoint != null) { poiSearch = new PoiSearch(this, query); poiSearch.setOnPoiSearchListener(this); // 实现 onPoiSearched 和 onPoiItemSearched poiSearch.setBound(new PoiSearch.SearchBound(llPoint, 5000, true));// // 设置搜索区域为以lpTemp点为圆心,其周围5000米范围 poiSearch.searchPOIAsyn();// 异步搜索 } } @Override protected void onPause() { super.onPause(); mapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override public void onPoiSearched(PoiResult result, int rcode) { if (rcode == 1000) { if (result != null && result.getQuery() != null) {// 搜索poi的结果 if (result.getQuery().equals(query)) {// 是否是同一条 poiResult = result; poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始 List<SuggestionCity> suggestionCities = poiResult .getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息 //搜索到数据 if (poiItems != null && poiItems.size() > 0) { mData.clear(); //先将 逆地理编码过的当前地址 也就是条目中第一个地址 放到集合中 mData.add(mAddressInfoFirst); SearchAddressInfo addressInfo = null; for (PoiItem poiItem : poiItems) { addressInfo = new SearchAddressInfo(poiItem.getTitle(), poiItem.getSnippet(), false, poiItem.getLatLonPoint()); mData.add(addressInfo); } if (isHandDrag) { mData.get(0).isChoose = true; } addressAdapter.notifyDataSetChanged(); } else if (suggestionCities != null && suggestionCities.size() > 0) { showSuggestCity(suggestionCities); } else { ToastUtil.show(ShareLocationActivity.this, "对不起,没有搜索到相关数据"); } } } else { Toast.makeText(this, "对不起,没有搜索到相关数据!", Toast.LENGTH_SHORT).show(); } } } @Override public void onPoiItemSearched(PoiItem poiItem, int i) { } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mFinalChoosePosition = convertToLatLng(mData.get(position).latLonPoint); for (int i = 0; i < mData.size(); i++) { mData.get(i).isChoose = false; } mData.get(position).isChoose = true; isHandDrag = false; // 点击之后,改变了地图中心位置, onCameraChangeFinish 也会调用 // 只要地图发生改变,就会调用 onCameraChangeFinish ,不是说非要手动拖动屏幕才会调用该方法 aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(mFinalChoosePosition.latitude, mFinalChoosePosition.longitude), 20)); } /** * poi没有搜索到数据,返回一些推荐城市的信息 */ private void showSuggestCity(List<SuggestionCity> cities) { String infomation = "推荐城市\n"; for (int i = 0; i < cities.size(); i++) { infomation += "城市名称:" + cities.get(i).getCityName() + "城市区号:" + cities.get(i).getCityCode() + "城市编码:" + cities.get(i).getAdCode() + "\n"; } ToastUtil.show(this, infomation); } @Override public void onClick(View v) { if (v == locationButton) { //回到当前位置 aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude()), 20)); } else if (v == back) { finish(); } else if (v == search) { Intent intent = new Intent(this, SearchAddressActivity.class); intent.putExtra("position", mFinalChoosePosition); intent.putExtra("city", city); startActivityForResult(intent, SEARCH_ADDDRESS); isBackFromSearch = false; } else if (v == send) { sendLocaton(); } } private void sendLocaton() { SearchAddressInfo addressInfo = null; for (SearchAddressInfo info : mData) { if (info.isChoose) { addressInfo = info; } } if (addressInfo != null) { ToastUtil.show(this, "要发送的数据:" + "\n 经度:" + addressInfo.latLonPoint.getLongitude() + "\n 纬度:" + addressInfo.latLonPoint.getLatitude() + "\n 地址:" + addressInfo.addressName); } else { ToastUtil.show(this, "请选择地址"); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SEARCH_ADDDRESS && resultCode == RESULT_OK) { SearchAddressInfo info = (SearchAddressInfo) data.getParcelableExtra("position"); mAddressInfoFirst = info; // 上一个页面传过来的 位置信息 info.isChoose = true; isBackFromSearch = true; isHandDrag = false; //移动地图 aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(info.latLonPoint.getLatitude(), info.latLonPoint.getLongitude()), 20)); } } }
8. 搜索页面的完整代码
public class SearchAddressActivity extends AppCompatActivity implements View.OnClickListener, PoiSearch.OnPoiSearchListener, AdapterView.OnItemClickListener { private TextView search; private EditText content; private ListView listView; private SearchAdapter adapter; private ArrayList<SearchAddressInfo> mData = new ArrayList<>(); private String searchText; private LatLonPoint lp;// private PoiResult poiResult; // poi返回的结果 private List<PoiItem> poiItems;// poi数据 private int currentPage = 0;// 当前页面,从0开始计数 private PoiSearch.Query query;// Poi查询条件类 private PoiSearch poiSearch; private String city; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search_address); LatLng position = getIntent().getParcelableExtra("position"); city = getIntent().getStringExtra("city"); lp = new LatLonPoint(position.latitude, position.longitude); iniView(); } private void iniView() { search = (TextView) findViewById(R.id.btn_search); content = (EditText) findViewById(R.id.input_edittext); listView = (ListView) findViewById(R.id.listview); search.setOnClickListener(this); adapter = new SearchAdapter(this, mData); listView.setAdapter(adapter); listView.setOnItemClickListener(this); progressDialog = new ProgressDialog(this); progressDialog.setMessage("搜索中..."); } @Override public void onClick(View v) { if (v == search) { dealSearch(); } } private void dealSearch() { searchText = content.getText().toString().trim(); if (TextUtils.isEmpty(searchText)) { ToastUtil.show(this, "请输入搜索关键字"); return; } else { progressDialog.show(); doSearchQueryByKeyWord(searchText); } } /** * 按照关键字搜索附近的poi信息 * * @param key */ protected void doSearchQueryByKeyWord(String key) { currentPage = 0; query = new PoiSearch.Query(key, "", city);// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国) query.setPageSize(20);// 设置每页最多返回多少条poiitem query.setPageNum(currentPage);// 设置查第一页 query.setCityLimit(true); //限定城市 if (lp != null) { poiSearch = new PoiSearch(this, query); poiSearch.setOnPoiSearchListener(this); // 实现 onPoiSearched 和 onPoiItemSearched poiSearch.setBound(new PoiSearch.SearchBound(lp, 5000, true));// // 设置搜索区域为以latLonPoint点为圆心,其周围5000米范围 poiSearch.searchPOIAsyn();// 异步搜索 } } @Override public void onPoiSearched(PoiResult result, int rcode) { progressDialog.dismiss(); if (rcode == 1000) { if (result != null && result.getQuery() != null) {// 搜索poi的结果 if (result.getQuery().equals(query)) {// 是否是同一条 poiResult = result; poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始 List<SuggestionCity> suggestionCities = poiResult .getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息 if (poiItems.size() == 0) { //没有搜到数据 ToastUtil .show(this, "对不起,没有搜索到相关数据!"); return; } mData.clear(); SearchAddressInfo addressInfo = null; for (int i = 0; i < poiItems.size(); i++) { PoiItem poiItem = poiItems.get(i); if (i == 0) { addressInfo = new SearchAddressInfo(poiItem.getTitle(), poiItem.getSnippet(), true, poiItem.getLatLonPoint()); } else { addressInfo = new SearchAddressInfo(poiItem.getTitle(), poiItem.getSnippet(), false, poiItem.getLatLonPoint()); } mData.add(addressInfo); } adapter.notifyDataSetChanged(); } } else { ToastUtil .show(this, "对不起,没有搜索到相关数据!"); } } else { ToastUtil .show(this, "对不起,没有搜索到相关数据!"); } } @Override public void onPoiItemSearched(PoiItem poiItem, int i) { } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(); SearchAddressInfo addressInfo = mData.get(position); intent.putExtra("position", addressInfo); setResult(RESULT_OK, intent); finish(); } }
9. 最后阐述
看到这里,你想要的基本就能实现了
如果需要源码,关注微信公共号AppCode,回复:“位置源码”,即可获得源码下载链接。
Demo apk下载链接
扫码即可关注我的微信公共号:AppCode
1 0
- 微信发送位置源码
- 微信发送位置源码
- 实现微信发送位置效果
- 实现 微信/QQ聊天 发送位置功能
- 微信伪造位置
- 微信实验六、微信PHP后台验证、接收和发送消息及源码下载
- 【微信开发】-发送位置获取周边信息, 主要代码在private function receiveLocation($object)
- 【微信开发】-发送位置获取Place Suggestion, 主要代码在private function receiveLocation($object)
- 【微信开发】-发送位置进行普通IP定位,主要代码在private function receiveLocation($object)
- android 开发:仿照微信 发送本人位置(基于百度地图)(前篇)
- android 开发:仿照微信 发送本人位置(基于百度地图)(后篇)
- 高德地图实现仿qq,微信发送位置功能实现逻辑
- 微信发送消息
- 微信图文发送
- Salesforce 发送微信
- 环信sdk发送位置信息一直失败
- Android集成网易云信(关于聊天发送位置消息)
- 【微信开发】-发送位置线路规划Direction API v1.0, 主要代码在private function receiveLocation($object)
- C++STL之string
- mac Eclipse无法启动,卡在loading org.eclipse.egit.core启动界面
- web.xml中load-on-startup的作用
- Java 递归
- c语言知识框架图
- 微信发送位置源码
- 经典滤波器的设计
- CODEVS 1907 方格取数 3
- 绝对强大的三个linux指令: ar, nm, objdump
- 添加水印
- opengl学习资料
- Mac OS X常用操作入门指南
- linux scp 拷贝文件或文件夹的操作方法
- 10.5 Throwable类