• Non ci sono risultati.

2.2 Architettura del Museo Virtuale in AR

2.2.1 Progettazione in ambiente Android

La parte dell’applicazione inerente all’ambiente Android riguarda la selezione dei parametri e il recupero delle risorse online. Per fare ciò, sono state create quattro attività, corrispondenti all’interfaccia con cui l’utente può interagire:

 La prima corrisponde al menu con cui l’utente può selezionare i parametri di ricerca  La seconda e la terza attività sono rispettivamente quelle dove avviene il recupero

56

 La quarta attività è una classe speciale creata dal software Unity che integra il suo ambiente con quello di Android; servirà per ricevere i dati dalle precedenti activity e per avviare il motore grafico.

2.2.1.1 Struttura della MenuActivity

Come nell’applicazione VR, in questo secondo progetto è stato realizzato un menù per consentire all’utente di poter scegliere i parametri di ricerca sulle opere d’arte. Rispetto al progetto principale, l’utente può selezionare solo due repository per il recupero delle immagini invece che tre, ovvero Google Images e Wikimedia Commons.70

Anche qui si può effettuare una ricerca in base al nome dell’artista oppure da collezioni di opere d’arte recuperate dalla repository di Wikimedia Commons. Per una questione di prestazioni che possono compromettere la fluidità e l’uso dell’applicazione, il numero massimo delle opere che può restituire l’applicazione è stato limitato a cinque.

Anche in questo progetto sono stati inclusi un meccanismo per modificare la vista del menu in base alla repository scelta e un filtro all’interno della casella di testo per l’inserimento del nome dell’artista affinché venga inserito il nome corretto, senza segni di punteggiatura o altri simboli che vadano al di fuori dell’insieme dei caratteri appartenenti all’alfabeto latino. Un ulteriore

70 È stato riscontrato che con Europeana si verificava un difficile raggiungimento delle risorse a causa di bad link o di

link contenenti troppi reindirizzamenti. Essendo uno smartphone dotato di prestazioni minori rispetto a quelle di un computer è stato deciso di evitare di includere la repository per questo progetto. Inoltre, spesso, le immagini restituite da Europeana non sono di buona qualità poiché esse non sono spesso ad altissima risoluzione.

57

controllo viene fatto affinché una connessione dati o wireless sia attiva per poter effettuare successivamente la richiesta ai server delle repository.

Una volta selezionati i criteri di ricerca, questi ultimi vengono concatenati in una stringa, convertiti secondo la notazione percentuale, e inviati all’activity della repository selezionata. Questo meccanismo viene avviato dopo che l’utente preme il bottone, al cui interno ci sono delle istruzioni per passare i dati da un’activity all’altra tramite l’uso di un intent, uno strumento che funziona da “messaggero” fra porzioni specifiche dell’applicazione.

58

2.2.1.2 Struttura della GoogleActivity

Se l’utente ha deciso di scaricare le immagini da Google Images viene avviata la GoogleActivity che riceve i dati e si occupa di effettuare le richieste HTTP per ricevere i link delle immagini ad alta risoluzione.

2.2.1.2.1 Recupero delle risorse

Prima che l’activity venga visualizzata viene avviato un thread in background (un’operazione nascosta agli occhi dell’utente) che inizia le operazioni asincrone di recupero dati. Non essendo l’operazione immediata, in base alla velocità di connessione e al raggiungimento dei server, per qualche attimo potrebbe comparire una schermata nera.

Una volta che viene restituito l’array contenente gli URL delle immagini viene effettuato un parsing manuale dell’intera stringa contenente il body della pagina e si recuperano i link delle immagini utilizzando lo stesso metodo dell’applicazione VR; una volta finito, la seconda activity si occupa di popolare una ListView, ovvero un contenitore al cui interno vengono raccolti i dati che saranno elencati con un orientamento verticale.

L’utilizzo di questa lista serve all’utente per far capire quante immagini sono state recuperate e se il numero dei collegamenti è pari a quello delle immagini richieste. Questa lista potrebbe essere arricchita anche con delle immagini ma, per evitare la duplicazione delle operazioni (reperimento dei link e scaricamento delle immagini) con un conseguente rallentamento dell’applicazione, si è deciso di restituire semplicemente una vista contenente soltanto i collegamenti.

59

2.2.1.3 Struttura della WikimediaActivity

Anche la WikimediaActivity contiene gli stessi elementi della vista di cui si è discusso; le uniche cose che cambiano sono le modalità con cui vengono prelevati i dati.

2.2.1.3.1 Recupero delle risorse

Rispetto alla precedente activity, in questa parte dell’applicazione i dati sono prelevati attraverso l’ausilio di una libreria interna ad Android che si occupa di leggere, esplorare ed estrarre i dati da un oggetto JSON. Sempre come nell’applicazione VR, vengono utilizzate le API di Wikimedia per effettuare prima il recupero della lista dei file e, successivamente, il recupero dei collegamenti alle immagini.

Le task asincrone per le GET Request sono pari al numero di file da scaricare, più una per il recupero della lista dei file. Ecco uno schema dell’applicazione:

2.2.1.4 UnityPlayerActivity e avvio di Unity3D

Una volta che sono stati raccolti i dati dalle varie activity si passa all’avvio del motore grafico di Unity3D. L’utente, premendo il bottone, manda un messaggio contenente la lista dei collegamenti da scaricare alla classe UnityActivityPlayer, un’activity speciale che è stata esportata assieme al progetto di Unity3D e che consente di ricevere i dati ottenuti dalle precedenti attività di Android. La struttura di questa parte dell’applicazione si può riassumere in questo schema:

1. La classe riceve l’intent mandato da una delle due attività (Wikimedia o Google) 2. Viene creato un oggetto corrispondente al player di Unity

60

4. Per ogni oggetto presente nell’array, viene mandato un messaggio a due funzioni internet al motore grafico di Unity

5. Il player Unity viene avviato

Con questo ultimo passaggio si conclude la parte della progettazione in ambiente Android e si passa all’architettura dell’applicazione dal lato Unity3D.