public String mac;    TextView msg;    LocationManager locationManager;    LocationListener locationListener;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        msg = (TextView) findViewById(R.id.text);        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);        // 定义对位置变化的监听函数        locationListener = new LocationListener() {            public void onLocationChanged(Location location) {                msg.setText("onLocationChanged" + location.getLatitude() + ",,"                        + location.getLongitude());                Log.e("onLocationChanged", location.getLatitude() + ",,"                        + location.getLongitude());            }            public void onStatusChanged(String provider, int status,                    Bundle extras) {            }            public void onProviderEnabled(String provider) {            }            public void onProviderDisabled(String provider) {            }        };        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,, locationListener);    }


最近在做定位相关的东西,把知识整理一下并分享出来。

1.定位有三种,网络,基站,GPS

2.不管哪种定位核心是要取得经纬度,你知道了经纬度要换算成具体地理位置的方法是有很多种的

以下分别讲述三种的实现:

◆GPS

比较简单

关于GPS需要注意的地方就是首先你手机定位设置那里要打开GPS,还有manifest.xml中相关的权限要写进去(一搜一大把,不赘述),最后记得在户外测试,室内是测试不到GPS的。

◆基站

这一块你要自己实现也是可以的,不过复杂程度远比你想的要多一些。要获取基站信息可以使用Android自带的API,这很简单如以下代码

private void getCellInfo() throws Exception {        /** 调用API获取基站信息 */        TelephonyManager mTelNet = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);        GsmCellLocation location = (GsmCellLocation) mTelNet.getCellLocation();        if (location == null)            throw new Exception("获取基站信息失败");        String operator = mTelNet.getNetworkOperator();        Log.e("基站信息", operator);        String mcc = operator.substring(0, 3);        String mnc = operator.substring(3,5);        int cid = location.getCid();        int lac = location.getLac();        Log.e("具体基站信息", "mcc=" + mcc + ",mnc=" + mnc + ",lac=" + lac + ",cid="                + cid);    }

但是你要吧基站信息转为经纬度就比较麻烦了,这里当然最权威的是google了,网络上也找过一些其他的免费网站,很显然不靠谱,我相信你搜出过这样的API接口http://www.google.com/loc/json,我很负责任的告诉你,这个接口用不了,现在停用了,如果你研究了半天,一直在想post过去的数据为什么不行,然后发现原来是这个API停用了,那我觉得你现在看到我这篇文章是幸福的,所以还是用google把,下面进入此网站https://developers.google.com/maps/documentation/business/geolocation/这里面就有我们需要的信息,我找了很久,google maps各种相关的API都找过了,这里有我们需要的通过基站信息得到经纬度的API,不过它是基于商业的,测试每天100次上限,发布后应该要用收费的,具体费用没查了。不要觉得这个很容易,我相信你花了半天在测试的时候会发现更多衍生出来的问题。而且需要有英语阅读能力,对于大部分人来说门槛过高了,建议略过。因为基站实际情况下并不太好用,比如手机没SIM卡和平板的情况下,是用不了基站的。

◆网络

最建议大家使用的还是网络定位,因为网络实在太普遍的,移动设备现在基本都能上网,当然我这说的是wifi情况下的。3G的没条件测试过,这里请不要使用android自带的API,如

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

因为国内大部分手机被阉割过了,你运气好的话,也许能获取到数据,如果运气不好,搞了半天你发现是手机系统被阉割后的问题,我想你可能会抓狂的。所以网络定位我们不能依赖Android API了。这里就推荐一下百度定位把,我测试了下,速度蛮好,也还准。地址如下http://developer.baidu.com/map/sdk-android.htm。然后如图所示

看一下里面的simple中的MyLocation类,简单明了,快速解决问题。不过国外没测试过,不知道百度能不能用在国外了。当然google maps中android版SDK应该也有相应的功能,不过有点繁琐了,比如你只定位国内的话,相信百度可以了,如果是国际上,那google永远是你的首选

完结!

更多相关文章

  1. Android实现点击某个按钮指定位置弹出布局
  2. android位置服务GPS经纬度获取
  3. Android获取基站坐标代码
  4. Android(安卓)基于GeolocationAPI的基站定位
  5. Android中通过当前经纬度获得城市
  6. Android调用系统功能获取当前经纬度
  7. Android中获取当前位置信息
  8. Android使用第三方SDK——百度地图
  9. 【代码】android 通过GPS获取用户地理位置并监听位置变化

随机推荐

  1. 分环境配置
  2. SQLite的使用
  3. Android引用ttf图标字体库
  4. Android RSA 与标准Java RSA实现区别
  5. 通读Android文档系列 THREE
  6. Android仿人人客户端
  7. 《Android底层开发技术》学习总结
  8. Android 开源网络框架(Android-Async-Http
  9. Android框架揭秘读书笔记
  10. Android控件显示和隐藏