Принудительно закрывайте, когда получите текущее местоположение пользователя и запутались, как дать разрешение на доступное местоположение в Android 6

Когда я запускаю свое приложение, всегда происходит принудительное закрытие при получении текущего местоположения пользователя, logcat всегда говорит, что Location getlatitude null, и на самом деле я все еще не понимаю, как дать разрешение на доступ к местоположению на Android 6, как показать диалоговое окно, в котором пользователь может дать разрешение на свое приложение., можете ли вы показать мне правильный путь, как сделать это на основе моего кода ниже? Кстати, я новичок в программировании Android. Это мой фрагмент кода, который выдает ошибку и закрывает приложение.

    @Override
    public void onMapReady(GoogleMap googleMap) {

        gMap = googleMap;
        getMarkers();
        center = new LatLng(-8.098902, 112.166795);
        cameraPosition = new CameraPosition.Builder().target(center).zoom(10).build();
     googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {

            if (ContextCompat.checkSelfPermission(this,     Manifest.permission.ACCESS_FINE_LOCATION)==
                    PackageManager.PERMISSION_GRANTED) {

                gMap.setMyLocationEnabled(true);

                }
        }else{


            gMap.setMyLocationEnabled(true);



    }

        //used

        Location locationCt;
        LocationManager locationManagerCt =   (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        locationCt =  locationManagerCt.getLastKnownLocation(LocationManager.GPS_PROVIDER);

       LatLng coordinate = new   LatLng(locationCt.getLatitude(),locationCt.getLongitude());
    cameraPosition = new CameraPosition.Builder().target(coordinate).zoom(15).build();
    googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
    Marker myLocationMarker = gMap.addMarker(new MarkerOptions()
                    .icon(BitmapDescriptorFactory
                    .fromResource(R.drawable.icon))
                    .position(coordinate));
    googleMap.getUiSettings().setZoomControlsEnabled(true);


        getMarkers();

    }

1 ответ

Добавьте эту зависимость в ваш gradle:-

dependencies {
    implementation "com.yudiz:vinay-utillib:1.0.5"
}

Добавьте это разрешение в свой manifest.xml

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

Добавьте столько кода в свой onCreate или где вы хотите выполнить.

private LocationManager lm;
private GoogleMap googleMap;
private float lat, lon;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lm = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
            if(lm.isProviderEnabled(LocationManager.GPS_PROVIDER))
            {
                UtilLib.getPermission(getContext(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}).enqueue(new PermissionResultCallback() {
                    @Override
                    public void onComplete(PermissionResponse permissionResponse) {
                        if (permissionResponse.isAllGranted()) {
                            //Add your code here.
                            UtilLib.getLocationManager(getContext()).getLocation(new OnLocationPickListener() {
                                @Override
                                public void getLastLocation(Location location) {
                                    if (location != null) {
                                        lat = (float) location.getLatitude();
                                        lon = (float) location.getLongitude();
                                        loadMap();
                                    }
                                }

                                @Override
                                public void onLocationChanged(Location location) {
                                }

                                @Override
                                public void onError(String s) {

                                }
                            });
                        }
                    }
                });
            }

        private void loadMap() {
            try {
                if (googleMap == null) {
                    int chkGooglePlayServices = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity());
                    if (chkGooglePlayServices != ConnectionResult.SUCCESS) {
                        GooglePlayServicesUtil.getErrorDialog(chkGooglePlayServices, getActivity(), 1122).show();
                    } else {
    //                    mMap = mMapFragment.getMap();
                        mMapFragment.getMapAsync(new OnMapReadyCallback() {
                            @Override
                            public void onMapReady(GoogleMap mMap) {
                                googleMap = mMap;
                                setUpMap(mMap);
                            }
                        });
                    }
                } else
                    setUpMap(googleMap);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        private void setUpMap(GoogleMap mMap) {
            CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(new LatLng(lat, lon))      // Sets the center of the map to Mountain View
                    .zoom(16)                   // Sets the zoom
                    .build();
            mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

            BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.ic_pin_loaction_map);
            MarkerOptions markerOptions = new MarkerOptions().position(new LatLng(lat, lon))
                    .icon(icon)
                    .title("")
                    .snippet("");
            googleMap.addMarker(markerOptions);
        }
Другие вопросы по тегам