首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从未从FusedLocationProviderApi中检索到任何位置

从未从FusedLocationProviderApi中检索到任何位置
EN

Stack Overflow用户
提问于 2016-07-04 21:21:04
回答 1查看 186关注 0票数 1

我有以下简单的课程,这是我的主要活动。从本质上讲,我从Android文档中逐字地遵循了这个规则。我是通过Android Studio从手机上运行这个的。我遇到的问题是,我绝对不会从这个设置中得到一个合法的位置。location对象始终为空。实际上,我希望这个位置与浏览器通过navigator.geolocation快速获取位置的方式类似。

我设置这个的方式有什么奇怪吗?如果没有,如何将位置强制从融合位置提供程序API中退出?

代码语言:javascript
复制
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) {}
}
EN

回答 1

Stack Overflow用户

发布于 2016-07-04 21:24:33

高精度意味着它将需要GPS。如果你真的不能联系到GPS卫星(例如,你在一栋大楼里,没有一条清晰的线通往天空),那么它就永远不会发送结果。这实际上是正确的行为-你想要高精度,它等待直到你有它。

如果您的精度较低,请使用不同的优先级类型。否则,你将不得不接受这样一个事实:你可能永远得不到回应。

即使在最佳的条件下,也要花几秒钟的时间,BTW。它必须在太空中找到六颗卫星才能给出答案,这需要时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38192361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档