快速查找
- 1. 关于 WalkNavigateHelper 或者 BickNavigateHelper不存在的问题
- 2.关于 WalkNaviLaunchParam().stPt(startPt).endPt(endPt);的弃用问题
- 3.关于在Baidu.Map上显示其他按钮的问题
- 4.关于百度地图自定义陀螺仪的使用
- 5.关于创建步行导航时View空指针的问题:
- 6.Mask靠近自己的位置时点击、拖拽移动无效
- 7.百度AR步行导航、室内导航无法开启问题
- 8.百度地图逆地理编码GET请求错误(200)的问题(目前只有间接的办法)
- 9.InfoWindow 的显示错误问题
- 10.解决百度地图在真机上用不了导航,模拟机可以的问题。
- 11.页面跳转到指定点
前言:说实话,自己独立开发的话还是有难度的,很多服务上线需要付费。
1. 关于 WalkNavigateHelper 或者 BickNavigateHelper不存在的问题
原因:没有添加关于步行和骑行依赖。
如果刚开始做,就按照百度指引来,先下载定位+基础+其他。
这里只说添加步行的so+jar包引起的问题。
assets目录下的jpg放到相应的工程目录。(下面截图有)
(这步很关键)重新导入.jar的文件(最好改个名字导进去,避免和之前的重复)
最后添加依赖
implementation files('src\\main\\jniLibs\\BaiduLBS_Android.jar')
//这里是自己copy path 下的路径
-------------------------------------完成-----------------------------------
2.关于 WalkNaviLaunchParam().stPt(startPt).endPt(endPt);的弃用问题
更改后的方法
param = new WalkNaviLaunchParam().endNodeInfo(end).startNodeInfo(start);
参数设定(start与end创建一样,都需要一个WalkRouteNodeInfo实体)
这里用setLocation方法传入LatLng对象即可。
这里的latitude, longitude的值作为演示
WalkRouteNodeInfo end = new WalkRouteNodeInfo();
Double latitude = Double.valueOf(readInfoBySharedPreference("latitude"));
Double longitude = Double.valueOf(readInfoBySharedPreference("longitude"));
end.setLocation(new LatLng(park_latitude, park_longitude));
最后param的设定一样。
WalkNavigateHelper.getInstance().routePlanWithRouteNode(param, new IWRoutePlanListener() {
-----------------------------------完成------------------------------------------------
3.关于在Baidu.Map上显示其他按钮的问题
将百度地图容器放在RelativeLayout下最前面,然后再添加自己的按钮。切记地图一定得放在最前面。
-----------------------------------完成------------------------------------------------
4.关于百度地图自定义陀螺仪的使用
详细 请看:
1.记得在Activity create 方法初始化
start中调用监听器start方法
2.BDlistener中的direction 的参数定义为全局变量
//地图监听器
private class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
MyLocationData locData = new MyLocationData.Builder()
.accuracy(bdLocation.getRadius())
.direction(mXDirection) //这个参数
.latitude(bdLocation.getLatitude())
.longitude(bdLocation.getLongitude())
.build();
mCurrentAccuracy = bdLocation.getRadius();
mRadius = bdLocation.getRadius();
mCurrentLatitude = bdLocation.getLatitude();
mCurrentLongitude = bdLocation.getLongitude();
}
3.在方向监听中赋值变量
private void initOritationListener() {
myOrientationListener = new MyOrientationListener(
getApplicationContext());
myOrientationListener
.setOnOrientationListener(new MyOrientationListener.OnOrientationListener() {
@Override
public void onOrientationChanged(float x) {
mXDirection = (int) x;
// 构造定位数据
MyLocationData locData = new MyLocationData.Builder()
.accuracy(mCurrentAccuracy)
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(mXDirection)
.latitude(mCurrentLatitude)
.longitude(mCurrentLongitude).build();
// 设置定位数据
mBaiduMap.setMyLocationData(locData);
// 设置自定义图标
setConfiguration();
}
});
}
private void setConfiguration() {
configuration = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL,
true, null);
isFreeMode = false;
mBaiduMap.setMyLocationConfiguration(configuration);
}
4.Activity 的stop方法调用
myOrientationListener.stop();
--------------------------------------完成---------------------------------------------
5.关于创建步行导航时View空指针的问题:
mNaviHelper = WalkNavigateHelper.getInstance();
View view = mNaviHelper.onCreate(WNaviGuideActivity.this);
!!终于解决了。办法:更改sdk版本目前(2021.3.21)在26-18都是可以的。
在找问题的时候,发现模拟机上能开启步行导航,而真机上运行会报如下错误:
空指针异常???
然后在询问一个有项目经历的师兄,回答是一般是版本错误。
Android Q(10.0) 版本并不兼容百度SDK 。
看了百度更新日志上:
目前只适配到7.2.0
所以在build.gradle(Module)更改开发版本SDK版本为26-28即可:
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
defaultConfig {
applicationId "com.example.a3_13"
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
-----------------------------------------完成------------------------------------------
6.Mask靠近自己的位置时点击、拖拽移动无效
这是百度底层的问题,只能在缩放级别小的时候才可以点击、拖拽。
刚开始设定放大级别<=18时点击事件会触发。
//设置定位缩放级别
MapStatus.Builder builder = new MapStatus.Builder();
builder.zoom(18.0f);
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
寻找问题:起初我觉得可能是marker的问题,然后我把自定义的marker改成百度地图自带的,仍然没有解决问题,于是就把这个问题搁置了,现在问题解决了。
如上图,18级以上的视角处于定位图层,蓝圈的覆盖marker的点击事件。
博主写工单给百度地图内部人员后,得到一下的回复:
mBaiduMap.setLayerClickable(MapLayer.MAP_LAYER_LOCATION, false);
特别注意的是!将此代码插入到添加定位点之后,否则会NPE。
//设置定位的参数
mLocationClientOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
//设置地图经纬度的方式(一共有三种类型)
mLocationClientOption.setCoorType("bd09ll");
mLocationClientOption.setScanSpan(1000);
mLocationClientOption.setOpenGps(true);
mLocationClientOption.setLocationNotify(true);
mLocationClientOption.setIgnoreKillProcess(false);
mLocationClientOption.setWifiCacheTimeOut(5 * 60 * 1000);
//设置自动偏移
mLocationClientOption.setNeedDeviceDirect(true);
//设置获取详细信息
mLocationClientOption.setIsNeedLocationDescribe(true);
mLocationClient.setLocOption(mLocationClientOption);
//在这
mBaiduMap.setLayerClickable(MapLayer.MAP_LAYER_LOCATION, false);
然后推荐大家使用拖拽地图的方法放置marker(类似于嘀嘀打车中的方式),百度的demo如下:
http://lbsyun.baidu.com/index.php?title=%E5%9C%B0%E5%9B%BE%E9%80%89%E7%82%B9
-----------------------------------------完成------------------------------------------
7.百度AR步行导航、室内导航无法开启问题
搞了好久这个问题,今天算是知道为什么了。
看看百度的工单回复吧:
看到了吧,百度不会让你太舒服的用它的sdk的!但是它在damo里又不说明这个是付费商品…唉
\
8.百度地图逆地理编码GET请求错误(200)的问题(目前只有间接的办法)
目前还没找到合适的方法直接解决问题,如果小伙伴们有解决办法,欢迎留言!!!
百度给出的答复是自己的应用在发布时包名更改,导致ak只能匹配之前的应用的关系,但是我的app没有更改包报名。
现在的办法是直接调用百度封装好的内部类来解决
方法1:
Geocoder geocoder = new Geocoder(getApplicationContext());
try {
List<Address> fromLocation = geocoder.getFromLocation(latitude, longitude, 30);
Log.d(TAG, "getLocationInfo: ----latitude"+latitude+"------longitude-----"+longitude);
Log.d(TAG, "onReceiveLocation: ---------------->"+fromLocation);
} catch (IOException e) {
e.printStackTrace();
}
用过可能发现,这个地址传进去之后,内部会经行处理,所以只能接近我们想要的地方的信息但是不能完全契合。
方法2:
这个就特别精准了,不过得勾选 检索的jar包
至于之前没有勾选的,只能去重下所有jar包,然后重新配置了(重新配置有问题的去看我的第一条吧),应为单独的检索包内会出现和之前包重复的a类,编译时会报错。或者你会去重就不用这一步了!
我们用到的时GeoCoder类
GeoCoder geoCoder = GeoCoder.newInstance();
然后使用反编译器
geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
//这个回调则可以获得一些国家、地区、街道等信息
}
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
sematicDescription = reverseGeoCodeResult.getSematicDescription();
//这里就是我们需要的详细地点信息,超详细。
//当然,你也可以获取周边商场、简单的地理信息、所在的地理位置
}
});
ReverseGeoCodeOption geoOption = new ReverseGeoCodeOption();
geoOption.location(new LatLng(getParkingLatitudeFromSp(),getParkingLongitudeFromSp()));
boolean b = geoCoder.reverseGeoCode(geoOption);
文档:具体想要的,你可以点这看文档,全中文很方便。
快去试试看吧!!
-------------------------------------------完成----------------------------------------
9.InfoWindow 的显示错误问题
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
......>
............
</LinierLayout>
将所有容器改写成包裹内容即可
---------------------------------------------完成--------------------------------------
10.解决百度地图在真机上用不了导航,模拟机可以的问题。
大部分原因是你在控制台的SHA1值错了
开发版:
1。打开控制命令符窗口
2.输入 cd .android (默认在这个文件夹下,你要是改了就根据自己的包名来)
3.输入 keytool -list -v -keystore debug.keystore 回车
4.密码一般是:android
5.找到SHA1 粘贴到百度控制台的开发版
发布版
先创建新的APK
1.Android Studio 的 Terminal
2.cd到你的目录下 打开刚刚新建的文件 输入keytool -list -v -keystore
例子: cd L:\APK keytool -list -v -keystore damo.jks
3.找出你的SHA1 粘贴到百度控制台的发布版
---------------------------------------------完成--------------------------------------
11.页面跳转到指定点
(1)跳转到任意点
//position是你想要地图跳转到的位置
//param position LatLng
MapStatusUpdate update = MapStatusUpdateFactory
.newLatLng(position);
mBaiduMap.setMapStatus(update);
(2)打开地图页面后跳转到“我的位置”
private class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
//第一次定位,提示位置
if (isFirstLocate == true) {
String locationDescribe = bdLocation.getLocationDescribe();
makeToast("您在:" + locationDescribe);
LatLng ll = new LatLng(bdLocation.getLatitude(),
bdLocation.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(u);
isFirstLocate = false;
}
}
}
---------------------------------------------完成--------------------------------------