如何在GPS和网络提供商之间切换

时间:2011-07-31 05:05:25

标签: android gps

我想问一下gps提供商的标准

看看我的代码:

private void initLocationManager() {

        locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        String bestProvider; 

        locListener = new LocationListener() {

            @Override
            public void onLocationChanged(Location newLocation) {
                tampilkanPosisikeMap(newLocation);
            }

            public void onProviderDisabled(String arg0) {
                Functions.MakeToast(getApplicationContext(), "GPS tidak tersedia");
            }

            public void onProviderEnabled(String arg0) {
                Functions.MakeToast(getApplicationContext(), "GPS tersedia");
            }

            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
            }

        };

// look here
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        bestProvider = locManager.getBestProvider(criteria, true);
        locManager.getLastKnownLocation(bestProvider);

        locManager.requestLocationUpdates(bestProvider, 5000, 1, locListener);  

    }

查看标准部分,

它是这样的吗?

如果不符合获取GPS_PROVIDER的标准, 然后它将选择NETWORK_PROVIDER作为提供者

是正确还是错?

感谢 抱歉我的英语不好:(

2 个答案:

答案 0 :(得分:0)

确实应该那样工作。似乎是正确的。

我已经经历过,如果没有已知的最后已知位置,则可能认为“getLastKnonwLocation()”将返回null。但是,既然你不是以任何价值存储它 - 为什么不从你的代码中删除它?你不需要它......

答案 1 :(得分:0)

我只是删除了这一行

criteria.setAccuracy(Criteria.ACCURACY_FINE);

所以它会从任何准确度中获得价值(来自网络和gps提供商) 当我测试它时,它总是从network_provider获得值

也许如果设备锁定了gps卫星位置,它将从gps_provider获取值