【问题标题】:Android GPS Locating, Won't Deliver LocationAndroid GPS 定位,不会提供位置
【发布时间】:2012-07-26 05:14:46
【问题描述】:

目标:确定一次 GPS 位置,然后将纬度/经度放入两个单独的 EditText 框中以显示给用户。

问题:我已经测试了我的方法,它在模拟器中运行良好,我向它发送 GPS 坐标,它运行良好且花花公子。我在两个单独的设备(v2.1 手机、v4.0 ICS 平板电脑)上尝试了它,并且 GPS 图标出现在通知中(一切都很好),但只是停留在那里试图确定位置。我已经测试了很多次,每次测试都给了足够的时间。 编辑:当我外出时在手机上工作正常,所以我可以把它划掉。平板电脑仍有问题。

我在布里斯班市中心,所以我怀疑这是位置问题 - 此外,通过 GPS 定位我时,Google 地图工作正常。

如果我关闭 GPS 以使其默认返回网络定位,它会很好地工作并为我提供位置。

方法:

(我调用的方法);

public void locateCoordinates(EditText latitudeInput, EditText longitudeInput) {
    // Find coordinates, place them in EditText boxes.

    // Create the locating services if needed
    if(locManager == null) {
        locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    }
    if(locListener != null) {
        // Unregister listener from locManager (in case of double click of Locate button)
        locManager.removeUpdates(locListener);
    }
    locListener = new LocListenerImpl(locManager, latitudeInput, longitudeInput);

    if(locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        locManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 0, 0, locListener);
    } else if(locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        locManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
        Toast.makeText(this,
                "GPS unavailable, trying network-based location instead.",
                Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this,
                "No locating methods enabled", Toast.LENGTH_SHORT).show();
    }

}

(监听器实现类);

public class LocListenerImpl implements LocationListener {

    private LocationManager locManager = null;
    private EditText latitudeInput = null;
    private EditText longitudeInput = null;

    public LocListenerImpl(LocationManager locManager, EditText latitudeInput, EditText longitudeInput) {
        this.latitudeInput = latitudeInput;
        this.longitudeInput = longitudeInput;
        this.locManager = locManager;
    }

    public void onLocationChanged(Location location) {
        if(location != null) {
            latitudeInput.setText(String.valueOf(location.getLatitude()));
            longitudeInput.setText(String.valueOf(location.getLongitude()));
            locManager.removeUpdates(this); // Location found, unregister listener
        }
    }

    public void onProviderDisabled(String provider) {}
    public void onProviderEnabled(String provider) {}
    public void onStatusChanged(String provider, int status, Bundle extras) {}
}

我正在努力查看我做错了什么或可能导致这种情况的原因。任何帮助表示赞赏!

【问题讨论】:

  • 您是在建筑物内还是在某种程度上看不到天空?
  • 我刚走到外面,然后进入湛蓝的天空,试了一下,在我的手机上工作,但在我的平板电脑上不行。我的平板电脑是华硕 Eee Pad Transformer,所以它并不便宜
  • 看看您是否可以使用另一台平板电脑,否则,请尝试在您的平板电脑上下载一些 GPS 应用程序,看看它是否有效。您的产品可能有缺陷。

标签: android gps location latitude-longitude


【解决方案1】:

尝试将 locManager.removeUpdates(this) this 放入其他方法中,例如 onStop() 或同一方法内的 else 循环中

【讨论】:

    【解决方案2】:

    您的代码看起来完全正常,所以您的设备肯定有问题..

    有时需要 10 分钟左右才能正确锁定 GPS。当您没有互联网连接时,它无法从互联网下载有关卫星星历表的粗略数据,因此需要很长时间才能找到卫星。即使您对天空有清晰的视野。

    网络提供商在另一边是即时的,所以请尝试等待更长的时间。或者尝试重新启动您的设备,或者尝试取消选中并选中位置设置中的位置服务复选框(这有助于一些无法获取 GPS 定位),或尝试下载GPS status 应用程序,您可以在其中查看更多关于 GPS 的具体数据(上次定位时间、首次定位时间、aGPS 数据状态、卫星详细信息……)

    【讨论】:

    • 谢谢,我会在我的平板电脑上试用该应用程序并回复您。
    • (我以为我点击了添加评论,但它似乎没有通过,所以又来了:) GPS 状态应用程序在平板电脑上运行良好。允许它下载 aGPS 数据,但它仍然无法帮助我的应用获取位置。很可能与我的设备有关..?
    • GPS 状态应用程序本身会获得 GPS 定位吗?它对其他应用程序根本没有帮助,但是您可以在那里看到有关 GPS 的详细信息。正如我所说,代码看起来不错,我认为这是与设备相关的问题。
    【解决方案3】:

    设备无法获取位置的一个可能原因是,在没有清晰的天空视野的情况下,它们无法连接到卫星。您通过网络(小区三角测量)获取位置,因为它只需要运营商提供商来确定位置。谷歌地图混合使用所有可用的方法(wi-fi、网络、GPS)来定位。在真机上进行测试,我建议你去开阔的天空呼吸一些新鲜空气:)

    【讨论】:

    • 这适用于我的手机,能够非常快速地获取 GPS 位置。平板电脑仍然将图标保留在那里几分钟,并且永远不会获得位置。在我的辩护中,我不久前曾尝试过“走出去”的想法,但是下着大雨,所以也许这就是它当时停止工作的原因。 :)
    猜你喜欢
    • 2016-05-13
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多