Pessoal, boa tarde.
Estou atribuindo a permissão de acesso à localização em minha MapaActivity.Java. Acontece que se demoro a conceder permissão o app crascha. Minha dúvida é bem semelhante a esta "https://cursos.alura.com.br/forum/topico-crash-ao-abrir-o-mapa-35273". Contudo, o tópico acima foi fechado sem que seja dado o exemplo de colocar esta permissão na ListaAlunos.Activity. Como fazer lá?
Seguem meus códigos para melhor contextualização:
MapaActivity.java
public class MapaActivity extends AppCompatActivity {
private static final int REQUEST_PERMISSOES = 1;
private MapaFragment mapaFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mapa);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction tx = manager.beginTransaction();
mapaFragment = new MapaFragment();
tx.replace(R.id.frame_mapa, mapaFragment);
tx.commit();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
String[] permissoes = {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION};
requestPermissions(permissoes, REQUEST_PERMISSOES);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_PERMISSOES) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
new Localizador(this, mapaFragment);
}
}
}
}
MapaFragment.java
public class MapaFragment extends SupportMapFragment implements OnMapReadyCallback {
private GoogleMap mapa;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
getMapAsync(this); //Prepara uma instância do Google Maps para customização.
}
@Override
public void onMapReady(GoogleMap googleMap) {
this.mapa = googleMap;
LatLng posicao = obterCoordenadas("Rua São Paulo 2566, Centro, Belo Horizonte");
if(posicao != null){
centralizaEm(posicao);
}
AlunoDAO alunoDAO = new AlunoDAO(getContext()); //getContext() é chamado ao invés do "this" neste caso pois estamos em um fragment.
for (Aluno aluno : alunoDAO.getAlunos()){
LatLng coordenada = obterCoordenadas(aluno.getEndereco());
if(coordenada != null){
MarkerOptions marcador = new MarkerOptions().position(coordenada).title(aluno.getNome()).snippet(aluno.getEndereco());
marcador.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
mapa.addMarker(marcador);
}
}
alunoDAO.close();
new Localizador(getContext(), this);
}
private LatLng obterCoordenadas(String endereco){
try {
Geocoder geocoder = new Geocoder(getContext());
List<Address> resultados = geocoder.getFromLocationName(endereco, 1);
if (!resultados.isEmpty()){
LatLng coordenadas = new LatLng(resultados.get(0).getLatitude(), resultados.get(0).getLongitude());
return coordenadas;
}
} catch (IOException e) {
e.printStackTrace();