Android GPS定位,无法提供位置

时间:2012-07-26 05:14:47

标签: android gps location latitude-longitude

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

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

我在布里斯班的中间,所以我怀疑这是一个位置问题 - 此外,谷歌地图在通过GPS定位我时效果很好。

如果我关闭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) {}
}

我正在努力看到我做错了什么或者可能导致什么。任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您的代码看起来完全正常,因此您的设备一定存在问题..

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

网络提供商是即时的,所以只是尝试等待更长时间。或者尝试重新启动设备,或尝试取消选中并检查位置设置中的位置服务复选框(这有助于某些人无法使用得到GPS修复),或尝试下载GPS status应用程序,在那里你可以看到一些关于GPS的更具体的数据(上次修复,首次修复的时间,aGPS数据的状态,卫星细节......)

答案 2 :(得分:0)

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