Implementate le configurazioni iniziali in `AndroidManifest.xml` e `Nuvolari.csproj`. Creata la classe `MainActivity` per gestire la mappa con `SearchView` per la ricerca di luoghi. Definiti i layout in `activity_main.axml` e `activity_main.xml`. Aggiunti file di risorse per le icone dell'app e creato `ic_launcher_background.xml` per il colore di sfondo. Definiti i testi dell'app in `strings.xml`.
91 lines
3.0 KiB
C#
91 lines
3.0 KiB
C#
using Android.App;
|
|
using Android.OS;
|
|
using Android.Gms.Maps;
|
|
using Android.Gms.Maps.Model;
|
|
using Android.Widget;
|
|
using Android.Locations;
|
|
using System.Threading.Tasks;
|
|
using System.Linq;
|
|
|
|
/*
|
|
* IDEE:
|
|
* Fare una versione molto base dell'app senza troppe funzionalità, giusto per mostrare una mappa.
|
|
* Fare poi una versione con più funzionalità, ma con pubblicità per guadagnare qualcosa da quello.
|
|
*/
|
|
|
|
namespace Nuvolari
|
|
{
|
|
[Activity(Label = "@string/app_name", MainLauncher = true)]
|
|
public class MainActivity : Activity, IOnMapReadyCallback
|
|
{
|
|
private MapFragment? mapFragment;
|
|
private GoogleMap? googleMap;
|
|
private SearchView? searchView;
|
|
|
|
protected override void OnCreate(Bundle? savedInstanceState)
|
|
{
|
|
base.OnCreate(savedInstanceState);
|
|
|
|
// Usa il layout personalizzato con SearchView e MapFragment
|
|
SetContentView(Resource.Layout.activity_main);
|
|
|
|
// Ottieni riferimenti ai componenti UI
|
|
searchView = FindViewById<SearchView>(Resource.Id.searchView);
|
|
mapFragment = FragmentManager.FindFragmentById(Resource.Id.map) as MapFragment;
|
|
|
|
mapFragment?.GetMapAsync(this);
|
|
|
|
// Gestione ricerca
|
|
if (searchView != null)
|
|
{
|
|
searchView.QueryTextSubmit += async (s, e) =>
|
|
{
|
|
var query = e?.Query ?? string.Empty;
|
|
await SearchAndMoveToLocationAsync(query);
|
|
searchView.ClearFocus();
|
|
};
|
|
}
|
|
}
|
|
|
|
public void OnMapReady(GoogleMap map)
|
|
{
|
|
googleMap = map;
|
|
// Imposta solo la navigazione base (scroll/zoom)
|
|
googleMap.UiSettings.CompassEnabled = false;
|
|
googleMap.UiSettings.MapToolbarEnabled = false;
|
|
googleMap.UiSettings.MyLocationButtonEnabled = false;
|
|
|
|
// Posizione iniziale: Milano
|
|
var position = new LatLng(45.4642, 9.19);
|
|
googleMap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(position, 10));
|
|
}
|
|
|
|
private async Task SearchAndMoveToLocationAsync(string query)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(query) || googleMap == null)
|
|
return;
|
|
|
|
var geocoder = new Geocoder(this);
|
|
#pragma warning disable CA1422 // Suppress warning for obsolete API on Android 33+
|
|
var addresses = await Task.Run(() => geocoder.GetFromLocationName(query, 1));
|
|
#pragma warning restore CA1422
|
|
var address = addresses?.FirstOrDefault();
|
|
if (address != null)
|
|
{
|
|
var latLng = new LatLng(address.Latitude, address.Longitude);
|
|
RunOnUiThread(() =>
|
|
{
|
|
googleMap?.AnimateCamera(CameraUpdateFactory.NewLatLngZoom(latLng, 10));
|
|
});
|
|
}
|
|
else
|
|
{
|
|
RunOnUiThread(() =>
|
|
{
|
|
Toast.MakeText(this, "Luogo non trovato", ToastLength.Short).Show();
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|