高德定位

来源:互联网 发布:linux常用命令kill 编辑:程序博客网 时间:2024/05/09 19:26

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;

@Overrideprotected 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);}/** * 方法必须重写 */@Overrideprotected void onResume() {    super.onResume();    mapView.onResume();}/** * 方法必须重写 */@Overrideprotected void onPause() {    super.onPause();    mapView.onPause();    deactivate();}/** * 方法必须重写 */@Overrideprotected void onSaveInstanceState(Bundle outState) {    super.onSaveInstanceState(outState);    mapView.onSaveInstanceState(outState);}/** * 方法必须重写 */@Overrideprotected void onDestroy() {    super.onDestroy();    mapView.onDestroy();    if (null != mlocationClient) {        mlocationClient.onDestroy();    }}/** * 定位成功后回调函数 */@Overridepublic 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);        }    }}/** * 激活定位 */@Overridepublic 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//// }
0 0