您的位置:首页 > 移动开发 > Android开发

在Android系统上定位功能实现方法

2014-12-12 16:34 351 查看
  最近,在开发斗地主游戏时要求实现可以查询附近玩家信息的功能,所以对在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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: