Когда я запускаю свою активность в Картах и принимаю разрешения на местоположение в первый раз, если я нажимаю на кнопку «Мое местоположение», ничего не происходит.
Однако, если я закрываю действие и возвращаюсь к нему,после этого кнопка работает нормально!Итак, проблема возникает только после того, как я принимаю разрешения для первого запуска активности.
Если я воссоздаю активность после принятия разрешений, проблема решается, но мне не нравится это решение, плюс я хочупонять причину проблемы.
Что вызывает эту ошибку?
public class MapsActivity extends FragmentActivity implements` OnMapReadyCallback {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
GoogleMapOptions options = new GoogleMapOptions();
options.mapType(GoogleMap.MAP_TYPE_NORMAL);
mapFragment.newInstance(options);
mapFragment.getMapAsync(this);
}
#
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
requestLocationPermissions();
mMap.getUiSettings().setMapToolbarEnabled(true);
}
#
public void requestLocationPermissions() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED ||
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
15);
}else{
mMap.setMyLocationEnabled(true);//needs location permission
mMap.getUiSettings().setMyLocationButtonEnabled(true);
}
}
@SuppressLint("MissingPermission")
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 15) {
if (grantResults.length == 0) {
requestLocationPermissions();
} else {
if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED ) {
Toast.makeText(this, "You have to accept all Permissions!", Toast.LENGTH_SHORT).show();
Log.e("Permission refused","Permission refused");
requestLocationPermissions();
} else {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED ) {
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);
}
}
}
}
}