从未从 FusedLocationProviderApi 检索到任何位置
Posted
技术标签:
【中文标题】从未从 FusedLocationProviderApi 检索到任何位置【英文标题】:No location is ever retrieved from FusedLocationProviderApi 【发布时间】:2016-11-06 15:17:29 【问题描述】:我有以下简单的课程,这是我的主要活动。我基本上是按照 android 文档中的这个逐字记录的。我正在通过 Android Studio 从我的手机运行它。我遇到的问题是我绝对从来没有从这个设置中得到一个合法的位置。 location
对象始终为空。实际上,我希望位置 立即 以类似于浏览器通过 navigator.geolocation
快速获取位置的方式。
我的设置方式有什么奇怪的地方吗?如果不是,我如何强制使用 Fused Location Provider API 之外的位置?
public class MyActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener
private Location location;
private GoogleApiClient mGoogleApiClient;
private static LocationRequest locationRequest;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null)
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
@Override
protected void onStart()
mGoogleApiClient.connect();
super.onStart();
@Override
protected void onStop()
mGoogleApiClient.disconnect();
super.onStop();
private void requestLocationUpdates()
locationRequest = new LocationRequest();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(1000);
locationRequest.setFastestInterval(500);
@Override
public void onConnected(@Nullable Bundle bundle)
requestLocationUpdates();
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, locationRequest, this);
location = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (location != null)
latitude = location.getLatitude();
longitude = location.getLongitude();
@Override
public void onLocationChanged(Location location)
if (location != null)
latitude = location.getLatitude();
longitude = location.getLongitude();
@Override
public void onConnectionSuspended(int i)
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult)
【问题讨论】:
您的问题解决了吗?有同样的问题 【参考方案1】:高精度意味着它需要 GPS。如果您实际上无法联系 GPS 卫星(例如,您在没有清晰的天空线的建筑物内),那么它将永远不会发送结果。这实际上是正确的行为 - 你想要高精度,它等到你拥有它。
如果您可以接受较低的准确性,请使用不同的优先级类型。否则你将不得不接受你可能永远得不到回应。
即使在最佳条件下也需要几秒钟,顺便说一句。它必须在太空中找到六颗卫星才能给出答案,这需要时间。
【讨论】:
感谢您的回复。我更改为PRIORITY_LOW_POWER
并得到相同的结果,即使在尝试任何操作之前让应用程序运行 20 秒后也是如此。令我惊讶的是,这很困难,因为浏览器立即获取位置没有问题以上是关于从未从 FusedLocationProviderApi 检索到任何位置的主要内容,如果未能解决你的问题,请参考以下文章
FusedLocationProvider - 如果位置模式为“仅设备”,任何获取位置的方法?
FusedLocationProvider 始终返回 null Location 对象
FusedLocationProvider 有时会给出错误的位置
FusedLocationProvider 位置更新的单独类或服务?