查找位置:Google Play 位置服务或 Android 平台位置 API
Posted
技术标签:
【中文标题】查找位置:Google Play 位置服务或 Android 平台位置 API【英文标题】:Finding Location : Google Play Location Service or Android platform location APIs 【发布时间】:2014-02-19 06:06:51 【问题描述】:我正在尝试为我的新导航应用获取用户位置。 我想经常检查用户的位置,它必须是准确的。 我使用示例中的以下代码来获取位置。
public class MainActivity extends Activity implements LocationListener
private LocationManager locationManager;
private String provider;
private TextView a;
private TextView b;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a = (TextView) findViewById(R.id.a);
b = (TextView) findViewById(R.id.b);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
if (location != null)
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(location);
else
a.setText("Location not available");
b.setText("Location not available");
@Override
protected void onResume()
super.onResume();
locationManager.requestLocationUpdates(provider,0, 1, this);
@Override
protected void onPause()
super.onPause();
locationManager.removeUpdates(this);
@Override
public void onLocationChanged(Location location)
Double lat = location.getLatitude();
Double lng = location.getLongitude();
a.setText(String.valueOf(lat));
b.setText(String.valueOf(lng));
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
// TODO Auto-generated method stub
@Override
public void onProviderEnabled(String provider)
Toast.makeText(this, "Enabled new provider " + provider,
Toast.LENGTH_SHORT).show();
@Override
public void onProviderDisabled(String provider)
Toast.makeText(this, "Disabled provider " + provider,
Toast.LENGTH_SHORT).show();
但是当我移动时,位置坐标并没有更新,我总是得到一个恒定的值...... 有没有更好的方法来获取位置?根据 android 文档,我可以为此使用 Google Play 位置服务或 Android 平台位置 API。 我检查了两者的示例代码,它实现了 LocationListener 接口来获取用户位置。那么它们之间的实际区别是什么?
【问题讨论】:
设置标准.setAccuracy(Criteria.ACCURACY_COARSE);并尝试 Gps 提供程序在室内无法正常工作...它在室外正常工作... 【参考方案1】:绝对使用新的 google play 位置服务。他们在室内的工作比旧的位置经理好得多。我创建了一个使用新的 google play 位置服务并定期在后台运行的示例。看看吧:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android
【讨论】:
请记住,如果您使用 Google Location,您的应用现在依赖于 Google Play 服务,该服务是 google 拥有的封闭源代码。因此,您的应用无法在 AOSP Android 设备上运行。 嘿伙计,你能问我一个关于你在 GitHub 上的项目的问题吗?它只是在您打开应用程序的那一刻发送,甚至在不打开应用程序的情况下,当它开始在单元格中启动时也会发送位置? 谷歌播放位置 API 需要网络连接吗?【参考方案2】:当我使用它时,我发现了 2 个很好的来源:
博文:Android Location Fused Provider。它包含一个关于使用 FusedLocationProviderApi 在 Android 中获取位置的完整教程。
回答Android LocationClient class is deprecated but used in documentation问题。
基本上两者都谈到了 Google I/O 会议中提到的类似步骤,其中一个答案中提到了链接:
首先,获取GoogleClientApi
实例,例如:
GoogleClientApi googleApiClient = new GoogleApiClient.Builder(locationActivity)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
然后像这样调用.connect()
:
googleApiClient.connect();
然后在回调onConnected
中,获取最后的位置,甚至可以根据需要请求位置更新,例如:
LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
如果您想请求位置更新,则可以使用requestLocationUpdates 呼叫。
希望对你有帮助。
【讨论】:
如果定期更新 GPS 位置怎么办?如果我将设置 setInterval 设置为 2000 ms,我应该如何测试?室内办公室还是室外院子?以上是关于查找位置:Google Play 位置服务或 Android 平台位置 API的主要内容,如果未能解决你的问题,请参考以下文章
是否需要 Google Play 服务才能在 Android 手机上查找当前 gps 位置?