Java 如何拥有内置GPS储物柜,如;已连接全球定位系统“;应用程序内?

Java 如何拥有内置GPS储物柜,如;已连接全球定位系统“;应用程序内?,java,android,gps,android-gps,Java,Android,Gps,Android Gps,我想在我的应用程序上有最高的精度,当我用 Location.getLatitude() Location.getLongitude() 我发现GPS必须在后台运行才能达到最高的精度 如果有人知道,GPS连接应用程序的功能,以及类似的应用程序,如GPS Fix、GPS Locker,正是我想要的 我想在我的应用程序中复制它,这样我就不必安装和运行那个额外的应用程序了 我找不到任何开源代码 有人能帮忙吗?经过长时间的搜索和来自多个来源的提示,我们发现有人正在做一些我们正在寻找的事情: 此人正在寻

我想在我的应用程序上有最高的精度,当我用

Location.getLatitude()
Location.getLongitude()
我发现GPS必须在后台运行才能达到最高的精度

如果有人知道,GPS连接应用程序的功能,以及类似的应用程序,如GPS Fix、GPS Locker,正是我想要的

我想在我的应用程序中复制它,这样我就不必安装和运行那个额外的应用程序了

我找不到任何开源代码


有人能帮忙吗?

经过长时间的搜索和来自多个来源的提示,我们发现有人正在做一些我们正在寻找的事情:

此人正在寻找更新其GPS位置的解决方案,即使其屏幕被锁定,但同时实施了我认为是解决我问题的解决方案: 启动通过函数getLocation()提取位置的服务。 此函数在服务中由runnable+处理程序以任意时间间隔UPDATE\u CYCLE\u PERIOD定期调用

在函数getLocation()中,仅当网络已连接或GPS处于活动状态时,才会执行更新,但也会相应地执行其他两种情况:MIN_TIME_BW_updates和MIN_DISTANCE_CHANGE_FOR_updates,由名为locationManager.requestLocationUpdates()的方法调用。我们仍然不确定这到底在做什么,但猜测是它只是为locationManager定义了更新条件

在getLocation()内部调用的特定方法的代码是:

周期性runnable+处理程序的代码:

    handler = new Handler();
    runnable = new Runnable() {
        public void run() {
           location = getLocation();
           handler.postDelayed(runnable, UPDATE_CYCLE_PERIOD);
        }
    };
该函数的代码是

public Location getLocation() {
    try {
        locationManager = (LocationManager) mContext
                .getSystemService(LOCATION_SERVICE);

        // getting GPS status
        isGPSEnabled = locationManager
                .isProviderEnabled(LocationManager.GPS_PROVIDER);

        // getting network status
        isNetworkEnabled = locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) {
            // no network provider is enabled
        } else {
            this.canGetLocation = true;
            // First get location from Network Provider
            if (isNetworkEnabled) {
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("Network", "Network");
                if (locationManager != null) {
                    location = locationManager
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }
            // if GPS Enabled get lat/long using GPS Services
            if (isGPSEnabled) {
                if (location == null) {
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("GPS Enabled", "GPS Enabled");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return location;
}
我们为这3个变量定义的数值为:

UPDATE_CYCLE_PERIOD = 5 sec (10 sec originally)

MIN_DISTANCE_CHANGE_FOR_UPDATES = 1 meter (10 meters originally)

MIN_TIME_BW_UPDATES = 1 sec  (1 min originally)

这是我们的猜测,我们可以模仿应用程序“GPS连接”锁定GPS功能的效果,通过超频繁和超精确的更新-如果该应用程序正在做类似的事情的话。我们可能必须测试和优化电池消耗,因为这些值似乎非常消耗。欢迎发表任何意见。

您好,欢迎光临。无需在标题中添加标签。@FedericoklezCulloca:好的,谢谢toy的更正和帮助。作为刷新:我和我的同事正在尝试使用永久循环实现位置的持续刷新,该循环将通过服务在应用程序的后台运行。有更多权限的人可以标记或投票作为答案吗?
UPDATE_CYCLE_PERIOD = 5 sec (10 sec originally)

MIN_DISTANCE_CHANGE_FOR_UPDATES = 1 meter (10 meters originally)

MIN_TIME_BW_UPDATES = 1 sec  (1 min originally)