zoukankan      html  css  js  c++  java
  • 获取android手机的定位信息(转)

     

      通过Android手机上的定位信息来源可分为三种,GPS,Cell-ID,和Wifi. 后两种因为都按来自于网络,所以在Android SDK中统一为基于网络的定位。目前三种定位方式都不够完善,各有优缺点。

    基于GPS信号的定位在三者中精度较高,但是缺点是当前民用的GPS信号在建筑物内的信号比较差,而且GPS模块启动的时间也比较慢,它的工作原理其实是搜索附近的4颗卫星,根据当前位置到这四颗卫星的距离来定位,GPS模块找到四颗卫星(也称之为GPS的启动过程)根据信号强度和地域的不同有可能需要几分钟的时间;基于基站和Wifi的定位在Android API中被统一称为网络定位,开发者无法将两者区分开来,他们的特点是速度快,但是精度不如GPS高。我们也常常听说到AGPS定位算法,是结合了两种算法的优点,首先根据网络的快速定位来获得一个大致位置,然后根据这个位置去帮助GPS模块快速地搜索到附近的卫星。这是目前通过的效果较好的手机定位方式。下面仅仅介绍如何进行基本的GPS定位和网络定位。

      在开始定位之前首先要获得LocationManager,然后根据可以根据一定的规则去选择一个定位方法,代码如下,

    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

      选择定位算法的规则:

      Criteria criteria = new Criteria();
      criteria.setAccuracy(Criteria.ACCURACY_FINE);               //设置为最大精度
      criteria.setAltitudeRequired(false);                                     //不要求海拔信息criteria.setCostAllowed(true);                                             //是否允许付费
      criteria.setPowerRequirement(Criteria.POWER_LOW);     //对电量的要求
      criteria.setBearingRequired(false);                                    //不要求Bearing信息

    关于Bearing的解释,请查看Bearing释疑
     

    //根据上述法则选择一个定位方法

    bestProvider = locationManager.getBestProvider(criteria, false);

    //通常我们为了提高用户体验,我们先把上次定位的结果缓存下来,

    //在启动先打开上次定位结果,称为last known location

    Location location = locationManager.getLastKnownLocation(bestProvider);

    //接下来我们在Activity的显示界面的函数OnResume中启动定位的位置更新

    locationManager.requestLocationUpdates(bestProvider, 2000, 1, this);

    //并且在OnPause函数中关闭

    locationManager.removeUpdates(this);

    // 让当前Activity实现LocationListener端口,在onLocationChanged函数获得定位信息

    public void onLocationChanged(Location location) {

            Log.d(TAG, "Latitude :" + location.getLatitude());

            Log.d(TAG, "Longitude :" + location.getLongitude());

    }

    //最近记得在AndroidMenifest.xml文件中赋于定位的权限

        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


  • 相关阅读:
    【BZOJ1093】【ZJOI2007】最大半联通子图 [DP][Tarjan]
    【BZOJ1926】【SDOI2010】粟粟的书架 [主席树]
    【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]
    【BZOJ2815】【ZJOI2012】灾难 [LCA]
    【BZOJ3453】XLkxc [拉格朗日插值法]
    【BZOJ2850】巧克力王国 [KD-tree]
    《类和对象》
    @RequestMapping映射请求
    010-Python-socket编程
    SSH-Struts第二弹:一个Form提交两个Action
  • 原文地址:https://www.cnblogs.com/slider/p/2396279.html
Copyright © 2011-2022 走看看