遇到的一些烦心的问题:1.虽然看的网上的视频,且一步步写的代码都没错,但就是有错。如:MapView cannot be resolved to a type,
**方法is undefined,BDLocation显示无法导入等等都是包的问题,在学的时候一定要看好!!选好包再导入就没问题啦,旧的的版本地图的SDK和定位的SDK是分开的,要分别导入才可以,包之类的官网都有,也可以从他的Demo之中导入。
2.真机测试的时候,开了Wifi能定位位置,用流量一直定不了位置,再就是白板一片。当时很纠结,各种找各种查,偏偏网上还没有,于是静下心来去百度地图定位SDK官网,一步步看,终于被我发现啦,在官网上百度地图SDK和定位SDK需要的权限是不一样的!!太坑爹啦。。。
比较下:
这是显示百度地图需要的权限:
< uses- permission android: name = "android.permission.GET_ACCOUNTS" />
< uses- permission android: name = "android.permission.USE_CREDENTIALS" />
< uses- permission android: name = "android.permission.MANAGE_ACCOUNTS" />
< uses- permission android: name = "android.permission.AUTHENTICATE_ACCOUNTS" />
< uses- permission android: name = "android.permission.ACCESS_NETWORK_STATE" />
< uses- permission android: name = "android.permission.INTERNET" />
< uses- permission android: name = "com.android.launcher.permission.READ_SETTINGS" />
< uses- permission android: name = "android.permission.CHANGE_WIFI_STATE" />
< uses- permission android: name = "android.permission.ACCESS_WIFI_STATE" />
< uses- permission android: name = "android.permission.READ_PHONE_STATE" />
< uses- permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE" />
< uses- permission android: name = "android.permission.BROADCAST_STICKY" />
< uses- permission android: name = "android.permission.WRITE_SETTINGS" />
< uses- permission android: name = "android.permission.READ_PHONE_STATE" />
这是定位所需要的权限:
<!-- 这个权限用于进行网络定位-->
< uses- permission android: name= "android.permission.ACCESS_COARSE_LOCATION" ></ uses- permission>
<!-- 这个权限用于访问GPS定位-->
< uses- permission android: name= "android.permission.ACCESS_FINE_LOCATION" ></ uses- permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
< uses- permission android: name= "android.permission.ACCESS_WIFI_STATE" ></ uses- permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
< uses- permission android: name= "android.permission.ACCESS_NETWORK_STATE" ></ uses- permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
< uses- permission android: name= "android.permission.CHANGE_WIFI_STATE" ></ uses- permission>
<!-- 用于读取手机当前的状态-->
< uses- permission android: name= "android.permission.READ_PHONE_STATE" ></ uses- permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
< uses- permission android: name= "android.permission.WRITE_EXTERNAL_STORAGE" ></ uses- permission>
<!-- 访问网络,网络定位需要上网-->
< uses- permission android: name= "android.permission.INTERNET" />
<! —SD卡读取权限,用户写入离线定位数据-->
< uses- permission android: name= "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" ></ uses- permission>
<!-- 允许应用读取低级别的系统日志文件 -->
< uses- permission android: name= "android.permission.READ_LOGS" ></ uses- permission>
少了这三个:可以根据自己情况添加。
—SD卡读取权限,用户写入离线定位数据 -->
<uses - permission android : name = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" ></uses - permission >
<!-- 这个权限用于进行网络定位-->
<uses- permission android: name= "android.permission.ACCESS_COARSE_LOCATION" ></uses- permission> <!-- 这个权限用于访问GPS定位--> <uses- permission android: name= "android.permission.ACCESS_FINE_LOCATION" ></uses- permission>
我添加了<uses- permission android: name= "android.permission.ACCESS_COARSE_LOCATION" ></uses- permission> ,就解决了不能显示的问题,刚开始学习还是得慢慢来,不能着急,不然会郁闷死,希望帮到和我一样的初学者。。。。好好研究官方Demo,看上边的常见问题。。
还有就是比较困惑的,android4.0之后是不能在主线程中访问网络的,为什么百度地图可以,下面这些:
初始化LocationClient类
此处需要注意:LocationClient类必须在主线程中声明。需要Context类型的参数。
Context需要时全进程有效的context,推荐用getApplicationConext获取全进程有效的context
public LocationClient mLocationClient = null ; public BDLocationListener myListener = new MyLocationListener( ) ; public void onCreate( ) { mLocationClient = new LocationClient( getApplicationContext( ) ) ; //声明LocationClient类 mLocationClient.registerLocationListener ( myListener ) ; //注册监听函数 }
可能是因为这个: 发起定位,异步获取当前位置。因为是异步的,所以立即返回,不会引起阻塞。定位结果在ReceiveListener的方法OnReceive方法的参数中返回。