- Posts no fórum: 1
05/03/2024, 17:47:54 via Web
05/03/2024 17:47:54 via Web
Olá Pessoal, sou novato e preciso de ajuda....comecei um projeto no AS com Map API e estou apanhando, mas aprendendo, contudo cheguei em um ponto que nao consigo avançar...
O AS reclama que é necessário uma constante requerida "constant expression required:72"
Mas a constante está no arquivo context_menu.xml no res.
Segue o código, se puderem ajudar
import android.Manifest;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
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.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private FusedLocationProviderClient fusedLocationClient;
private GoogleMap googleMap;
private List marcadores = new ArrayList<>();
private Marker marcadorSelecionado;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Inicializar o FusedLocationProviderClient
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
// Verificar e solicitar permissões
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
// Permissão já concedida, iniciar inicialização do mapa
inicializarMapa();
} else {
// Solicitar a permissão de localização
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
}
private void inicializarMapa() {
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
if (mapFragment != null) {
mapFragment.getMapAsync(this);
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete_marker:
// Chama o método para apagar o marcador
apagarMarcador(marcadorSelecionado);
return true;
default:
return super.onContextItemSelected(item);
}
}
private void exibirDialogoInformacoesMarcador() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Informações do Marcador");
EditText editText = new EditText(this);
builder.setView(editText);
builder.setPositiveButton("Salvar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (!marcadores.isEmpty()) {
Marker ultimoMarcador = marcadores.get(marcadores.size() - 1);
String informacoes = editText.getText().toString();
ultimoMarcador.setSnippet(informacoes);
}
dialog.dismiss();
}
});
builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.show();
}
private void adicionarMarcador(LatLng latLng) {
Marker marcador = googleMap.addMarker(new MarkerOptions().position(latLng).title("Novo Marcador"));
marcadores.add(marcador);
}
private void apagarMarcador(Marker marcador) {
if (marcador != null) {
marcador.remove();
marcadores.remove(marcador);
}
}
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
this.googleMap = googleMap;
googleMap.getUiSettings().setZoomControlsEnabled(true);
// Adicionar ouvinte de clique no mapa
googleMap.setOnMapClickListener(latLng -> {
// Adicionar marcador
adicionarMarcador(latLng);
// Exibir diálogo para inserir informações do marcador
exibirDialogoInformacoesMarcador();
});
googleMap.setOnMarkerClickListener(marker -> {
// Registra o marcador para o menu de contexto
registerForContextMenu(marker);
// Exibe o menu de contexto
openContextMenu(findViewById(R.id.map)); // Substitua R.id.map pelo ID correto do seu mapa
// Retorna true para indicar que o clique foi tratado
return true;
});
// Obter a última localização conhecida
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
fusedLocationClient.getLastLocation().addOnSuccessListener(this, location -> {
if (location != null) {
// Criar LatLng com as coordenadas da última localização conhecida
LatLng usuarioCoordenadas = new LatLng(location.getLatitude(), location.getLongitude());
// Mover a câmera para a posição do usuário
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(usuarioCoordenadas, 14f));
// Adicionar um marcador na posição do usuário
googleMap.addMarker(new MarkerOptions().position(usuarioCoordenadas).title("Sua Posição"));
}
googleMap.setOnMarkerClickListener(marker -> {
// Registra o marcador para o menu de contexto
registerForContextMenu(marker);
// Exibe o menu de contexto
openContextMenu(marker);
// Retorna true para indicar que o clique foi tratado
return true;
});
});
}
private void openContextMenu(Marker marker) {
// Implemente conforme necessário
}
private void registerForContextMenu(Marker marker) {
// Implemente conforme necessário
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permissão concedida, iniciar inicialização do mapa
inicializarMapa();
}
}
}
}
Segue o codigo do menu do Res
xmlns:android="h t t p ://schemas.android.com/apk/res/android">
android:id="@+id/action_delete_marker"
android:title="Apagar Marcador" />
Conteúdo editorial recomendado
Com o seu consentimento, o conteúdo externo é carregado aqui.
Ao clicar no botão acima, concorda que o conteúdo externo poderá ser-lhe exibido. Os dados pessoais podem ser transmitidos a fornecedores terceiros no processo. Pode encontrar mais informações sobre isto no nosso Política de Privacidade.