当前位置: 代码迷 >> Android >> android GPS 获取定位坐标信息解决方法
  详细解决方案

android GPS 获取定位坐标信息解决方法

热度:468   发布时间:2016-04-28 02:21:24.0
android GPS 获取定位坐标信息

如题:
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
criteria.setAltitudeRequired(false);//不要求海拔
criteria.setBearingRequired(false);//不要求方位
criteria.setCostAllowed(true);//允许有花费
criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗

String provider=LocationManager.GPS_PROVIDER;
Location location = loctionManager.getLastKnownLocation(provider);

updateWithNewLocation(location);
loctionManager.requestLocationUpdates(provider, 2000, 10, locationListener);

网上搜索了千篇一律都是这种答案   但是各种尝试  各种杯具   loctionManager.getLastKnownLocation(provider); 返回为 null

需要移动网络支持的(百度、谷歌、高德)    只要单纯GPS 获取坐标经纬度   有实现盆友希望提示下 或提供个demo   


------解决思路----------------------
你首先要确保gps已经定位到啊,没定位到返回肯定是null的
------解决思路----------------------
添加定位权限了吗
------解决思路----------------------
引用:
Quote: 引用:

你首先要确保gps已经定位到啊,没定位到返回肯定是null的


首先  我用的是三星I9300  这款手机我跟三星开发工程师确认过了 具有GPS定位功能   、
然后  loctionManager.addGpsStatusListener(listener);  

 GpsStatus.Listener listener = new GpsStatus.Listener() {  
        public void onGpsStatusChanged(int event) {  
            switch (event) {  
            // 第一次定位  
            case GpsStatus.GPS_EVENT_FIRST_FIX:  
                Log.i(TAG, "第一次定位");  
                break;  
            // 卫星状态改变  
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:  
                Log.i(TAG, "卫星状态改变");  
                // 获取当前状态  
                GpsStatus gpsStatus = lm.getGpsStatus(null);  
                // 获取卫星颗数的默认最大值  
                int maxSatellites = gpsStatus.getMaxSatellites();  
                // 创建一个迭代器保存所有卫星  
                Iterator<GpsSatellite> iters = gpsStatus.getSatellites()  
                        .iterator();  
                int count = 0;  
                while (iters.hasNext() && count <= maxSatellites) {  
                    GpsSatellite s = iters.next();  
                    count++;  
                }  
                System.out.println("搜索到:" + count + "颗卫星");  
                //Toast.makeText(MainActivity.this, "搜索到:" + count + "颗卫星", Toast.LENGTH_SHORT).show();
                break;  
            // 定位启动  
            case GpsStatus.GPS_EVENT_STARTED:  
                Log.i(TAG, "定位启动");  
                break;  
            // 定位结束  
            case GpsStatus.GPS_EVENT_STOPPED:  
                Log.i(TAG, "定位结束");  
                break;  
            }  
        };  
    };  

这个可以打印出 搜索到的卫星数量  0,1,2,3 不等 

请问下    怎么样确保gps已经定位了 ?  


有卫星数量,但这些不一定可用,你先用gps test测试下,还有,室外的定位效果会好点,室内gps不一定好
------解决思路----------------------
除了室外,无法定位,就是没有gps了。

你先不要updateWithNewLocation(location);
getLastKnownLocation(provider)的定位信息不一定是有的。
直接加监听,缩短延迟看看。
------解决思路----------------------


引用:
Quote: 引用:

除了室外,无法定位,就是没有gps了。

你先不要updateWithNewLocation(location);
getLastKnownLocation(provider)的定位信息不一定是有的。
直接加监听,缩短延迟看看。


我是放在一个线程里   每隔3s循环一次    一直取值    既然用的GPS定位肯定不是为了获取1个坐标信息   而是获取运动轨迹 上传到服务器    重头到尾 都没有获取到过

这个看了别人的描述
http://www.miui.com/article-8-1.html


这个我没看,但是,loctionManager.requestLocationUpdates(provider, 2000, 10, locationListener);这个设置本身就是隔一段时间就更新当前定位,它已经有这个功能了。为什么又开线程去访问?还有就是,开了线程,你确定3s内就可以定位到当前位置?
------解决思路----------------------
还是不要用默认的定位,因为有的手机是改过的,定不到位,用百度、高德什么的SDK。
可以选择使用什么方式定位的。
------解决思路----------------------
这个跟设备、环境有关
你把手机拿到室外,用GPS TEST工具先定到位之后,再运行你APP试试
------解决思路----------------------
之前我用I9000做开发,死人定位不到,最后找个299的山塞平板,好用得很
------解决思路----------------------
这个例子我用了,可以获取到,可能是楼主device的问题
  相关解决方案