从未从 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 位置更新的单独类或服务?

无法使用 FusedLocationProvider 将 Gps 设置升级到高精度在某些设备中

Android:FusedLocationProvider,每隔几秒获取一次位置