我正在做一个相机应用程序,它会自动对每张照片进行地理标记。使用
LocationManager.requestLocationUpdates() //simply to get the GPS running
LocationManager.getLastKnownLocation() //for each picture, to get coordinates
主要是为了尽可能快地从手机中拔出坐标,因为它仍然是一个相机应用程序,你不想浪费时间获取GPS数据。
(假设仅使用GPS_PROVIDER,而不是使用NETWORK_PROVIDER)
但问题是,如果用户输入隧道,例如手机无法继续获取更新。 10分钟后,当调用getLastKnownLocation()时,我将得到一个过时的位置。
我想找到一种方法,我可以根据个人的舒适程度设置位置的“到期”时间。
换句话说,继续使用getLastKnownLocation(),但如果数据(例如)超过5分钟,请不要理会它,我宁愿使用'null'位置。如果数据是2分钟,那仍然没有问题
答案 0 :(得分:4)
您可以自己实现。底层API中没有任何内容包含此内容,但在您的应用程序中存储请求(或获取最后一个)的时间(可能是在SharedPreferences中)完全没问题。您还必须对用户移动速度等问题感到厌倦,因此通常您可能需要花费大量的精力来确定您希望如何执行此操作。 (在API中)没有任何方法可以找出对.getLastLocation()的调用有多新鲜。几分钟,最好采用我提到的技术。很长一段时间你可能想要考虑像AlarmManager这样的东西(如果你的应用程序运行时间很长,你应该使用它)。但是,你似乎比我更多地使用.getLastLocation。我经常只是请求更新,然后每当我得到第一次更新时“放下点”。一般来说,我发现.getLastKnownLocation()并不是那么可靠,但也许这只是因为我不经常使用我的位置的应用程序。
答案 1 :(得分:2)
管理以发现返回的每个位置都有一个时间变量
long time_a = my_loc.getTime();
我们可以用它来与
进行比较Calendar cal = Calendar.getInstance();
long time_b = cal.getTimeInMillis();
long interval = time_a - time_b;
该间隔是定位的'有效性',可以很容易地用于我的目的:)