高德定位
2016-09-26 08:26
330 查看
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.LocationSource.OnLocationChangedListener;
import com.amap.api.maps.MapView;
import com.amap.api.maps.overlay.PoiOverlay;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.core.SuggestionCity;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.amap.api.services.poisearch.PoiSearch.OnPoiSearchListener;
public class MainActivity extends Activity implements LocationSource,
AMapLocationListener {
private OnLocationChangedListener mListener;
private AMapLocationClient mlocationClient;
private AMapLocationClientOption mLocationOption;
private EditText ed_tv1;
private Button but1;
private MapView mapView;
PoiSearch.Query query;
private PoiResult poiResult;
private AMap aMap;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.LocationSource.OnLocationChangedListener;
import com.amap.api.maps.MapView;
import com.amap.api.maps.overlay.PoiOverlay;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.core.SuggestionCity;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.amap.api.services.poisearch.PoiSearch.OnPoiSearchListener;
public class MainActivity extends Activity implements LocationSource,
AMapLocationListener {
private OnLocationChangedListener mListener;
private AMapLocationClient mlocationClient;
private AMapLocationClientOption mLocationOption;
private EditText ed_tv1;
private Button but1;
private MapView mapView;
PoiSearch.Query query;
private PoiResult poiResult;
private AMap aMap;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed_tv1 = (EditText) findViewById(R.id.ed_tv1); but1 = (Button) findViewById(R.id.but1); mapView = (MapView) findViewById(R.id.map); // 获取地图控件引用 mapView = (MapView) findViewById(R.id.map); // 在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理 mapView.onCreate(savedInstanceState); // but1.setOnClickListener(this); init(); } private void init() { if (aMap == null) { aMap = mapView.getMap(); setUpMap(); } } /** * 设置一些amap的属性 */ private void setUpMap() { aMap.setLocationSource(this);// 设置定位监听 aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false // 设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种 aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE); } /** * 方法必须重写 */ @Override protected void onResume() { super.onResume(); mapView.onResume(); } /** * 方法必须重写 */ @Override protected void onPause() { super.onPause(); mapView.onPause(); deactivate(); } /** * 方法必须重写 */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } /** * 方法必须重写 */ @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); if (null != mlocationClient) { mlocationClient.onDestroy(); } } /** * 定位成功后回调函数 */ @Override public void onLocationChanged(AMapLocation amapLocation) { if (mListener != null && amapLocation != null) { if (amapLocation != null && amapLocation.getErrorCode() == 0) { mListener.onLocationChanged(amapLocation);// 显示系统小蓝点 amapLocation.getLocationType();// 获取当前定位结果来源,如网络定位结果,详见定位类型表 amapLocation.getLatitude();// 获取纬度 amapLocation.getLongitude();// 获取经度 amapLocation.getAccuracy();// 获取精度信息 amapLocation.getAddress();// 地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。 amapLocation.getCountry();// 国家信息 amapLocation.getProvince();// 省信息 amapLocation.getCity();// 城市信息 amapLocation.getDistrict();// 城区信息 amapLocation.getStreet();// 街道信息 amapLocation.getStreetNum();// 街道门牌号信息 amapLocation.getCityCode();// 城市编码 amapLocation.getAdCode();// 地区编码 amapLocation.getAoiName();// 获取当前定位点的AOI信息 Toast.makeText(MainActivity.this, amapLocation.getAddress(), 1) .show(); } else { String errText = "定位失败," + amapLocation.getErrorCode() + ": " + amapLocation.getErrorInfo(); Log.e("AmapErr", errText); } } } /** * 激活定位 */ @Override public void activate(OnLocationChangedListener listener) { mListener = listener; if (mlocationClient == null) { mlocationClient = new AMapLocationClient(this); mLocationOption = new AMapLocationClientOption(); // 设置定位监听 mlocationClient.setLocationListener(this); // 设置为高精度定位模式 mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); // 设置定位参数 mlocationClient.setLocationOption(mLocationOption); // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 // 在定位结束后,在合适的生命周期调用onDestroy()方法 // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 mlocationClient.startLocation(); } } /** * 停止定位 */ public void deactivate() { mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { } // private void init() { // if (aMap == null) { // aMap = mapView.getMap(); // setUpMap(); // } // } // // private void setUpMap() { // aMap.setLocationSource(this);// 设置定位监听 // aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 // aMap.setMyLocationEnabled(true);// // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false // // 设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种 // aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE); // } // // @Override // public void activate(OnLocationChangedListener listener) { // // TODO Auto-generated method stub // mListener = listener; // if (mlocationClient == null) { // mlocationClient = new AMapLocationClient(this); // mLocationOption = new AMapLocationClientOption(); // // 设置定位监听 // mlocationClient.setLocationListener(this); // // 设置为高精度定位模式 // mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); // // 设置定位参数 // mlocationClient.setLocationOption(mLocationOption); // // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 // // 在定位结束后,在合适的生命周期调用onDestroy()方法 // // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 // mlocationClient.startLocation(); // } // } // // /** // * 方法必须重写 // */ // @Override // protected void onResume() { // super.onResume(); // mapView.onResume(); // } // // /** // * 方法必须重写 // */ // @Override // protected void onPause() { // super.onPause(); // mapView.onPause(); // deactivate(); // } // // /** // * 方法必须重写 // */ // @Override // protected void onSaveInstanceState(Bundle outState) { // super.onSaveInstanceState(outState); // mapView.onSaveInstanceState(outState); // } // // /** // * 方法必须重写 // */ // @Override // protected void onDestroy() { // super.onDestroy(); // mapView.onDestroy(); // if (null != mlocationClient) { // mlocationClient.onDestroy(); // } // } // // @Override // public void deactivate() { // // TODO Auto-generated method stub // mListener = null; // if (mlocationClient != null) { // mlocationClient.stopLocation(); // mlocationClient.onDestroy(); // } // mlocationClient = null; // } // // @Override // public void onLocationChanged(AMapLocation amapLocation) { // if (mListener != null && amapLocation != null) { // if (amapLocation != null && amapLocation.getErrorCode() == 0) { // mListener.onLocationChanged(amapLocation);// 显示系统小蓝点 // amapLocation.getLocationType();// 获取当前定位结果来源,如网络定位结果,详见定位类型表 // amapLocation.getLatitude();// 获取纬度 // amapLocation.getLongitude();// 获取经度 // amapLocation.getAccuracy();// 获取精度信息 // amapLocation.getAddress();// // 地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。 // amapLocation.getCountry();// 国家信息 // amapLocation.getProvince();// 省信息 // amapLocation.getCity();// 城市信息 // amapLocation.getDistrict();// 城区信息 // amapLocation.getStreet();// 街道信息 // amapLocation.getStreetNum();// 街道门牌号信息 // amapLocation.getCityCode();// 城市编码 // amapLocation.getAdCode();// 地区编码 // amapLocation.getAoiName();// 获取当前定位点的AOI信息 // // Toast.makeText(MainActivity.this, amapLocation.getAddress(), 1) // .show(); // // } else { // String errText = "定位失败," + amapLocation.getErrorCode() + ": " // + amapLocation.getErrorInfo(); // Log.e("AmapErr", errText); // // } // } // } // // // @Override // // public void onClick(View v) { // // // TODO Auto-generated method stub // // aMap.clear();// 清理之前的图标 // // String keyWord = ed_tv1.getText().toString().trim(); // // query = new PoiSearch.Query(keyWord, "", "北京"); // // query.setPageSize(10);// 设置每页最多返回多少条poiitem // // query.setPageNum(0);// 设置查询页码 // // PoiSearch poiSearch = new PoiSearch(this, query);// 初始化poiSearch对象 // // poiSearch.setOnPoiSearchListener(this);// 设置回调数据的监听器 // // poiSearch.searchPOIAsyn();// 开始搜索 // // } // // 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有多少页 // List<PoiItem> poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始 // List<SuggestionCity> suggestionCities = poiResult // .getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息 // // if (poiItems != null && poiItems.size() > 0) { // aMap.clear();// 清理之前的图标 // PoiOverlay poiOverlay = new PoiOverlay(aMap, poiItems); // poiOverlay.removeFromMap(); // poiOverlay.addToMap(); // poiOverlay.zoomToSpan(); // } else if (suggestionCities != null // && suggestionCities.size() > 0) { // showSuggestCity(suggestionCities); // } else { // // ToastUtil.show(PoiKeywordSearchActivity.this, // // R.string.no_result); // } // } // } else { // // ToastUtil.show(PoiKeywordSearchActivity.this, // // R.string.no_result); // } // } else { // // ToastUtil.showerror(this, rCode); // } // // } // // private void showSuggestCity(List<SuggestionCity> suggestionCities) { // // TODO Auto-generated method stub // // } // // @Override // public void onPoiItemSearched(PoiItem arg0, int arg1) { // // TODO Auto-generated method stub // // }
相关文章推荐
- 【OpenCV入门指南】第五篇 轮廓检测 上
- Java工程师裸辞之后的面试!!!
- 算法一(动态规划)
- 快速了解微信小程序的使用,一个根据小程序的框架开发的todos app
- 配置bean之你使用外部属性
- MapReduce实例之PageRank
- 【OpenCV入门指南】第四篇 图像的二值化
- 指定ubuntu下的Python的运行版本
- 你不知道的Kettle学习笔记5--日志
- Win10主题打不开,自动弹出桌面图标设置
- MySQL安装问题小结
- excell 画图
- Android 源码系列之<九>从源码的角度深入理解Activity的launchModel特性
- 【OpenCV入门指南】第三篇Canny边缘检测
- 浅谈Android的消息机制
- java基础接口练习
- Java和C#下的参数验证方法
- 类似气泡的样式demo
- iOS 9 地图定位崩溃
- Android Studio下对资源进行分包