android中的位置

android中的位置,android,geolocation,gps,location,android-location,Android,Geolocation,Gps,Location,Android Location,我用GPS测量旅行距离。问题是GPS有时很长一段时间不更新位置变化 有什么解决办法吗 locationListen = new LocationListener() { public void onLocationChanged(Location currentLocation) { if (prevLocation != null){ test = currentLocation.distanceTo(prevL

我用GPS测量旅行距离。问题是GPS有时很长一段时间不更新位置变化

有什么解决办法吗

    locationListen = new LocationListener() {

        public void onLocationChanged(Location currentLocation) {
            if (prevLocation != null){
                test = currentLocation.distanceTo(prevLocation);
                distance+=test;
            }
            prevLocation = currentLocation;

        }

        public void onStatusChanged(String provider, int status, Bundle b) {
            switch (status) {
            case LocationProvider.OUT_OF_SERVICE:
                Toast.makeText(MainActivity.this,
                        "Status Changed: Out of Service " + provider,
                        Toast.LENGTH_SHORT).show();
                break;
            case LocationProvider.TEMPORARILY_UNAVAILABLE:
                Toast.makeText(
                        MainActivity.this,
                        "Status Changed: Temporarily Unavailable "
                                + provider, Toast.LENGTH_SHORT).show();
                break;
            case LocationProvider.AVAILABLE:
                Toast.makeText(MainActivity.this,
                        "Status Changed: Available " + provider,
                        Toast.LENGTH_SHORT).show();
                break;
            }
        }

        public void onProviderDisabled(String s) {
        }

        public void onProviderEnabled(String s) {
        }
    };

    startOperation.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View but) {
            if (startOperation.getText().equals("Start Calculating Fare")) {
                mHandler.post(run);
                myManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER, 1000, 10,
                                locationListen);
                startOperation.setText("Stop the calculations");
            } else {
                mHandler.removeCallbacks(run);
                myManager.removeUpdates(locationListen);
                finalInfos();
            }
        }
    });

我的位置侦听器代码。它只是使用GPS进行更新。正如我所说的,GPS有时太长,无法检测位置

您在代码中明确请求仅限GPS的位置提供程序。这迫使Android只能依靠GPS,但有其所有的缺点(例如,GPS需要清晰的天空视图才能工作)

要获得更可靠的设备跟踪,您必须使用更可靠、更灵活的定位策略,根据更改的外部场景(室内/室外等)更改当前位置提供程序。更好的是,您可以同时使用一整套不同的定位提供商(即“混合”定位系统)

请看一下之前回答的这些问题:

Android文档的以下页面:


可能那个地方没有GPS,或者可能是纬度和经度没有改变…@SilentKiller我也这么认为,如何改进这一点?有什么想法吗?@hardikjoshi就在那里。@Xelamae在这种情况下,你可以从TelephonyManager API获取CEllID,然后从该CEllID执行反向API调用,该调用将返回该CEllID的长度。请看这个@Lucifer是否给出了准确的结果…??我可以使用getBestProvider()吗?是和否。getBestProvider只为您提供当前最符合您标准的位置提供商。这些条件是静态的:一旦声明,它们始终保持不变,结果位置提供程序也是如此。相反,您需要一种方法来动态地适应不断变化的场景。这就是为什么您必须在代码中处理这些更改。