Problemas com declaração de constante

  • Respostas:0
Rodrigo Guerra
  • Posts no fórum: 1

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" />

Seja o primeiro a responder