获取静态上下文中的当前位置

时间:2015-04-14 18:38:02

标签: java android

我刚开始学习android。 我有一个导航抽屉活动。我正试图获取我当前的位置。这是我的代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View rootView=inflater.inflate(R.layout.fragment_main, container, false);
                int sectionNumber = getArguments().getInt(ARG_SECTION_NUMBER);
                switch (sectionNumber) {
                    case 1:
                        rootView = inflater.inflate(R.layout.fragment_monitor, container, false);
                        TextView lat = (TextView) rootView.findViewById(R.id.lat);
                        LocationManager locationmanager;
                        String context=Context.LOCATION_SERVICE;
                        locationmanager=(LocationManager) getSystemService(context);
                        String provider=LocationManager.NETWORK_PROVIDER;
                        Location location= locationmanager.getLastKnownLocation(provider);

                        double lat = location.getLatitude();
                        double lon = location.getLongitude();

                        break;
                    case 2:
                        rootView = inflater.inflate(R.layout.activity_mapa, container, false);
                        break;
                    case 3:
                        break;
                    default:
                        rootView = inflater.inflate(R.layout.fragment_main, container, false);
                }
            return rootView;
        }

getSystemService()方法有错误。它表示无法从静态上下文中引用非静态方法。

任何人都知道如何解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:3)

getSystemService,是Context的一种方法。

locationmanager=(LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);

请注意,如果到目前为止尚未获取位置,getLastKnownLocation将返回null。所以你可能想要检查一个空对象

答案 1 :(得分:2)

试试这个:

LocationManager locationManager = (LocationManager) getActivity()
            .getSystemService(Context.LOCATION_SERVICE);
            `

请注意,如果最后一个已知位置为null,则当前代码将给出空指针异常,以便处理我建议您创建if语句来处理该情况

    if(location!=null){
//your code
    }else{
GPSTracker d=new GPSTracker(getActivity());
            //to get lat and lng use d.getLatitude and d.getLongitude
}

GPSTracker类:​​

    public class GPSTracker implements LocationListener {
private final Context mContext;
boolean isGPSEnabled = false;
boolean isNetworkEnabled = false;
boolean canGetLocation = false;
Location location = null; 
double latitude; 
double longitude; 

private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

protected LocationManager locationManager;
private Location m_Location;
 public GPSTracker(Context context) {
    this.mContext = context;
    m_Location = getLocation();
    System.out.println("location Latitude:"+m_Location.getLatitude());
    System.out.println("location Longitude:"+m_Location.getLongitude());
    System.out.println("getLocation():"+getLocation());
    }

public Location getLocation() {
    try {
        locationManager = (LocationManager) mContext
                .getSystemService(Context.LOCATION_SERVICE);

        isGPSEnabled = locationManager
                .isProviderEnabled(LocationManager.GPS_PROVIDER);

        isNetworkEnabled = locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) {
            // no network provider is enabled
        } 
        else {
            this.canGetLocation = true;
            if (isNetworkEnabled) {
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("Network", "Network Enabled");
                if (locationManager != null) {
                    location = locationManager
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }
            if (isGPSEnabled) {
                if (location == null) {
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("GPS", "GPS Enabled");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return location;
}

public void stopUsingGPS() {
    if (locationManager != null) {
        locationManager.removeUpdates(GPSTracker.this);
    }
}

public double getLatitude() {
    if (location != null) {
        latitude = location.getLatitude();
    }

    return latitude;
}

public double getLongitude() {
    if (location != null) {
        longitude = location.getLongitude();
    }

    return longitude;
}

public boolean canGetLocation() {
    return this.canGetLocation;
}

@Override
public void onLocationChanged(Location arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    // TODO Auto-generated method stub

}


}

希望这会对你有所帮助。