派对有点迟到,但认为值得为 2016 年(或以后)阅读本文的人发布更新。
正如其他答案所建议的那样,如今最好的方法是使用Google Play Services Location API。除非您确实需要对位置提供程序进行细粒度控制,否则 Google API 一定会在更短的时间内为您提供更好的位置估计,仅使用每个位置实际需要的资源(GPS、WiFi、蜂窝塔、蓝牙)用户的设备。
不幸的是,订阅位置更新仍然很麻烦(正如Matthias指出的那样,API 有点复杂)。您需要执行以下部分或全部操作:
- 一次:请求位置许可(棉花糖及以上)
- 连接到 API,处理不同的错误和极端情况
- 检查并可能启用所需的位置提供程序
- 请求位置更新
我努力在几个不同的项目中设置位置更新,并决定编写一个实用程序类来为您完成大部分工作:
LocationAssistant - Android 上的无忧位置更新
我还写了一篇关于在各种 Android 版本上设置 Android 位置的详细博客文章,您可以在此处阅读。
因此,要解决您最初的问题(尽快获得具有 GPS 精度的最新位置):
public class MyActivity extends Activity implements LocationAssistant.Listener {
private LocationAssistant assistant;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
// You can specify a different accuracy and interval here, depending on the needs of your app
assistant = new LocationAssistant(this, this, LocationAssistant.Accuracy.HIGH, 5000, true);
}
@Override
protected void onResume() {
super.onResume();
assistant.start();
}
@Override
protected void onPause() {
assistant.stop();
super.onPause();
}
@Override
public void onNewLocationAvailable(Location location) {
// Do something with the location
}
...
}
onNewLocationAvailable()
在第一个有效位置可用时立即调用。您需要实现更多的侦听器方法来处理未授予权限或关闭位置提供程序的情况。但本质上就是这样。
LocationAssistant还允许您可靠地拒绝模拟位置(如果这是您的应用程序的要求)。