为了账号安全,请及时绑定邮箱和手机立即绑定

LocationClient getLastLocation()返回null

LocationClient getLastLocation()返回null

蓝山帝景 2019-09-02 15:59:55
就像我在测试一个nexus s(4.0.4提供google play服务)和avd(4.2.2 with google api)之前遇到的问题一样,在这两种情况下,locationclient getLastLocation()总是返回null。public class MainActivity extends Activity implements LocationListener,        GooglePlayServicesClient.ConnectionCallbacks,        GooglePlayServicesClient.OnConnectionFailedListener {    private LocationClient mLocationClient;    private LocationRequest mLocationRequest;    boolean mUpdatesRequested = false;    boolean mConnected = false;    SharedPreferences mPrefs;    SharedPreferences.Editor mEditor;    private TextView mText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mText = (TextView) findViewById(R.id.text);        mLocationRequest = LocationRequest.create();        mLocationRequest                .setInterval(LocationUtils.UPDATE_INTERVAL_IN_MILLISECONDS);    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);        mLocationRequest.setFastestInterval(LocationUtils.FAST_INTERVAL_CEILING_IN_MILLISECONDS);        mUpdatesRequested = false;        mPrefs = getSharedPreferences(LocationUtils.SHARED_PREFERENCES,                Context.MODE_PRIVATE);        mEditor = mPrefs.edit();        mLocationClient = new LocationClient(this, this, this);    }    @Override    public void onStart() {        super.onStart();        /*         * Connect the client. Don't re-start any requests here; instead, wait         * for onResume()         */        mLocationClient.connect();    }在onConnected()打电话之前getLastLocation(),但仍然没有运气。哪里是错误,提前谢谢。
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

目前,Fused Location Provider如果至少有一个客户端连接到它,则仅保留后台位置。一旦第一个客户端连接,它将立即尝试获取位置。如果您的活动是第一个客户端连接,并调用getLastLocation()在马上onConnected(),可能没有足够的时间在第一位置进去。


查看完整回答
反对 回复 2019-09-02
?
catspeake

TA贡献1111条经验 获得超0个赞

按照教程中的说明我遇到了同样的问题。在电话上它工作,并在(Genymotion)模拟器它没有。


在AndroidManifest.xml中,更改以下内容:


<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

对此:


<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

......然后你马上就到了。无需更改代码(以收听位置更新)。


查看完整回答
反对 回复 2019-09-02
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

您的设备未启用“Wi-Fi和移动网络位置”也可能导致此问题。

LocationClient(融合位置提供商)使用GPS和WiFi。GPS需要一段时间才能找到您的位置,而wifi速度要快得多。但是,如果连接了这两个服务中的任何一个,则将调用onConnected的回调方法。如果您尝试立即在onConnected方法中调用LocationClient.getLastLocation(),那么如果您的wifi位置服务被禁用,则很可能会获得空值。这只是因为GPS不够快。

要在本地解决问题,请启用“Wi-Fi和移动网络位置”。您可以转到“设置>个人>位置访问> Wi-Fi和移动网络位置”来执行此操作。

但是,如果要为应用程序的用户解决问题,最好检查getLastLocation()是否返回null。如果是,请提示您的用户启用该服务,就像谷歌地图一样。

希望,这有帮助。


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 830 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信