android - onLocationChanged 只调用一次,不刷新

标签 android android-location

出于某种原因,我制作了一个小型 gps 应用程序 onLocationChanged 不刷新,它只在应用程序启动时运行一次。

这是我的代码:

public BackgroundLocationService() {
        super("myintentservice");

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

        Criteria crt = new Criteria();
        crt.setAccuracy(Criteria.ACCURACY_FINE);
        String bestProvider = locManager.getBestProvider(crt, true);

        boolean gps_enabled;
        boolean network_enabled;
        boolean best_enabled;

        gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        best_enabled = locManager.isProviderEnabled(bestProvider);


        if (best_enabled) {
            locManager.requestLocationUpdates(bestProvider, 15000, 20, locListener);
            Log.i(TAG, "Best enabled: " + bestProvider);
        } else {
            Log.i("Location Provider: ", "best not enabled: " + bestProvider);
            if (gps_enabled) {
                locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
                Log.i(TAG, "gps enabled!");
            }
            if (network_enabled) {
                locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
                Log.i(TAG, "network enabled!");
            }
        }

    }



    class MyLocationListener implements LocationListener {
        public void onLocationChanged(Location location) {

            if (location != null) {

                //locManager.removeUpdates(locListener);
                longitude = Double.toString(location.getLongitude());
                latitude = Double.toString(location.getLatitude());

                Log.i(TAG,"Location has CHANGED!");
            }
        }
        public void onProviderDisabled(String arg) {}
        public void onProviderEnabled(String arg) {}
        public void onStatusChanged(String provider, int status, Bundle extras) {}
    }

“位置已更改!”消息仅在每次应用启动时显示一次。 我在办公室,但我可以从我的位置移动至少 5-10 米,并且所有提供者都已启用,所以它一定没问题,不是吗?

有什么想法吗?

最佳答案

当您注册位置监听器时,您请求更新的最短时间为 15 秒,最短距离为 20 米。由于您在办公室内,您不太可能获得足够准确的 GPS 定位来实际检测 5-10 米的移动。你试过在外面调试吗?同样,如果您启用了模拟位置,请将模拟坐标发送到模拟器,以确保您的应用在位置更新时按预期运行。

关于android - onLocationChanged 只调用一次,不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14504027/

相关文章:

android - 为什么我的 OnLocationChanged() 永远不会被调用?

android - Android 地理围栏可以在没有网络连接且仅打开 GPS 的情况下工作吗?

android - 如何执行 "RXJava 2 queue jobs"直到值改变?

java - Android - 如何以编程方式获取 SVG 的 Path 对象?

java - 如何获取单击 View 的同级 View ?

android - 一旦您调用取消注册位置监听器,GPS 状态监听器将停止运行

java - 如何检查两个纬度和经度坐标之间的距离?

android - Android 8 (Oreo) 中的后台位置限制是什么?

android - Build.Gradle(Module App)未知属性

java - 如何知道 Android 上的应用/游戏是否通过通知启动?