Android之高德地图定位

1.在高德地图的开发者平台下载定位jar

http://lbs.amap.com/api/android-location-sdk/guide/startlocation/#t1

2.在项目的libs目录下加入定位jar包


3.声明定位需要的信息

private AMap aMap;  
 MapView mMapView = null;
 //定义经度
 private double lat; 
 //定义维度
 private double lon; 
 
 
 //声明AMapLocationClient类对象
 public AMapLocationClient mLocationClient = null;
 //声明mLocationOption对象
 public AMapLocationClientOption mLocationOption = null;
 //声明定位回调监听器
 public AMapLocationListener mLocationListener=new AMapLocationListener()
{


@Override
public void onLocationChanged(AMapLocation amapLocation) {
// TODO Auto-generated method stub
 if (amapLocation != null) {
       if (amapLocation.getErrorCode() == 0) {
       //定位成功回调信息,设置相关消息
       amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
       amapLocation.getLatitude();//获取纬度
       amapLocation.getLongitude();//获取经度
       amapLocation.getAccuracy();//获取精度信息
       SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       Date date = new Date(amapLocation.getTime());
       df.format(date);//定位时间
       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信息
              
               lat = amapLocation.getLatitude();  
                   lon = amapLocation.getLongitude();  
               // 设置当前地图显示为当前位置  
                   aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 19));  
                   MarkerOptions markerOptions = new MarkerOptions();  
                   markerOptions.position(new LatLng(lat, lon));  
                   markerOptions.title("当前位置");  
                   markerOptions.visible(true);    
                   BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker));  
                   markerOptions.icon(bitmapDescriptor);  
                   aMap.addMarker(markerOptions);  



               System.out.println("定位信息:"+ amapLocation.getCity()+"  "+amapLocation.getStreet());
   } else {
             //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
       Log.e("AmapError","location Error, ErrCode:"
           + amapLocation.getErrorCode() + ", errInfo:"
           + amapLocation.getErrorInfo());
       }
   }
}
} ;

4.初始化Amap和初始化 markerOptions

 /** 
      * * 初始化AMap对象 
      */  
     private void init() {  
         if (aMap == null) {  
             aMap = mMapView.getMap();  
         }  
   
         setUpMap();  
   
     }  
   
     private void setUpMap() {  
         //初始化定位参数  
         mLocationOption = new AMapLocationClientOption();  
         //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式  
         mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);  
         //设置是否返回地址信息(默认返回地址信息)  
         mLocationOption.setNeedAddress(true);  
         //设置是否只定位一次,默认为false  
         mLocationOption.setOnceLocation(false);  
         //设置是否强制刷新WIFI,默认为强制刷新  
         mLocationOption.setWifiActiveScan(true);  
         //设置是否允许模拟位置,默认为false,不允许模拟位置  
         mLocationOption.setMockEnable(false);  
         //设置定位间隔,单位毫秒,默认为2000ms  
         mLocationOption.setInterval(2000);  
         //给定位客户端对象设置定位参数  
         mLocationClient.setLocationOption(mLocationOption);  
         //启动定位  
         mLocationClient.startLocation();  
     }  

5.在oncreate方法中初始化对象

//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);
init();


6.停止定位 和销毁定位客户端

mLocationClient.stopLocation();//停止定位  

 mLocationClient.onDestroy();//销毁定位客户端。  


7..全部代码

package com.hello.activity;


import java.text.SimpleDateFormat;
import java.util.Date;


import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;




import com.amap.api.maps.model.BitmapDescriptor;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MarkerOptions;
import com.example.hellomap.R;


import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;


public class MainActivity extends Activity{
 
