android - 试图通过网络提供商获得纬度和纬度

标签 android gps locationmanager android-location

我正在尝试通过网络提供商而不是 gps 提供商获取我当前的坐标。

我能够找到解决方案,但我对这种情况下的概念有点困惑。

工作代码

这是我获取坐标的代码:

public void getLocation(){

        locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
        if(appUtils.isOnline()){

            try{

                Geocoder geocoder = new Geocoder(
                        MainActivity.this.getApplicationContext(),
                        Locale.getDefault());
                Location locationNetwork = locationManager
                        .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

                List<Address> list;

                if(locationNetwork!=null){

                    Toast.makeText(context,"Network Available!!",Toast.LENGTH_LONG).show();
                    list = geocoder.getFromLocation(locationNetwork.getLatitude(),locationNetwork.getLongitude(),3);

                    if(list!=null&&list.size()>0){

                        latitude = list.get(0).getLatitude();
                        longitude = list.get(0).getLongitude();

                        Toast.makeText(context,String.valueOf(latitude) + " (....) " + String.valueOf(longitude),Toast.LENGTH_LONG).show();

                        int count = 0;
                        while (latitude==null||longitude==null){

                            latitude = list.get(count).getLatitude();
                            longitude = list.get(count).getLongitude();
                            count++;
                            Toast.makeText(context,String.valueOf(latitude) + " --- " + String.valueOf(longitude),Toast.LENGTH_LONG).show();
                        }
                    }
                }else{

                    Toast.makeText(context,"No response!!",Toast.LENGTH_LONG).show();

                }
            }catch (IOException e){

                e.printStackTrace();
            }

        }else{

            Toast.makeText(context,"Server not responding",Toast.LENGTH_LONG).show();

        }

    }

这段代码在启用 gps 时工作得很好。如果 GPS 被禁用,它就不起作用。

现在,如果我们将位置设置为 NETWORK_PROVIDER:

Location locationNetwork = locationManager
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

为什么我们仍然需要 gps?

现在,如果我将其更改为PASSIVE PROVIDER:

Location locationNetwork = locationManager
                                .getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);

它与被动提供者配合良好。为什么会这样?

谁能解释一下这里的主要区别是什么以及与网络提供商获取坐标的正确方法是什么?

我知道这个问题已经被问过好几次了,我也确实做过。我只想搞清楚这个概念。

提前致谢..:)

最佳答案

它不需要GPS来使用网络供应商,我已经做过很多次了。但是,如果 getLastKnowLocation 从未有过针对该提供商的应用程序请求更新,或者如果上次发生的时间太久了,则 getLastKnowLocation 可能不会返回值。您不能指望该函数总是返回非 NULL。如果您想确保获得位置,请改用 requestSingleUpdate。这将始终为您提供一个位置(假设您使用的提供商已启用),但可能需要一些时间 - 结果可能不会立即可用。

(还有一次该功能可能永远不会返回 - 如果您使用 GPS 提供商并且它无法锁定足够多的卫星来找到位置。例如如果您在地下 parking 场)。

关于android - 试图通过网络提供商获得纬度和纬度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574174/

相关文章:

java - 通过 USB 调试时如何以编程方式获取设备的 Android 版本

android:检测声级

java - 文件解密失败 : javax. crypto.BadPaddingException:填充 block 已损坏

java - 如何引用实现接口(interface)的 Activity ?

gps - 检查点是否在多边形内

android - 在不使用 GPS 的情况下查找手机的当前位置

android - 位置设置对话框显示两次或如何检测该对话框显示\关闭

android - 使用原始 GNSS 测量可能会增加采样率吗?

java - 安卓位置错误