使用片段我想在Android中获取当前位置

时间:2017-02-21 12:43:01

标签: java android-studio

public class MapViewFragment  extends Fragment implements LocationListener

    public MapViewFragment() {
        // Required empty public constructor
    }


    public static MapViewFragment newInstance(String tabSelected) {
        MapViewFragment fragment = new MapViewFragment();
        Bundle args = new Bundle();
        args.putString(Constants.FRAG_D, tabSelected);
        fragment.setArguments(args);

        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
        }
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MapsInitializer.initialize(getActivity());

        if (mapView != null) {
            mapView.onCreate(savedInstanceState);
        }
        initializeMap();
    }

    private void initializeMap() {
        if (googleMap == null && mapsSupported) {
            mapView = (MapView) getActivity().findViewById(R.id.map);
            googleMap = mapView.getMap();
            //setup markers etc...
        }
    }





    @Override
    public void onResume() {
        super.onResume();
        Marker m1,m2,m3;
         m1 = googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(38.609556, -1.139637))
                .anchor(0.5f, 0.5f)
                .title("Title1")
                .snippet("Snippet1"));


         m2 = googleMap.addMarker(new MarkerOptions()
                .position(new LatLng(40.4272414,-3.7020037))
                .anchor(0.5f, 0.5f)
                .title("Title2")
                .snippet("Snippet2"));

        mapView.onResume();
        initializeMap();
    }

    @Override
    public void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mapView.onLowMemory();
    }

    @Override
    public void onLocationChanged(Location location) {

    }

我的代码如上所示。我可以在Android工作室中手动设置两个标记,但我想要一个标记从当前位置获取位置。 任何帮助,或任何想法?

1 个答案:

答案 0 :(得分:1)

首先要尝试这个:

googleMap.setMyLocationEnabled(true);

这将显示页面右上角的箭头,如果已启用,将显示您的位置。 此按钮还将触发google api的 onMyLocationButtonClick()功能。

然后获取当前位置信息:

    Criteria criteria = new Criteria();
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    String provider = locationManager.getBestProvider(criteria, true);
    Location location = locationManager.getLastKnownLocation(provider);
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
    myPosition = new LatLng(latitude, longitude);

最后在上面添加标记:

googleMap.addMarker(new MarkerOptions().position(myPosition).title("Marker"));

有关例外和进一步信息:https://developers.google.com/maps/documentation/android-api/location