我开始开发一款永久保留在后台的应用,并检测用户暂时停留在某个位置(然后显示邀请用户打开的通知)应用程序获取有关该地点的信息。)
这与谷歌地图在您进入餐馆时所做的非常类似,它会向您显示检查评级的通知。
我想要的是对设备产生最小的影响,因此位置更新应该非常“被动”,仅在用户不移动时获取位置,并且如果可能的话,回收其他活动已经获得的位置数据 - 也许是谷歌地图本身或设备上运行的其他位置应用程序。 这不是导航应用程序,因此我不需要具有实时精确位置,而只需要具有最佳准确性和最小努力的近似位置,并且仅在用户不移动的情况下。
LocationListener
和onLocationChanged
似乎是我的人,但是我可以指定我不想触发设备的传感器,只有在可用于其他示波器时才重复使用位置数据吗?我的应用程序应该检查这些信息,然后决定在它们足够准确时进行反向地理编码。
答案 0 :(得分:0)
是的,LocationListener
和onLocationChanged
是你的男人,但是对于被动实施,你可以选择一些选项。
首先,您可以检查最后一个已知位置,也许可以根据时间进行比较;即getTime()并验证它是否对您有用。
在代码方面,字面上......
Google samples, android location具有与最后一个位置部分相关的内容:
/**
* Runs when a GoogleApiClient object successfully connects.
*/
@Override
public void onConnected(Bundle connectionHint) {
// Provides a simple way of getting a device's location and is well suited for
// applications that do not require a fine-grained location and that do not need location
// updates. Gets the best and most recent location currently available, which may be null
// in rare cases when a location is not available.
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
此外,您可以将其与LocationRequest对象结合使用,这可以帮助您实施,因为您可以在尝试getLastLocation()
后立即调用它,并且基本上有更可靠的安排来获取位置。
// Create the location request
mLocationRequest = LocationRequest.create()
//priority object needs to be set, the following will definitely get results for you
.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
//interval updates can be on the lines of 15mins or 30... acc to your requirement
.setInterval(UPDATE_INTERVAL)
.setFastestInterval(FASTEST_INTERVAL);
// Request location updates
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,
mLocationRequest, this);
我建议您尝试PRIORITY_NO_POWER,可以与getLastLocation()
结合使用。这些电源模式专门用于优化电池/功耗和检索位置的效率。