Android如何在LocationManager中获取海拔高度。我一直得到零。

5
我正在尝试从location.getAltitude()方法获得当前海拔高度,但它总是返回零。请问我该怎么做才能获取当前的海拔值?我已经正确获得了经纬度。请给些建议。我在谷歌上搜索并试用了一些示例,但仍然返回零。
我使用了以下代码: 在onCreate方法中,我调用了getMyCurrentLocation()方法。
void getMyCurrentLocation() {
        LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener locListener = new MyLocationListener();
try{gps_enabled=locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
           try{network_enabled=locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}  
if(gps_enabled){

                locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);

            }

            if(network_enabled){
                locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);

            }


        if(gps_enabled){
                location=locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);



            }

            if(network_enabled && location==null)   {
                location=locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);  

            }

        if (location != null) {

            MyLat = location.getLatitude();
            MyLong = location.getLongitude();
    Toast.makeText(this,"My Lat : " + MyLat + "\n" + "My Long : " + MyLong, Toast.LENGTH_SHORT).show();

        } else {

        }


        System.out.println(" LATTITUDE " + MyLat);
        System.out.println("Longitude " + MyLong);

    }


public class MyLocationListener implements LocationListener

        {

        @Override

        public void onLocationChanged(Location loc)

        {

        MyLat =loc.getLatitude();
        MyLong=   loc.getLongitude();
       gooalt=getElevationFromGoogleMaps(MyLat,MyLong) ;
      double alt=loc.getAltitude(); **==>>> This one returns ZERO**

        String Text = "Longitud = " + (loc.getLongitude()) +"Latitud = " + loc.getLatitude()+"Altitude "+gooalt+"feet";

        Toast.makeText( getApplicationContext(),Text,Toast.LENGTH_SHORT).show();


        }

        @Override

        public void onProviderDisabled(String provider)

        {

        Toast.makeText( getApplicationContext(),"Gps  Disabled",Toast.LENGTH_SHORT ).show();

        }

        @Override

        public void onProviderEnabled(String provider)

        {

        Toast.makeText( getApplicationContext(),"Gps   Enabled",Toast.LENGTH_SHORT).show();

        }

        @Override

        public void onStatusChanged(String provider, int status, Bundle extras)

        {

        }

        }

请尝试以下链接以获取有关获取海拔高度的答案:https://dev59.com/ik3Sa4cB1Zd3GeqPw6n8 谢谢! - Dinesh
3个回答

1

网络位置没有高度信息。GPS有,但如果你一直得到0,那么可能是你的GPS硬件损坏了。关闭手机上的网络位置设置,尝试使用地图应用程序查看是否从GPS获取任何修复。


我已经检查过了。我没有在单个设备上进行检查,我有三个设备。所有设备都只提供零。我已经提到了我使用的设备。 - RAJESH
1
只需请求 GPS_PROVIDER 的 requestLocationUpdates 并查看是否有任何修复。如果您确实这样做了,请调用 LocationProvider 类中的 supportsAltitude 方法以查看您的 GPS 提供程序是否支持高度。顺便说一句,高度非常不准确。 - Hoan Nguyen

1

嗨@Thomas K,我已经在编辑中添加了我的代码。你能否告诉我为什么我得到的双倍alt = loc.getAltitude()总是零。我使用的是HTC EVO 4G和Sony Experia手机,三星Galaxy ACE。 - RAJESH

0

我想知道为什么它没有获取高度值,你的代码是正确的。尝试删除networkprovider并仅在GPS中测试代码,看看是否获取任何值。如果您遇到任何问题,请让我知道您在哪里显示高度的代码,您能否突出显示一下。如果您使用的是String Text = "Longitud = " + (loc.getLongitude()) +"Latitud = " + loc.getLatitude()+"Altitude "+gooalt+"feet"; 来获取高度,那么这是错误的,请尝试使用loc.getAltitude()代替gooalt


2
你的回答格式太糟糕了,即使我想纠正它,也无法做到。 - Jimmy Kane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接