百度地图调用中遇到的坑
使用as学习百度地图调用中,我遇到了keytool 错误:java.lang.Exception: 密钥库文件不存在、getLocType 167错误、getAddress 为null 、定位成功(经纬度获取正确)地图却没有显示正确的地址等问题,下面介绍本人的解决办法。最后附有源码地址
1. keytool 错误:java.lang.Exception: 密钥库文件不存在
使用百度地图官方说明 :keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey (注意目录选择、开发版本、发布版本等问题)
出现了:
keytool 错误:java.lang.Exception: 密钥库文件不存在,显然是当前路劲下没有debug.keystore ,这里是因为此处写的路劲的为相对路劲~/.android/debug.keystore。解决办法有两个,第一,到官方说明指定的目录下执行此命令。第二,使用绝对路劲。
在这里说明一下第二种方式:
a. 首先电脑中找到debug.keystore文件(这里使用到了搜索工具Everything,同学推荐的挺好用,没有的话直接使用windows自带的搜索工具(速度可能会比较慢))
b. 复制路径后,回到Terminal中使用
keytool -list -v -keystore E:\Android\Sdk\AndroidAVD.android/debug.keystore -alias androiddebugkey 即可输入密码(默认密码:android)
2.getLocType:167 错误 获取坐标(4.9E-324)
此错误原因为应用没有定位权限、或者GPS功能(网络定位为没有网络)未打开等等。
解决办法动态申请权限:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE},1);
LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
// 未打开位置开关,可能导致定位失败或定位不准,提示用户或做相应处理
Toast.makeText(this , "未打开位置开关",Toast.LENGTH_LONG).show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1 :
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
Toast.makeText(this,"3没有定位权限",Toast.LENGTH_LONG)
.show();
if (grantResults[0] !=PackageManager.PERMISSION_GRANTED){
Toast.makeText(this,"1没有定位权限",Toast.LENGTH_LONG)
.show();
}
}
}
代码详细结构可参考:github地址
3.getAddress 为 null
原因在mBaiduMap没有设置需要地址信息
// 可选,是否需要地址信息
option.setIsNeedAddress(true);
4.定位成功(经纬度获取正确)地图却没有显示正确的地址等问题
//将地址定向到此地址
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude())));
查看代码结构可参考(交作业):源码地址