如何在Android中获取当前位置的经纬度

时间:2014-11-22 06:24:58

标签: android google-maps

我正在尝试使用以下内容获取当前位置的纬度和经度:

 GoogleMap map;
 map = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
 map.setMyLocationEnabled(true);

 lat = map.getMyLocation().getLatitude();
 lng = map.getMyLocation().getLongitude();

由于某种原因,最后两行导致应用因NullPointerException而崩溃。我做错了什么?

对我来说最大的问题是map.setMyLocationEnabled(true);确实设置了我当前的位置。

感谢有人看到这个

5 个答案:

答案 0 :(得分:2)

试试这个:

public Double Lat = null;
public Double Lng = null;
String LatLng = null;
private LocationClient mLocationClient;
你的onCreateView()中的

添加了这个

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.yourLayout, container, false);
        mLocationClient = new LocationClient(getActivity(), this, this);

rootView.findViewById(R.id.ATestButton).setOnClickListener(
        // Get the current location
                Location currentLocation = mLocationClient.getLastLocation();
                Lat = currentLocation.getLatitude();
                Lng = currentLocation.getLongitude();
                LatLng = Double.toString(Lat) + "," + Double.toString(Lng);
                Toast.makeText(getActivity(), LatLng, 0).show();
                });

查看我的完整github以获取一个有效的示例。

//我会测试按钮,因此可以单击它以查看是否返回任何内容。

答案 1 :(得分:0)

map.getMyLocation()为空 你应该检查那个条件

答案 2 :(得分:0)

您的应用正在崩溃,因为

map.getMyLocation() 
如果没有可用的位置数据,

返回null。所以你可以像这样使用!= null检查

if( map.getMyLocation() !=null){
  lat = map.getMyLocation().getLatitude();
  lng = map.getMyLocation().getLongitude();
}

此方法也已弃用,因此您应该使用FusedLocationProviderApi。请参阅官方文档here

Here是FusedLocation Api的一个非常好的实现,你也可以看一下。

答案 3 :(得分:0)

    public void turnGPSOn() {

        String provider = Settings.Secure.getString(getContentResolver(),
                Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        if (!provider.contains("gps")) {
            final Intent poke = new Intent();
            poke.setClassName("com.android.settings",
                    "com.android.settings.widget.SettingsAppWidgetProvider");
            poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
            poke.setData(Uri.parse("3"));
            sendBroadcast(poke);
        }
    }


void getLocation()
{
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                    if (!locManager
                            .isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                        turnGPSOn();
                    }

                    try {
                        locManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER, 1000, 10,
                                locationListener);

                    } catch (Exception ex) {

                    }

                }


}
private final LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            updateWithNewLocation(location);
        }

        public void onProviderDisabled(String provider) {
            updateWithNewLocation(null);
        }

        public void onProviderEnabled(String provider) {
        }

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

private void updateWithNewLocation(Location location) {
        String latLongString = "";
        try {
            if (location != null) {

                Log.e("test", "gps is on send");
                latitude = Double.toString(location.getLatitude());
                longitude = Double.toString(location.getLongitude());


                Log.e("test", "location send");


                latLongString = "Lat:" + latitude + "\nLong:" + longitude;
                Log.w("CurrentLocLatLong", latLongString);
            } else {
                latLongString = "No location found";
            }
        } catch (Exception e) {
        }

    }

答案 4 :(得分:0)

我找到了解决方案。虽然我仍然不确定为什么其他方法给我一个空指针,但下面的工作正常并且符合我的需要。

 LocationManager locman = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
 Location location = locman .getLastKnownLocation(LocationManager.GPS_PROVIDER);
 double lng = location.getLongitude();
 double lat = location.getLatitude();