Android如何集成百度、高德、腾讯地图

来源:互联网 发布:程序员密码 编辑:程序博客网 时间:2024/05/10 11:41

百度
  1:首先,到百度地图API网址去注册;百度地图API,获取Appkey的过程。
  
进入控制台cmd:
进入控制台cmd

定位到.android:
定位到.android

输入命令获取SHA1:
输入命令获取SHA1
上图所用的是debug.keystore签名文件,一般开发测试过程中则用该文件,密钥库口令是android。如果我们想要使用自己的签名文件,看下图。
使用自己的签名文件

2:下载你所需要的开发包,并在AndroidManifest.xml文件中添加必要的代码,如下图:

根据自己需求下载不同的.jar包和.so包
根据自己需求下载不同的.jar包和.so包

添加到lib下面,我这里以定位包为例:
添加到lib下面,这里以定位包为例

AndroidManifest.xml文件:
AndroidManifest.xml文件

3:代码编写,我直接把代码贴上来。

BaseApplication 中进行初始化,这个一定要添加,非常重要,否则地图出不来。

public class BaseApplication extends Application{    @Override    public void onCreate() {        super.onCreate();        SDKInitializer.initialize(getApplicationContext());    }    @Override    public void onTerminate() {        super.onTerminate();    }}

定位类:

