On Map Fine Location Permission Denied Go To Custom Location

落花浮王杯 提交于 2019-12-11 14:52:49

问题


I am making an app that uses maps API. What I want is to make a permission popup. When the user clicks allow it should zoom in to his current location. Now I want to decide what happens if he doesn't want to allow this. If he denies this permission map should zoom to the custom location, but in never goes there and it doesn't show the toast.

My maps fragment looks like this:

REQUESTING PERMISSION HERE:

 mapView.getMapAsync(new OnMapReadyCallback() {
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)) {

            } else {
                ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_LOCATION_REQUEST_CODE);
            }
            return;
        }

        mMap.setMyLocationEnabled(true);
        LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();

        //Disable Map Toolbar:
        mMap.getUiSettings().setMapToolbarEnabled(false);

        // Get the name of the best provider and current location
        String provider = null;
        if (locationManager != null) {
            provider = locationManager.getBestProvider(criteria, true);
        }
        // Get current location
        Location myLocation = null;
        if (locationManager != null) {
            myLocation = locationManager.getLastKnownLocation(provider);
        }

        // Set default latitude and longitude to Greenwich
        double latitude = 51.4825766;
        double longitude = -0.0076589;

        // Get latitude and longitude of the current location and a LatLng object
        if (myLocation != null) {
            latitude = myLocation.getLatitude();
            longitude = myLocation.getLongitude();
        }

        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(latitude, longitude)).zoom(14).build();
        mMap.animateCamera(CameraUpdateFactory
                .newCameraPosition(cameraPosition));

}

CATCHING RESULTS HERE:

    @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == MY_LOCATION_REQUEST_CODE) {
        if (permissions.length == 1 &&
                permissions[0] == Manifest.permission.ACCESS_FINE_LOCATION &&
                grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            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;
            }
            mMap.setMyLocationEnabled(true);
        } else {
            // Permission was denied. Display an error message.
            double latitude = 51.4825766;
            double longitude = -0.0076589;
            Toast.makeText(getContext(), "Permission denied", Toast.LENGTH_SHORT).show();          CameraPosition cameraPosition = new CameraPosition.Builder()
                            .target(new LatLng(latitude, longitude)).zoom(14).build();
                    mMap.animateCamera(CameraUpdateFactory
                            .newCameraPosition(cameraPosition));
        }
    }
}

回答1:


I put the permission in the parent activity in order for it to work.



来源:https://stackoverflow.com/questions/47885296/on-map-fine-location-permission-denied-go-to-custom-location

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!