Android如何集成百度、高德、腾讯地图
来源:互联网 发布:程序员密码 编辑:程序博客网 时间:2024/05/10 11:41
百度
1:首先,到百度地图API网址去注册;百度地图API,获取Appkey的过程。
进入控制台cmd:
定位到.android:
输入命令获取SHA1:
上图所用的是debug.keystore签名文件,一般开发测试过程中则用该文件,密钥库口令是android。如果我们想要使用自己的签名文件,看下图。
2:下载你所需要的开发包,并在AndroidManifest.xml文件中添加必要的代码,如下图:
根据自己需求下载不同的.jar包和.so包
添加到lib下面,我这里以定位包为例:
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,如下图:
2:下载.jar包和.so包,并添加到lib下:
3: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
2:下载.jar包和.so包:
3: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
- Android如何集成百度、高德、腾讯地图
- Android如何集成百度、高德、腾讯地图
- 调用高德地图,百度地图,腾讯地图,苹果地图路线规划(无需集成SDK)
- 集成百度地图、高德地图、腾讯地图sdk,谁优先选
- android打开外部地图导航(百度、高德、腾讯)
- android 跳转百度,高德,腾讯地图以及商店
- Android百度地图、高德地图、腾讯地图导航路线规划问题
- Android百度地图、高德地图、腾讯地图导航路线规划问题
- 腾讯地图,百度地图,高德地图部分比较
- Android集成高德地图
- Android 集成高德地图
- Android集成高德地图
- Android集成高德地图如何自定义marker
- Android仿微信调用第三方地图应用导航(高德、百度、腾讯)
- android自APP打开高德,百度,腾讯地图APP调用
- android app调用第三方地图路线规划导航(百度,高德,腾讯)
- 地图map开放平台总集:百度地图,腾讯地图,高德地图
- 主流地图 坐标系转换,百度、腾讯、高德等
- 用libevent 写高性能的服务器
- iOS block在不同界面的回调传值
- 使用ExecuteReader时报错“阅读器关闭时尝试调用Read无效”的解决办法
- PCI/PCIe 的那些事(2)- 配置空间(Configuration Space)
- 冒泡排序算法详解
- Android如何集成百度、高德、腾讯地图
- HDU 2037 今年暑假不AC(贪心)
- Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)
- IOS开发UI:Quartz2D的使用
- 使用Itext结合Jfreechart图表导出带图表的word文档
- Nandflash中的ECC原理及实现
- DP------Unique Paths
- 2、[置顶] CAS单点登录源码解析之【服务器端】
- UINavigationItem和UItabBarItem的区别详解