Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Localização fixa no mapa

quando rodo o app no celular ele não mostra a localização fixa, que seria um endereço, que inseri. Segue em anexo o código:

public class MapaFragment extends SupportMapFragment implements OnMapReadyCallback {

@Override public void onCreate(Bundle saveInstanceState) { super.onCreate(saveInstanceState);

getMapAsync(this); }

//esse metodo serve para poder mexer no mapa @Override public void onMapReady(GoogleMap googleMap) {

LatLng minhaPosicao = pegaCoordenadaDoEndereco("Rua Vergueiro 3185, Vila Mariana, Sao Paulo"); if(minhaPosicao != null) { CameraUpdate update = CameraUpdateFactory.newLatLngZoom(minhaPosicao, 17); googleMap.moveCamera(update); }

AlunoDAO alunoDAO = new AlunoDAO(getContext()); for (Aluno aluno : alunoDAO.buscaAlunos()){ LatLng coordenada = pegaCoordenadaDoEndereco(aluno.getEndereco()); if(coordenada != null){ MarkerOptions marcador = new MarkerOptions(); marcador.position(coordenada); marcador.title(aluno.getNome()); marcador.snippet(String.valueOf(aluno.getNota())); googleMap.addMarker(marcador);

} } alunoDAO.close();

new Localizador(getContext(),googleMap);

}

private LatLng pegaCoordenadaDoEndereco(String endereco){ // esse try catch serve para verificar a conexao try { Geocoder geocoder = new Geocoder(getContext()); //transforma uma string em latitude e longitude List

resultados = geocoder.getFromLocationName(endereco, 1); if (!resultados.isEmpty()){ LatLng posicao = new LatLng(resultados.get(0).getLatitude(), resultados.get(0).getLongitude()); return posicao; } }catch (IOException e){ e.printStackTrace(); } return null; //caso nao tenha nenhum retorno }

}

7 respostas

Leandro, coloca teu código formatado, é só clicar no inserir código e colar ele lá dentro das ```, assim fica ruim de ler

Leandro, coloca teu código formatado, é só clicar no inserir código e colar ele lá dentro das ```, assim fica ruim de ler


import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

import java.io.IOException;
import java.util.List;

import br.com.cadastroDeAluno.dao.AlunoDAO;
import br.com.cadastroDeAluno.modelo.Aluno;

/**
 * Created by Leandro on 18/10/2016.
 */

public class MapaFragment extends SupportMapFragment implements OnMapReadyCallback {

    @Override
    public void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);

        getMapAsync(this);
    }

    //esse metodo serve para poder mexer no mapa
    @Override
    public void onMapReady(GoogleMap googleMap) {

        LatLng minhaPosicao = pegaCoordenadaDoEndereco("Rua Vergueiro 3185, Vila Mariana, Sao Paulo");
        if(minhaPosicao != null) {
            CameraUpdate update = CameraUpdateFactory.newLatLngZoom(minhaPosicao, 17);
            googleMap.moveCamera(update);
        }

        AlunoDAO alunoDAO = new AlunoDAO(getContext());
        for (Aluno aluno : alunoDAO.buscaAlunos()){
            LatLng coordenada = pegaCoordenadaDoEndereco(aluno.getEndereco());
            if(coordenada != null){
                MarkerOptions marcador = new MarkerOptions();
                marcador.position(coordenada);
                marcador.title(aluno.getNome());
                marcador.snippet(String.valueOf(aluno.getNota()));
                googleMap.addMarker(marcador);

            }
        }
        alunoDAO.close();

        new Localizador(getContext(),googleMap);

    }

    private LatLng pegaCoordenadaDoEndereco(String endereco){
        // esse try catch serve para verificar a conexao
        try {
            Geocoder geocoder = new Geocoder(getContext()); //transforma uma string em latitude e longitude
            List<Address> resultados = geocoder.getFromLocationName(endereco, 1);
            if (!resultados.isEmpty()){
                LatLng posicao = new LatLng(resultados.get(0).getLatitude(), resultados.get(0).getLongitude());
                return posicao;
            }
        }catch (IOException e){
            e.printStackTrace();
        }
        return null; //caso nao tenha nenhum retorno
    }

}

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;

public class MapaActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mapa);

        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction tx = manager.beginTransaction();

        tx.replace(R.id.frame_mapa, new MapaFragment()); //new SupportMapFragment();
        tx.commit();

    }
}

import android.content.Context;
import android.location.Location;
import android.os.Bundle;
import android.support.annotation.Nullable;

import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.LatLng;

import static com.google.android.gms.location.LocationServices.FusedLocationApi;

/**
 * Created by Leandro on 18/10/2016.
 */

//classe responsável por gerenciar a parte do GPS
public class Localizador implements GoogleApiClient.ConnectionCallbacks, LocationListener {

    private final GoogleApiClient client;  //a classe GoogleApiClient serve para fazer a conexão dentro do celular
    private final GoogleMap mapa;

    public Localizador(Context context, GoogleMap mapa){

        client = new GoogleApiClient.Builder(context)
                .addApi(LocationServices.API)  //acessar o LocationsService
                .addConnectionCallbacks(this)
                .build();

        client.connect();

        this.mapa = mapa;

    }

