使用 FusedLocationProviderClient 获取按钮单击的最后一个已知位置

Posted

技术标签:

【中文标题】使用 FusedLocationProviderClient 获取按钮单击的最后一个已知位置【英文标题】:Get last known location on button click with FusedLocationProviderClient 【发布时间】:2017-09-14 12:23:26 【问题描述】:

我需要在单击按钮时立即将当前位置返回给服务器。

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) 
                    // ...
                
            
        );

android 文档中,建议使用这种方式来获取位置。但如您所见,它不会立即返回该位置。我应该等待thread.sleep() 或相关的东西直到onSuccess 运行?或者最好的方法是什么?

【问题讨论】:

【参考方案1】:

调用成功后调用一些方法将位置上传到服务器。

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) 
                    sendToServer();
                
            
        );

【讨论】:

不幸的是,这是不可能的。我有一个像public String getLastLocation 这样的方法,我需要从这个方法中将位置信息作为字符串返回。 你想返回哪里? 作为该方法的返回值。 你不能从匿名内部类返回值给方法。【参考方案2】:

没有办法“立即”获取位置。您必须等待回调。不,不要使用任何睡眠方法。在 UI 线程上,它会阻塞 ui,甚至没有必要。只需将位置发送到您的服务器onSuccess

【讨论】:

以上是关于使用 FusedLocationProviderClient 获取按钮单击的最后一个已知位置的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)