【问题标题】:Why does Location.getAltitude() always return zero, at least in the emulator?为什么 Location.getAltitude() 总是返回零,至少在模拟器中?
【发布时间】:2012-06-15 16:04:46
【问题描述】:

有人知道为什么我下面的 getAltitude 总是返回 0 吗?

package com.example.helloandroid;

import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;

public class HelloAndroid extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d("main", "onCreate");
        setupGps();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    LocationListener locationListener;
    LocationManager lm;

    void setupGps() {
        Log.d("gps", "Setting up GPS...");
        locationListener = new MyLocationListener();
        lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20000, 5,
                locationListener);

        Log.d("gps",
                "GPS supports altitude: "
                        + lm.getProvider(LocationManager.GPS_PROVIDER)
                                .supportsAltitude());
        Log.d("gps", "Finished setting up GPS.");
    }

    static class MyLocationListener implements LocationListener {

        public void onLocationChanged(Location location) {
            Log.d("gps", "onLocationChanged");
            Log.d("gps",
                    "x: " + location.getLongitude() + ", y: "
                            + location.getLatitude() + ", alt.: "
                            + location.getAltitude());
        }

        public void onProviderDisabled(String provider) {
            Log.d("gps", "onProviderDisabled");
        }

        public void onProviderEnabled(String provider) {
            Log.d("gps", "onProviderEnabled");
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {
            Log.d("gps",
                    "onStatusChanged; new status: " + String.valueOf(status));
        }
    }
}

为了测试,我向模拟器发出带有高度的geo 命令:

[someone@somewhere ~]$ telnet localhost 5554
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: type 'help' for a list of commands
OK
geo fix -121.45356 46.51119 4392
OK

但是getAltitude() 返回 0:

我只尝试过模拟设备。

编辑

根据checheen 的评论,我确认Location.hasAltitude() 是真的。它是。还有什么想法吗?

public void onLocationChanged(Location location) {
    Log.d("gps", "onLocationChanged");
    Log.d("gps", "x: " + location.getLongitude() 
        + ", y: " + location.getLatitude());
    Log.d("gps", "hasAltitude: " + location.hasAltitude() 
        + ", alt.: " + location.getAltitude());
}

【问题讨论】:

  • According to the doc,如果Location.hasAltitude() 返回 false,就会发生这种情况,当Location 根本没有高度信息时会发生这种情况。也许这适用于你?
  • 我正在检查您评论的第一部分 (.hasAltitude() == false);至于您评论的第二部分,我在geo 命令中提供了高度。
  • @cheeken:hasAltitude() 似乎返回 true。
  • 你在海滩​​还是什么地方?
  • 在某个结冰的湖边的沙滩上耶

标签: android gps


【解决方案1】:

似乎很多人都有类似的问题,甚至被报告为possible bug。如果模拟器此时根本不支持它,我不会感到惊讶。您可能必须使用真实设备。

【讨论】:

  • 谢谢,有机会我会检查它是否可以在真实设备上运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
相关资源
最近更新 更多