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)