    // metodo em que especificamos o que fazer ao conectar
    @Override
    public void onConnected(@Nullable Bundle bundle) {
        LocationRequest request = new LocationRequest();
        request.setSmallestDisplacement(50); //define o deslocamento minimo
        request.setInterval(1000); //intervalo de envio da posição
        request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);  //com isso teremos uma precisão muito alta

        LocationServices.FusedLocationApi.requestLocationUpdates(client, request, this);

    }

    //metodo em que especificamos o que fazer quando a conexao for suspensa
    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onLocationChanged(Location location) {
        LatLng coordenada = new LatLng(location.getLatitude(), location.getLongitude());
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLng(coordenada);
        mapa.moveCamera(cameraUpdate);
    }
}

a unica coisa que está acontecendo é abrir o mapa. porém, não mostra os pontos fixos e nem os alunos..

solução!

Olá, consegui mostrar a minha localização com o ponto. Agora, não está mostrando os outros alunos cadastrados na minha lista.

como faço isso?

segue em anexo os códigos:

public class Localizador implements GoogleApiClient.ConnectionCallbacks, LocationListener {

    private final GoogleApiClient client;  //a classe GoogleApiClient serve para fazer a conexão dentro do celular
    private final MapaFragment mapaFragment;

    public Localizador (Context context, MapaFragment mapaFragment){

        client = new GoogleApiClient.Builder(context)
                .addApi(LocationServices.API)  //acessar o LocationsService
                .addConnectionCallbacks(this)
                .build();

        client.connect();
        this.mapaFragment = mapaFragment;
    }

    // metodo em que especificamos o que fazer ao conectar
    @Override
    public void onConnected(@Nullable Bundle bundle) {
        LocationRequest request = new LocationRequest();
        request.setSmallestDisplacement(50); //define o deslocamento minimo
        request.setInterval(1000); //intervalo de envio da posição
        request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);  //com isso teremos uma precisão muito alta

        LocationServices.FusedLocationApi.requestLocationUpdates(client, request, this);

    }

    //metodo em que especificamos o que fazer quando a conexao for suspensa
    @Override
    public void onConnectionSuspended(int i) {
    }

    @Override
    public void onLocationChanged(Location location) {
        LatLng coordenada = new LatLng(location.getLatitude(), location.getLongitude());
        mapaFragment.centralizarEm(coordenada);
    }
}
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); //new SupportMapFragment();
        tx.commit();


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    || ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                String[] permissoes = {android.Manifest.permission.ACCESS_COARSE_LOCATION, android.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);
            }
        }
    }
}
public class MapaFragment extends SupportMapFragment implements OnMapReadyCallback {

    private GoogleMap mapa;

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        getMapAsync(this);



    }

    //esse metodo serve para poder mexer no mapa
    @Override
    public void onMapReady(GoogleMap googleMap) {
        this.mapa = googleMap;
        LatLng minhaPosicao = new LatLng(-7.91820779, -34.82892931);
        //LatLng minhaPosicao = pegaCoordenadaDoEndereco("Rua Honorato Fernandes da Paz, Pau Amarelo, Paulista - PE");
        //LatLng minhaPosicao = new LatLng(-7.91820779, -34.82892931);
        if(minhaPosicao != null) {
            centralizarEm(minhaPosicao);
            MarkerOptions marcador = new MarkerOptions();
            marcador.title("Minha Posição");
            marcador.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
            marcador.position(minhaPosicao);
            mapa.addMarker(marcador);
        }

        //adiciona o local do aluno
        AlunoDAO alunoDAO = new AlunoDAO(getContext());
        for (Aluno aluno : alunoDAO.buscaAlunos()){
            LatLng coordenada = pegaCoordenadaDoEndereco(aluno.getEndereco());
            if(coordenada != null){
                MarkerOptions marcador = new MarkerOptions();
                marcador.position(coordenada);
                marcador.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
                marcador.title(aluno.getNome());
                marcador.snippet(String.valueOf(aluno.getNota()));
                mapa.addMarker(marcador);
            }
        }
        alunoDAO.close();

        new Localizador(getContext(), MapaFragment.this);
    }

    private LatLng pegaCoordenadaDoEndereco(String endereco){
        // esse try catch serve para verificar a conexao
        try {
            Geocoder geocoder = new Geocoder(getContext()); //transforma uma string em latitude e longitude
            List<Address> resultados = geocoder.getFromLocationName(endereco, 1); //https://developer.android.com/reference/android/location/Geocoder.html

            if (!resultados.isEmpty()){
                LatLng posicao = new LatLng(resultados.get(0).getLatitude(), resultados.get(0).getLongitude());
                return posicao;
            }
        }catch (IOException e){
            e.printStackTrace();
        }
        return null; //caso nao tenha nenhum retorno
    }

    public void centralizarEm(LatLng coordenada) {
        if(mapa != null){
            CameraUpdate update = CameraUpdateFactory.newLatLngZoom(coordenada, 17);
            mapa.moveCamera(update);
        }
    }
}