Android 如何在 LocationManager 中获取高度。我总是归零

Posted

技术标签:

【中文标题】Android 如何在 LocationManager 中获取高度。我总是归零【英文标题】:Android how to get altitude in LocationManager. i am alwaya getting zero 【发布时间】:2012-05-08 03:39:48 【问题描述】:

我正在尝试从 location.getAltitude() 方法获取当前高度。但它总是返回零。我应该怎么做才能获得当前的高度值。但正确获取经度和纬度。请给我建议。我在谷歌搜索并制定了一些样本,但所有样本都只返回零。

我用过的代码:

在创建时我调用了 =getMyCurrentLocation();这种方法。

void getMyCurrentLocation() 
        LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener locListener = new MyLocationListener();
trygps_enabled=locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);catch(Exception ex)
           trynetwork_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)

        

        

        

【问题讨论】:

试试下面的链接以获得 Altitude 的答案:***.com/questions/2791927/… 谢谢..! 【参考方案1】:

你用什么方法来获取位置的? 也许你可以试试http://developer.android.com/reference/android/location/LocationManager.html#getLastKnownLocation(java.lang.String),这对我有用。

如果没有,也许可以尝试另一种方法,有几种方法: http://developer.android.com/guide/topics/location/index.html

顺便说一句:你能给我们一些代码吗?你在什么设备上测试?

【讨论】:

嗨@Thomas K 我在编辑中添加了我的代码。你能说说为什么我得到双 alt=loc.getAltitude() 总是零。我用过 HTC EVO 4G 和 SOny Experia 手机,三星 Galaxy ACE。【参考方案2】:

网络位置没有高度。 GPS 可以,但如果你总是得到 0,那么你的 GPS 硬件可能坏了。关闭手机上的网络位置设置,然后尝试使用地图应用,看看是否可以从 GPS 获得任何修复。

【讨论】:

我也这样检查过。我还没有签入单个设备,。我有三个设备.. 都只提供零.. 上面我提到了我用过的设备。 只需为 GPS_PROVIDER 请求LocationUpdates 并查看是否有任何修复。如果你这样做了,那么调用 LocationProvider 类中的 supportsAltitude 方法来查看你的 GPS 提供者是否支持高度。顺便说一句,高度非常不准确。【参考方案3】:

我想知道为什么它没有获得高度值,您的代码是正确的。尝试删除网络提供商并仅在 gps 中测试代码,看看它是否获得任何值,如果您遇到任何问题,请在代码中告诉我您是否显示高度,请突出显示它。如果您使用的是 String Text = "Longitud = " + (loc.getLongitude()) +"Latitud = " + loc.getLatitude()+"Altitude "+gooalt+"feet";对于海拔高度,尝试使用 loc.getAltitude() 代替 gooalt.. .

【讨论】:

你的回答格式太差了,即使我想改正也改不了

以上是关于Android 如何在 LocationManager 中获取高度。我总是归零的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法选择特定的 GPS 提供商?

是否有回调用于告知用户位置何时可用

位置管理器给出空坐标

使用 GPS 提高测量距离的准确性

以 xamarin 形式获取位置

Android File Transfer Mac: 如何在 macOS 和 Android 系统之间移动数据