Google地图未显示我当前的位置

时间:2017-09-03 10:47:49

标签: android google-maps

我在Android工作室编写代码以在Google地图片段中显示我的位置,但它没有这样做。正在显示地图,但我想要的坐标没有被标记。代码如下:

public class SEMapTab extends Fragment implements OnMapReadyCallback {

private View rootView;
private MapFragment mMapFrag;
private GoogleMap mMap;
private LocationManager locationManager;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    if (rootView != null) {
        ViewGroup parent = (ViewGroup) rootView.getParent();
        if (parent != null)
            parent.removeView(rootView);
    }
    try {
        rootView = inflater.inflate(R.layout.single_entity_map, container, false);
    } catch (InflateException e) {

    }


    return rootView;
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    if (mMapFrag == null) {
        super.onViewCreated(view, savedInstanceState);
        FragmentManager fragment = getActivity().getFragmentManager();

        mMapFrag = (MapFragment) fragment.findFragmentById(R.id.map);


        mMapFrag.getMapAsync(this);


    }

    locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
    if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }

    //if network provider is enabled
    if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
    {
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {

                double Latitude= location.getLatitude();    //Get latitude

                double Longitude = location.getLongitude();     //Get longitude

                LatLng latLng= new LatLng(Latitude, Longitude);

                //Map latitude and longitude
                mMap.addCircle(new CircleOptions().center(latLng).fillColor(Color.BLUE).radius(10));

                //Zoom in to current location
                mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,18));


            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {

            }

            @Override
            public void onProviderEnabled(String provider) {

            }

            @Override
            public void onProviderDisabled(String provider) {

            }
        });

    }
    //else if gps provider is enabled
    else if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
    {
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {

                double Latitude= location.getLatitude();    //Get latitude

                double Longitude = location.getLongitude();     //Get longitude

                LatLng latLng= new LatLng(Latitude, Longitude);

                //Map latitude and longitude
                mMap.addCircle(new CircleOptions().center(latLng).fillColor(Color.BLUE).radius(10));

                //Zoom in to current location
                mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,18));



            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {

            }

            @Override
            public void onProviderEnabled(String provider) {

            }

            @Override
            public void onProviderDisabled(String provider) {

            }
        });
    }



}


@Override
public void onMapReady(GoogleMap googleMap)
{

}
}

我还在AndroidManifest.xml文件中包含了必要的权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

地图片段正在打开,但我的当前位置没有标记圆圈。或者,如果我在OnMapReady函数中硬编码GPS位置,那么这是标记的并且工作正常。我请你帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

onMapReady添加googleMap.setMyLocationEnabled(true)。无需手动处理&#34;位置经理和这些提供者。只需确保用户在调用此应用程序之前已授予应用程序访问其位置的权限,否则应用程序将崩溃。