【问题标题】:Not getting Lat and Long through either GPS or Network无法通过 GPS 或网络获取经纬度
【发布时间】:2013-04-08 13:44:00
【问题描述】:

我正在尝试使用 GPS providerNetwork provider 获取位置,但我没有从 GPS网络 获取位置。
这是我几天前运行良好但现在无法正常运行的代码。
我不明白我错在哪里,因为所有权限都已添加到 AndroidManifest.xml
这是有助于您理解的代码。

public class SearchDishoom extends Header implements LocationListener {  
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.searchdish);        




        manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000000, 100, this);

            locationListenerNetwork = new LocationListener() {
                public void onLocationChanged(Location location) {}
                public void onProviderDisabled(String provider) {}
                public void onProviderEnabled(String provider) {}
                public void onStatusChanged(String provider, int status, Bundle extras) {}
            };              

        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            // if gps provider is not enable then popup alertbox
            buildAlertMessageNoGps();
        } else {        
            // if gps is one then start searching
            locationListenerGps = new LocationListener() {
                public void onLocationChanged(Location location) {}
                public void onProviderDisabled(String provider) {}
                public void onProviderEnabled(String provider) {}
                public void onStatusChanged(String provider, int status, Bundle extras) {}
            };
            manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000000,100, locationListenerGps);
        }
    }

    /*
     * Get location (lat-long) from sharedpreference to further use
     */
    prefLocation = getSharedPreferences("myLocation", MODE_WORLD_READABLE);
    String userLocationLat1 = prefLocation.getString("Lat", String.valueOf(0));
    String userLocationlong1 = prefLocation.getString("Long", String.valueOf(0));
    String address = prefLocation.getString("Address", "Location not found not found");
    userLocationLat = Double.parseDouble(userLocationLat1);
    userLocationlong = Double.parseDouble(userLocationlong1);

    // set lat-long value in getset class for use of another activity
    gs = new GetSet();
    gs.setLatitude(userLocationLat);
    gs.setLangitude(userLocationlong);      
    if (userLocationLat == 0 && userLocationlong == 0 && address.equals("")) {
        /*
         *  if lat-long is 0 or null then start searching using
         *  GPS Provider or Network Provider
         */

        manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            buildAlertMessageNoGps();
        } else {
            manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000000,100, locationListenerGps);             
        }
    } else {
        // set lat-long value in getset class for use of another activity
        gs.setLatitude(userLocationLat);
        gs.setLangitude(userLocationlong);
        setLocationName(userLocationLat, userLocationlong);
    }       
}   

这里是重写 onLocationchanged():

@Override
public void onLocationChanged(Location location) {
    userLocationLat =location.getLatitude();
    userLocationlong =location.getLongitude();
    prefLocation = getSharedPreferences("myLocation", MODE_WORLD_READABLE);
    SharedPreferences.Editor prefsEditor = prefLocation.edit();
    prefsEditor.putString("Lat", String.valueOf(userLocationLat));
    prefsEditor.putString("Long", String.valueOf(userLocationlong));

    gs.setLatitude(userLocationLat);
    gs.setLangitude(userLocationlong);
    List<Address> addresses;
    try {
        addresses = new Geocoder(SearchDishoom.this, Locale.getDefault())
                .getFromLocation(userLocationLat, userLocationlong, 1);
        Address obj = addresses.get(0);
        add = obj.getAddressLine(0);
        city = obj.getLocality();
        addressString = add + "," + city;
        gs.setCurrentAddressString(addressString);
        prefsEditor.putString("Address", addressString);
        prefsEditor.commit();
        tvLocation.setText(add + "," + city);           
    } catch (IOException e) {
        showToast("Unable to find location");
    }
}   

即使我没有使用Geocoder 获取位置,如果我输入城市名称,它也会显示“无法找到位置”。
这是诀窍,GeoCoder 正在使用模拟器但无法使用手机(我尝试了 2 个不同的手机)。

我的项目是在 API 17 中构建的,没有任何 logcat 错误。
请给我任何提示或参考。

【问题讨论】:

    标签: android gps location locationlistener


    【解决方案1】:

    也许您应该检查“位置访问”设置并允许访问您的位置?..

    【讨论】:

      【解决方案2】:

      虽然我无法立即判断您的代码有什么问题,但您应该考虑使用位置库并让其他人完成繁重的工作。见:https://code.google.com/p/little-fluffy-location-library/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多