首页 > 系统 > Android > 正文

android百度地图开发总结

2019-11-07 23:47:53
字体:
来源:转载
供稿:网友

这周因为公司要求,需要开发百度地图模块。然后我通过一周的研究,终于把项目完成了。其实百度地图很简单,只要按照官方API一步一步操作就好了。因为我们公司需要实现其他的一些功能,所以拖了一周才完成。

废话不多说,直接说我遇到的百度地图常见的坑。

首先我说一下,在网上只要搜百度地图,就有很多百度地图的小demo,但是说实话有很多都是现在运行会报错的。主要原因还是在于百度地图更新就不兼容原来的版本了,所以很多几年前网上的小demo,现在即使是复制到自己的项目中,也是不正确的。

好了,我们直接说项目。首先是注册百度地图开发者账号,然后申请key,这点大家应该都知道的,也没有什么技术含量。我要说的在Manifest文件中配置百度地图的key。

<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="VgLKadEMgBQX0VHotcWFKtWADaUeH2Pi" />

我在网上看到一些demo中,说name中的Key的名字可以随便写,但是我遇到的确实name必须是com.baidu.lbsapi.API_KEY,否则他的Key值就无法通过验证。

配置完地图,我们就直接按照API一步一步的照做就好了,将sdk下载下来,移到自己的项目中,配置一下.so库,然后直接用就可以了。

这样地图就显示出来了,然后我们要做的是获取自己当前的位置,这个也没有什么难度,API说的很详细。当显示到自己位置上的时候,我们发现没有自己的标注显示在地图上。这时候我们可以自定义标注显示在上面。但是自定义标注也有不足,那就是我们在移动的时候,需要在下个位置显示的时候,就必须手动把上一个自己的位置remove掉,很麻烦。所以我们可以用百度地图定义好的位置图标。

// 显示个人位置图标 MyLocationData.Builder builder = new MyLocationData.Builder(); builder.latitude(location.getLatitude()); builder.longitude(location.getLongitude()); MyLocationData data = builder.build(); baiduMap.setMyLocationData(data);

这样就直接显示百度地图自己的那个图标了,也不用自己在remove掉上一个位置上的了。

但是要注意,想要实现定位,还需要注册一个服务。

<service android:name="com.baidu.location.f" android:enabled="true" android:PRocess=":remote" >

位置信息很好获取,然后就是方向信息了。这里我们就需要通过手机的方向感应器来获取具体的方位了。自定义类实现SensorEventListener 接口,通过这个接口我们就可以获取这些信息,当然,这个需要权限的。

public class MyOrientationListener implements SensorEventListener { private Context context; private SensorManager sensorManager; private Sensor sensor; private float lastX ; private OnOrientationListener onOrientationListener ; public MyOrientationListener(Context context) { this.context = context; } // 开始 public void start() { // 获得传感器管理器 sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); if (sensorManager != null) { // 获得方向传感器 sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); } // 注册 if (sensor != null) {//SensorManager.SENSOR_DELAY_UI sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI); } } // 停止检测 public void stop() { sensorManager.unregisterListener(this); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { // 接受方向感应器的类型 if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { // 这里我们可以得到数据,然后根据需要来处理 float x = event.values[SensorManager.DATA_X]; if( Math.abs(x- lastX) > 1.0 ) { onOrientationListener.onOrientationChanged(x); } lastX = x ; } } public void setOnOrientationListener(OnOrientationListener onOrientationListener) { this.onOrientationListener = onOrientationListener ; } public interface OnOrientationListener { void onOrientationChanged(float x); }} private void initOritationListener() {myOrientationListener = new MyOrientationListener(getapplicationContext());myOrientationListener.setOnOrientationListener(new MyOrientationListener.OnOrientationListener() { @Override public void onOrientationChanged(float x){ mXDirection = (int) x;//设置方向 // 构造定位数据 locData = new MyLocationData.Builder() .accuracy(mCurrentAccracy) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(mXDirection) .latitude(mCurrentLantitude) .longitude(mCurrentLongitude).build(); // 设置定位数据 baiduMap.setMyLocationData(locData); //设置自己的位置和方向的显示 MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, null); baiduMap.setMyLocationConfigeration(config); } }); }

这时我们已经获取到了定位信息了,但是我们还是无法将方向的信息显示到界面上。为什么呢?因为我们自己的位置上面显示的只是自己的一个位置点。无法显示方向的变化。这时候怎么办呢?我们只需要在myOrientationListener.setOnOrientationListener里面加两行代码就OK了。

//设置自己的位置和方向的显示 MyLocationConfiguration config = new MyLocationConfiguration( mCurrentMode, true, null); baiduMap.setMyLocationConfigeration(config);

我们在MyLocationConfiguration的第三个参数添加的是null,意思是使用默认的显示图标,我们也可以自己定义一个标志显示。只需要改变第三个参数,并且把显示个人位置的图标隐藏就好。这样就完成了,一个基本地图的显示了。 Sunanang


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表