最近,在开发斗地主游戏时要求实现可以查询附近玩家信息的功能,所以对在Android系统上如何实现此功能进行了研究。
目前,对于定位主要有三种实现方式:通过网络、基站和GPS来获取到所有玩家的经纬度,然后传送给服务器计算,以此来实现附近的人信息展示功能。
最开始做的时候,使用了Android自带的定位服务:
LocationManager locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
通过代码获取到GPS或者网络信息,一般总是显示为null。在使用GPS定位需要在信号比较好的地方,最好是户外,而且需要定位很长的时间,所以这个方式基本pass掉了。而使用代码的网络定位,由于国内大部分手机是被阉割过的,导致网络定位也总是显示为null。
然后想到了基站定位,这个实现方式比较复杂,而且给出的数据也不够准确,所以也基本pass掉了。
最后查询资料,发现在国内可以使用百度定位,在网上下载sdk包,将jar包放到lib里面。
Android4.0以上版本的必须在百度上申请秘钥,按照网上地址设置便可,http://lbsyun.baidu.com/apiconsole/key。
在Androidmainfest写配置信息:
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="H3bZAgLjN8ViH8YXlZ7BchA6"//在百度申请的秘钥
/>
几个比较重要的内容:
LocationClient locationClient 定位核心类
LocationClientOption option = new LocationClientOption();设置条件:
option.setOpenGps(true); //是否打开GPS
option.setCoorType("bd09ll"); //设置返回值的坐标类型。
option.setPriority(LocationClientOption.NetWorkFirst); //设置定位优先级
option.setProdName("*****"); //设置产品线名称。
option.setScanSpan(UPDATE_TIME);//设置定时定位的时间间隔。单位毫秒
option.setAddrType("all");//有地址信息,默认是没有的
locationClient.setLocOption(option);
注册监听:
locationClient.registerLocationListener(new BDLocationListener()
然后继承里面方法:
public void onReceiveLocation(BDLocation location) {});
location将会得到所有定位的信息。最后别忘了在Androidmainfest.xml里面添加百度定位所有权限。文章来源:http://www.mfqyw.com/