import android.os.Bundle;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;import com.baidu.mapapi.model.LatLng;import com.function.BaseActivity;import com.function.R;public class BaiduLocationActivity extends BaseActivity{    private MapView mapView;    private BaiduMap baiduMap;    private BaiduLocationListener mListener = new BaiduLocationListener();    private LocationClient locClient;    private LocationClientOption locClientOpt;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.baidu_location_activity);        mapView = (MapView)findViewById(R.id.baidu_map);        init();    }    private void init(){        baiduMap = mapView.getMap();        baiduMap.setMyLocationEnabled(true);        MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(16.0f);        baiduMap.setMapStatus(msu);        BitmapDescriptor bitmapDesc = BitmapDescriptorFactory.fromResource(R.drawable.location_marker);        baiduMap.setMyLocationConfigeration(new MyLocationConfiguration(LocationMode.NORMAL, true, bitmapDesc));        locClient = new LocationClient(this);        locClient.registerLocationListener(mListener);        locClientOpt = new LocationClientOption();        locClientOpt.setOpenGps(true);// 打开gps        locClientOpt.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;        locClientOpt.setScanSpan(1000);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的//      locClientOpt.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要//      locClientOpt.setNeedDeviceDirect(false);//可选,设置是否需要设备方向结果//      locClientOpt.setLocationNotify(false);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果//      locClientOpt.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死   //      locClientOpt.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集        locClient.setLocOption(locClientOpt);        locClient.start();    }    @Override    protected void onResume() {        mapView.onResume();        super.onResume();    }    @Override    protected void onPause() {        mapView.onPause();        super.onPause();    }    @Override    protected void onDestroy() {        mapView = null;        super.onDestroy();    }    private class BaiduLocationListener implements BDLocationListener{        @Override        public void onReceiveLocation(BDLocation location) {            // map view 销毁后不在处理新接收的位置            if (location == null || mapView == null){                return;            }            MyLocationData locData = new MyLocationData.Builder()                  .accuracy(location.getRadius())                  .direction(100).latitude(location.getLatitude())                  .longitude(location.getLongitude()).build();            baiduMap.setMyLocationData(locData);            LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());            MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);            baiduMap.animateMapStatus(u);        }    }}

运行结果:
运行结果

高德
1:同样是到高德的地图API进行注册、获取AppKey,高德地图API
获取key的方法是一样的,高德这里可以同时使用debug和发布情况下的两个SHA1,如下图:
申请高德key

2:下载.jar包和.so包,并添加到lib下:
高德的jar包和so包

3:AndroidManifest.xml文件:
AndroidManifest.xml文件

4:代码编写:

import android.graphics.Color;import android.os.Bundle;import android.view.Window;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.maps2d.AMap;import com.amap.api.maps2d.CameraUpdateFactory;import com.amap.api.maps2d.LocationSource;import com.amap.api.maps2d.MapView;import com.amap.api.maps2d.model.BitmapDescriptorFactory;import com.amap.api.maps2d.model.MyLocationStyle;import com.function.BaseActivity;import com.function.R;import com.function.utils.Log4Lsy;public class AmapLocationActivity extends BaseActivity implements AMapLocationListener,LocationSource{    private AMap aMap;    private MapView mapView;    private OnLocationChangedListener mListener;    private AMapLocationClient mlocationClient;    private AMapLocationClientOption mLocationOption;    @Override    protected void onCreate(Bundle savedInstanceState) {        requestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        setContentView(R.layout.amap_location_activity);        mapView = (MapView) findViewById(R.id.amap_map);        mapView.onCreate(savedInstanceState);// 此方法必须重写        init();    }    private void init(){        if (aMap == null) {            aMap = mapView.getMap();            setMapProperty();        }    }    private void setMapProperty(){        // 自定义系统定位小蓝点        MyLocationStyle myLocationStyle = new MyLocationStyle();        myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker));// 设置小蓝点的图标        myLocationStyle.strokeColor(Color.BLACK);// 设置圆形的边框颜色        myLocationStyle.radiusFillColor(Color.argb(100, 0, 0, 180));// 设置圆形的填充颜色        myLocationStyle.strokeWidth(1.0f);// 设置圆形的边框粗细        aMap.setMyLocationStyle(myLocationStyle);        aMap.setLocationSource(this);// 设置定位监听        aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示        aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false        aMap.moveCamera(CameraUpdateFactory.zoomTo(13));//设置地图缩放级别    }    @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();    }    /**     * 定位成功后回调函数     */    @Override    public void onLocationChanged(AMapLocation amapLocation) {        if (mListener != null && amapLocation != null) {            if (amapLocation != null&&amapLocation.getErrorCode() == 0) {                mListener.onLocationChanged(amapLocation);// 显示系统小蓝点            } else {                String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo();                Log4Lsy.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();        }    }    /**     * 停止定位     */    @Override    public void deactivate() {        mListener = null;        if (mlocationClient != null) {            mlocationClient.stopLocation();            mlocationClient.onDestroy();        }        mlocationClient = null;    }}

运行结果:
运行结果

腾讯
1:同样是到地图API网址去注册并获取AppKey的过程,跟上面都一样,腾讯地图API
腾讯SDK

2:下载.jar包和.so包:
腾讯的jar包和so包

3:AndroidManifest.xml文件:
AndroidManifest.xml文件

4:代码编写:

import android.graphics.Color;import android.location.Location;import android.os.Bundle;import android.view.Window;import com.function.BaseActivity;import com.function.R;import com.tencent.map.geolocation.TencentLocation;import com.tencent.map.geolocation.TencentLocationListener;import com.tencent.map.geolocation.TencentLocationManager;import com.tencent.map.geolocation.TencentLocationRequest;import com.tencent.tencentmap.mapsdk.maps.LocationSource;import com.tencent.tencentmap.mapsdk.maps.MapView;import com.tencent.tencentmap.mapsdk.maps.TencentMap;import com.tencent.tencentmap.mapsdk.maps.model.CircleOptions;public class TencentLocationActivity extends BaseActivity implements LocationSource,TencentLocationListener{    private TencentLocationRequest locationRequest;    private TencentLocationManager locationManager;    private MapView mapView;    private TencentMap tencentMap;    private OnLocationChangedListener mChangedListener;    @Override    protected void onCreate(Bundle savedInstanceState) {        requestWindowFeature(Window.FEATURE_NO_TITLE);        super.onCreate(savedInstanceState);        setContentView(R.layout.tencent_location_activity);        mapView = (MapView)findViewById(R.id.tencent_map);        init();    }    private void init(){        tencentMap = mapView.getMap();        CircleOptions circleOption = new CircleOptions();        circleOption.strokeColor(Color.BLACK);        circleOption.strokeWidth(1.0f);        circleOption.fillColor(Color.argb(100, 0, 0, 180));        circleOption.radius(5);        tencentMap.addCircle(circleOption);        locationRequest = TencentLocationRequest.create();        locationRequest.setInterval(1000);        locationRequest.setRequestLevel(TencentLocationRequest.REQUEST_LEVEL_NAME);        locationRequest.setAllowCache(true);        locationManager = TencentLocationManager.getInstance(this);        tencentMap.setLocationSource(this);        tencentMap.setMyLocationEnabled(true);    }    @Override    protected void onResume() {        super.onResume();        locationManager.requestLocationUpdates(locationRequest, this);        mapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        locationManager.removeUpdates(this);        mapView.onPause();    }    @Override    protected void onDestroy() {        super.onDestroy();        mapView = null;        locationManager = null;    }    @Override    public void activate(OnLocationChangedListener arg0) {        mChangedListener = arg0;        int err = locationManager.requestLocationUpdates(locationRequest, this);        switch (err){        case 1:            setTitle("设备缺少使用腾讯定位服务需要的基本条件");            break;        case 2:            setTitle("manifest 中配置的 key 不正确");            break;        case 3:            setTitle("自动加载libtencentloc.so失败");            break;        }    }    @Override    public void deactivate() {        //结束定位        locationManager.removeUpdates(this);        mChangedListener = null;        locationRequest = null;        locationManager = null;    }    @Override    public void onLocationChanged(TencentLocation arg0, int arg1, String arg2) {        if (arg1 == TencentLocation.ERROR_OK && mChangedListener != null) {            Location location = new Location(arg0.getProvider());            location.setLatitude(arg0.getLatitude());            location.setLongitude(arg0.getLongitude());            location.setAccuracy(arg0.getAccuracy());            mChangedListener.onLocationChanged(location);         }    }    @Override    public void onStatusUpdate(String arg0, int arg1, String arg2) {    }}

三种地图的使用方法大致相同,多仔细认真看一下参考手册和官方提供的Demo,就应该很容易开发出你想要的功能了。

0 0
原创粉丝点击