 private AMap aMap;  
 MapView mMapView = null;
 //定义经度
 private double lat; 
 //定义维度
 private double lon; 
 
 
 //声明AMapLocationClient类对象
 public AMapLocationClient mLocationClient = null;
 //声明mLocationOption对象
 public AMapLocationClientOption mLocationOption = null;
 //声明定位回调监听器
 public AMapLocationListener mLocationListener=new AMapLocationListener() {

@Override
public void onLocationChanged(AMapLocation amapLocation) {
// TODO Auto-generated method stub
 if (amapLocation != null) {
       if (amapLocation.getErrorCode() == 0) {
       //定位成功回调信息,设置相关消息
       amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
       amapLocation.getLatitude();//获取纬度
       amapLocation.getLongitude();//获取经度
       amapLocation.getAccuracy();//获取精度信息
       SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       Date date = new Date(amapLocation.getTime());
       df.format(date);//定位时间
       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信息
              
               lat = amapLocation.getLatitude();  
                   lon = amapLocation.getLongitude();  
               // 设置当前地图显示为当前位置  
                   aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 19));  
                   MarkerOptions markerOptions = new MarkerOptions();  
                   markerOptions.position(new LatLng(lat, lon));  
                   markerOptions.title("当前位置");  
                   markerOptions.visible(true);    
                   BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker));  
                   markerOptions.icon(bitmapDescriptor);  
                   aMap.addMarker(markerOptions);  


               System.out.println("定位信息:"+ amapLocation.getCity()+"  "+amapLocation.getStreet());
   } else {
             //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
       Log.e("AmapError","location Error, ErrCode:"
           + amapLocation.getErrorCode() + ", errInfo:"
           + amapLocation.getErrorInfo());
       }
   }
}
} ;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState); 
   setContentView(R.layout.test_activit);
   //获取地图控件引用
   mMapView = (MapView) this.findViewById(R.id.map);
   //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理
   mMapView.onCreate(savedInstanceState);
   //初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);
init();
 }
 @Override
 protected void onDestroy() {
   super.onDestroy();
   //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
   mMapView.onDestroy();
   mLocationClient.onDestroy();//销毁定位客户端。  
 }
@Override
protected void onResume() {
   super.onResume();
   //在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理
   mMapView.onResume();
   }
@Override
protected void onPause() {
   super.onPause();
   //在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理
   mMapView.onPause();
   }
 
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
mLocationClient.stopLocation();//停止定位  
}
 
 
 
@Override
protected void onSaveInstanceState(Bundle outState) {
   super.onSaveInstanceState(outState);
   //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理
   mMapView.onSaveInstanceState(outState);
 } 
 
 
public void initOption(){
    //初始化定位参数
    mLocationOption = new AMapLocationClientOption();
    //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
    mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
    //设置是否返回地址信息(默认返回地址信息)
    mLocationOption.setNeedAddress(true);
    //设置是否只定位一次,默认为false
    mLocationOption.setOnceLocation(false);
    //设置是否强制刷新WIFI,默认为强制刷新
    mLocationOption.setWifiActiveScan(true);
    //设置是否允许模拟位置,默认为false,不允许模拟位置
    mLocationOption.setMockEnable(false);
    //设置定位间隔,单位毫秒,默认为2000ms
    mLocationOption.setInterval(2000);
    //给定位客户端对象设置定位参数
    mLocationClient.setLocationOption(mLocationOption);
    //启动定位
    mLocationClient.startLocation(); 
    }
 
/** 
      * * 初始化AMap对象 
      */  
     private void init() {  
         if (aMap == null) {  
             aMap = mMapView.getMap();  
         }  
   
         setUpMap();  
   
     }  
   
     private void setUpMap() {  
         //初始化定位参数  
         mLocationOption = new AMapLocationClientOption();  
         //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式  
         mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);  
         //设置是否返回地址信息(默认返回地址信息)  
         mLocationOption.setNeedAddress(true);  
         //设置是否只定位一次,默认为false  
         mLocationOption.setOnceLocation(false);  
         //设置是否强制刷新WIFI,默认为强制刷新  
         mLocationOption.setWifiActiveScan(true);  
         //设置是否允许模拟位置,默认为false,不允许模拟位置  
         mLocationOption.setMockEnable(false);  
         //设置定位间隔,单位毫秒,默认为2000ms  
         mLocationOption.setInterval(2000);  
         //给定位客户端对象设置定位参数  
         mLocationClient.setLocationOption(mLocationOption);  
         //启动定位  
         mLocationClient.startLocation();  
     }  
   
}





猜你喜欢

转载自blog.csdn.net/hzs33/article/details/51636192
今日推荐