- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在构建一个 GPS Android 应用程序,它根据用户的当前位置获取最近的地点。
这是我的应用程序所做的:
我希望做的事情:
如果 GPS 或网络无法检索位置(例如 2 分钟),那么我们会更换提供商。我们不希望用户等待太久。
如果能够同时使用这两个提供程序,然后从中获得最准确的信息,那就太好了。我看过http://developer.android.com/guide/topics/location/strategies.html我看到了 isBetterLocation 方法。我如何将此方法集成到我的应用程序中?我无法理解应该如何、在何处以及何时调用它。我假设 isBetterLocation() 要求我同时调用网络和 GPS。如果我的应用程序能够同时收听两者以确保准确性,那就太好了。我该怎么做呢?如果其中之一不可用怎么办?
这是我的部分代码:
if(!GPSEnabled && !networkEnabled)
{
Toast.makeText(this, "Error: This application requires a GPS or network connection",
Toast.LENGTH_SHORT).show();
}
else
{
if(GPSEnabled)
{
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
else if(networkEnabled)
{
System.out.println("Getting updates from network provider");
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
}
}
这是 onLocationChanged
方法。我得到纬度/经度值,然后将它们发送到我的服务器,然后用它做适当的事情。
public void onLocationChanged(Location location)
{
//Get coordinates
double lat = (location.getLatitude());
double lng = (location.getLongitude());
Log.d("MainActivity", "got location: " + lat + ": " + lng);
//get nearest locations
new GetLocations().execute(SharedVariables.root + SharedVariables.locationsController + SharedVariables.getNearestMethod + lat + "/" + lng);
// Zoom in, animating the camera after the markers have been placed
map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 10));
System.out.println("lat = " + lat + ", lng = " + lng);
//Stop listening for updates. We only want to do this once.
locManager.removeUpdates(this);
}
最佳答案
无论是使用 GPS 还是网络,您都无法大幅减少获取位置的最终等待时间。
这两种定位方法各有优缺点:
GPS 通常需要较长时间才能知道您的位置,因为寻找和校准 GPS 卫星是一项艰巨的任务(需要至少找到 3 颗正确对齐的卫星)。最重要的是,添加最终阻碍信号的障碍物/环境。除非您在应用程序启动之前/启动时启用 GPS,否则必须等待。 另一方面,您会得到一个细粒度的位置。
如果您只需要一个粗略的位置,使用网络是一种解决方案:它会在几秒钟内返回数据。 但是位置的精确度因可用/使用的网络而异;我没有任何实际示例,但我猜精度可能很大变化。 GPS 将总是比网络更精确的位置。
了解没有预定义的选择。一切都取决于您的应用如何处理这些数据。
如果可用,则使用 GPS,同时向网络发出位置请求,如果没有 GPS 设备,则回退到网络。然后采取:
If GPS or network fails to retrieve a location, for example, 2 minutes, then we switch providers. We don't want the user to wait too long.
在这两种情况下,都不要设置回退计时器:您只会在第一个提供者失败的情况下延长等待时间;所以两个请求同时进行,除非 android API 不允许异步位置请求。
关于android - 如何阻止用户长时间等待位置修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312052/
我有一个独立的 Thread 应用程序。这是一个等待消息的监听器,当消息到达时执行一些操作,其中我必须将消息保存在数据库中。但我遇到了问题,因为如果我运行应用程序并“手动发送消息”,一切都会正常工作,
我有以下php代码: sleep(65); $query = "UPDATE database.table SET XXXXXXX = XXXXXXX - ".$YYYYYY." WHERE
我正在开发一个业余爱好应用程序。它在主布局中使用 webview。单击 webview 内的链接会使用户保持在 webview 内。启动后一切正常,但仍在应用程序内。但是,在手机休眠一段时间后,我重新
我目前运行的应用程序需要最大堆大小为 16GB。 目前我使用以下标志来处理垃圾回收。 -XX\:+UseParNewGC, -XX\:+UseConcMarkSweepGC, -XX:CMSIniti
$ uname -a Darwin Wheelie-Cyberman 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011
在 while 循环仍在休眠时退出它的最简单方法是什么?是否有某种函数可以在 sleep 时检测某个值是否为真? 或者我是否在循环中设置一个小 sleep 并检查如果不再睡一会儿就退出?如果可以,我该
我正在 Ubunu 的 Jetty 6 上运行 Java Web 服务器,用于基于反向 ajax 的 Web。而且我在向浏览器重新发送数据的线程滞后方面遇到了严重的问题。很多时候,一些线程开始 hib
当我运行长时间操作时,我遇到来自 IIS 的请求超时。我的 ASP.NET 应用程序正在后台处理数据,但处理的记录数量很大,因此操作需要很长时间。 但是,我认为 IIS 使 session 超时。这是
我不确定从哪里开始解决这个问题,但如果我有一个 AJAX 网络应用程序向服务器发送请求并在数据库(在我的例子中是 postgresql)上运行长查询,有没有办法停止或如果仍在运行时用户刷新页面或关闭
我是一名优秀的程序员,十分优秀!