Принудительно закрывайте, когда получите текущее местоположение пользователя и запутались, как дать разрешение на доступное местоположение в 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);
}