ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – 获取最后一个位置,这么多方法

2019-06-27 14:13:08  阅读:323  来源: 互联网

标签:android location locationmanager android-fusedlocation


当我检查Android教程和/或Android官方文档时,似乎有多种不同的方式来查询位置.我很困惑,因为我不确定哪种方式是正确的方式或文档是否过时.

例如,

1)GoogleApiClient:通过这种方式,它使用Google API客户端

 mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();

然后它会查询这样的位置

LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

2)位置管理器:这种方式使用位置管理器

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);

3)FusedLocationApi(第2种风格):

mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations, this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
        });

我们应该采用哪种方式?

解决方法:

FusedLocationProvider是现在获取Android位置的最佳方式.
您已经提到了两种使用FusedLocationManager的方法

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);

上面这种方法的问题是它将为您提供最后的已知位置,也可能为null,因此您还需要检查null.

 mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
 mFusedLocationClient.getLastLocation()
    .addOnSuccessListener(this, new OnSuccessListener<Location>() {
        @Override
        public void onSuccess(Location location) {
            // Got last known location. In some rare situations this can be null.
            if (location != null) {
                // Logic to handle location object
            }
        }
    });

在上面的这种方法中,您正在注册一个fusionlocationListener,它将成功注册将调用onSuccess方法,并将提供位置对象,这里也可能为null.通常在设备重启情况下,最后一个已知位置为null.还有一些其他情况也.
我建议你使用第二种方法,因为它使用fuselocationprovider来获取最后的已知位置,因为它更有效.

标签:android,location,locationmanager,android-fusedlocation
来源: https://codeday.me/bug/20190627/1305326.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有