Anteprima
Vedrai una selezione di 12 pagine su 52
Riassunti esame Sviluppo di mobile software Pag. 1 Riassunti esame Sviluppo di mobile software Pag. 2
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 6
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 11
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 16
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 21
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 26
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 31
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 36
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 41
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 46
Anteprima di 12 pagg. su 52.
Scarica il documento per vederlo tutto.
Riassunti esame Sviluppo di mobile software Pag. 51
1 su 52
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Introduzione ai servizi in Android

(IPC). I services possono essere di due tipi:

  • Started o UnBounded: startService() un'activity lo fa partire chiamando ed il servizio gira in background indefinitamente. Tipicamente un servizio non restituisce un risultato. Quando l'operazione è eseguita il servizio dovrebbe fermarsi da solo.
  • Bound: bindService() una applicazione si collega con O re un'interfaccia client/server che consente di interagire con il servizio e gira finché l'app è collegata al servizio. Più app si possono collegare al servizio ma quando tutte si sono scollegate il servizio è terminato. A parte un paio di metodi di callback un servizio può essere implementato in entrambi i modi, in particolare i metodi che li discriminano sono onStartCommand() e onBind().

Le applicazioni useranno i servizi allo stesso modo in cui si usa un'activity, mediante la chiamata ad un Intent. Nel manifest un servizio può essere dichiarato privato, bloccandone

l'accesso ad altre app mettendo l'attributo exported="false" nel manifest.

Un servizio gira nel thread principale del processo che lo ospita, non crea un thread suo né gira in un processo separato (salvo diversamente specificato). Ciò vuol dire che per operazioni bloccanti o intensive bisogna creare un thread separato per sperare che l'app non riceva un ANR (Application Not Responding).

Ciclo di vita del service

Per creare un servizio, in generale, si può creare una sottoclasse di Service. Successivamente bisogna sovrascrivere e specializzare alcuni metodi di callback relativi al ciclo di vita: onCreate(), onStartCommand() / onBind() nel caso di bindService(), onUnbind() nel caso di bindService(), onDestroy().

onCreate(): Chiamato dal sistema quando il servizio è creato, serve per effettuare il setup iniziale del servizio ed è effettuato prima dei metodi onStartCommand() e onBind(). Se il servizio è già avviato

questo metodo non è chiamato. Page 35 of 52fi ff fi fi fi ff ff

Riassunti SMS Vitandrea Sorino

onDestroy(): Il sistema chiama questo metodo quando il servizio non è più utilizzato e deve essere terminato. Questo metodo è pensato per operazioni di pulizia delle risorse, come per esempio thread, listener, receiver, etc. Questa è l'ultima chiamata ricevuta dal servizio prima di essere eliminato dalla memoria.

onStartCommand(): Metodo chiamato dal sistema quando un'altra componente richiede l'avvio del servizio chiamando startService(). Eseguendo il comando il servizio parte indefinitamente ed è responsabilità del programmatore fermare il servizio chiamando stopSelf() oppure stopService() quando il lavoro del servizio è finito. onStartCommand() deve restituire un intero che descrive come continuare il servizio nel caso in cui è terminato dal sistema:

  • START_NOT_STICKY (alla terminazione del servizio non è ricreato)
meno che non ci siano intent pendenti da lanciare)
  • START_STICKY (alla terminazione del servizio il sistema ricrea il servizio e chiama onStartCommand() ma non riesegue l'ultimo intent)
  • START_REDELIVER_INTENT (alla terminazione del servizio il sistema ricrea il servizio e chiama onStartCommand() anche dell'ultimo intent inviato al servizio e di tutti gli intent pendenti).
onBind(): Chiamato dal sistema quando un'altra componente vuole collegarsi al servizio chiamando bindService(). Nell'implementazione bisogna fornire un'interfaccia per consentire al client di comunicare con il servizio ed ottenere un IBinder. Il metodo va sempre implementato quindi se non si vuole fare binding allora il metodo deve restituire null. onUnBind(): Viene invocato nei Services bound quando tutti i client del servizio si sono disconnessi e quindi il servizio è nelle condizioni di poter essere eliminato. Se ci sono activity collegate tramite modalità Started, ilservizio deve nire di elaborare tutti i corrisponmdenti Intent prima di terminare.
onReBind(): E’ legato al boolean restituito da onUnBind() che permette di decidere se, in una chiamata di bindService() successiva, si debba ricevere una noti ca tramite questo metodo.
Come la activity, il service va dichiarato nel Manifest: <service Android:name=“.nomeService” />.
Si possono de nire delle proprietà come i permessi richiesti e il processo in cui il servizio deve girare ma l’unico attributo obbligatorio richiesto è android:name, che speci ca il nome del servizio il quale non deve cambiare dopo aver pubblicato l’app.
Per far partire un Service quindi bisogna startService(Intent).
fare un intent esplicito al service e richiamare Quando è chiamato startService() android chiama onStartCommand() invece se il servizio non è avviato il sistema chiama prima onCreate() poi onStartCommand().
Servizio startedUn servizio ‘started’

è chiamato con il comando startService() e il callback da sovrascrivere è onStartCommand() e quindi, dopo essere partito, il suo ciclo di vita è indipendente da quello del componente che lo ha fatto partire, e gira indefinitamente in background. Il servizio deve quindi fermarsi da solo quando ha finito con stopSelf() oppure deve essere fermato da un altro componente con stopService().

Ci sono due classi che possono essere estese per creare un servizio started:

  • Service: estendendola bisogna creare un nuovo thread per evitare rallentamenti nel processo
  • IntentService: sottoclasse di Service che usa un thread per gestire tutte le richieste di avvio, una per volta. Ottima opzione per servizi che non devono essere eseguiti contemporaneamente. Implementa inoltre onHandleIntent(), che riceve l'intent per ogni richiesta ed esegue il lavoro in background.

Page 36 of 52

Riassunti SMS Vitandrea Sorino

Service o Thread?

Un servizio è una

componente che gira in background anche se l'utente non vi interagisce quindi se si vogliono consentire operazioni all'esterno del thread principale con cui l'utente interagisce allora il thread è consigliato.

Page 37 of 52 Riassunti SMS Vitandrea Sorino

Connettività le API di android consentono ai dispositivi di connettersi mediante Bluetooth, Wi-Fi, NFC, P2P, USB, SIP*, oltre che con le connessioni di rete standard. Tra le più interessanti vi sono le connessioni wireless.

Nelle connessioni wireless due dispositivi Android possono comunicare nella stessa rete locale. Tuttavia due dispositivi che non sono nella stessa rete ma sono vicini possono comunicare ugualmente. Il Network Service Discovery (NSD) consente di cercare applicazioni in altri dispositivi facendo partire servizi con cui ci si può mettere in comunicazione come scambiare le, giocare o ci si può connettere in remoto con macchine nella stessa rete.

Bluetooth bluetooth

dà accesso alle funzionalità attraverso le Bluetooth API, che consentono di scansionare i dispositivi BT, interrogare l'adapter BT locale per i dispositivi accoppiati, stabilire canali di comunicazione RFCOMM, collegarsi ad altri dispositivi attraverso il service discovery, trasferire dati tra dispositivi accoppiati e gestire connessioni multiple. Ci sono inoltre due tipi di Bluetooth che si possono utilizzare: il Bluetooth classico è la scelta giusta per operazioni che richiedono molto consumo della batteria, p.e. streaming tra dispositivi Android, mentre con bassi requisiti di batteria da Android 4.3 è stato introdotto il Bluetooth Low Energy. Le fasi per l'utilizzo del Bluetooth classico sono:
  • setup
  • ricerca dei dispositivi accoppiati e non, nell'area locale
  • connessione
  • trasferimento dati tra dispositivi
Per creare connessioni Bluetooth si usano:
  • BluetoothAdapter (entry-point)
  • BluetoothDevice (dispositivo)
remoto)
  • BluetoothSocket (interfaccia, simile a TCP, per scambio dati con InputStream OutputStream)
  • BluetoothServerSocket (un dispositivo deve fare da server)
  • BluetoothClass (proprietà read-only del dispositivo)
  • BluetoothProfile (specifica interfaccia wireless)
  • BluetoothHeadset (supporto per cuffie)
  • BluetoothA2dp (Advanced Audio Distribution Profile)
Le API del bluetooth sono definite dentro android.bluetooth. Inoltre, per utilizzare il bluetooth si necessita di definire i permessi all'interno del manifest: <uses-permission android:name="android.permission.BLUETOOTH" /> Se si vuole implementare il servizio di discovery bisogna specificare BLUETOOTH_ADMIN. Con Android 12 (API 31) o versioni successive, si possono dichiarare le seguenti autorizzazioni nel Manifest:
  • BLUETOOTH_SCAN: se l'app deve cercare altri dispositivi Bluetooth, come anche le periferiche BLE
  • BLUETOOTH_ADVERTISE: se si vuole rendere il device

rilevabile da altri dispositivi Bluetooth

  • BLUETOOTH_CONNECT: se l'app deve comunicare con dispositivi Bluetooth già accoppiati
  • ACCESS_FINE_LOCATION: se l'app utilizza i risultati della scansione Bluetooth per ricavare la posizione fisica del device

Setup

Nella fase di setup bisogna verificare se il dispositivo è compatibile con il Bluetooth, se non lo è disabilitare tutte le funzionalità che ne fanno uso. Per controllare se il bluetooth è supportato:

if( BluetoothAdapter.getDefaultAdapter() != null )

In questa maniera getDefaultAdapter() restituirà un oggetto nullo se non viene supportato.

Sull'oggetto BluetoothAdapter si potrà successivamente richiamare il metodo isEnabled() per controllare che il bluetooth sia abilitato, se non lo è bisogna chiedere all'utente di abilitarlo.

Per la richiesta di abilitazione si utilizza ovviamente un intent avviato con startActivityForResult:

new Intent()

BluetoothAdapter.ACTION_REQUEST_ENABLE Il risultato si può recuperare nell'onActivityResult e il risultato sarà RESULT_OK in caso di successo mentre se l'utente risponde 'NO' il codice restituito è RESULT_CANCELED.

Page 38 of 52

fi fi fi fi fi fi ffi fi fi fi

Riassunti SMS Vitandrea Sorino

Per monitorare lo stato del Bluetooth mentre l'app è in esecuzione, bisogna creare un intent filter con BluetoothAdapter.ACTION_STATE_CHANGE

IntentFilter l = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);

e avviarlo con registerReceiver(BroadcastReceiver, intentFilter)

Ricerca dei dispositivi

La ricerca dei dispositivi vicini fa uso del BluetoothAdapter che effettua una procedura di Scan dei dispositivi visibili che su richiesta invieranno nome, classe e MAC Address. Una volta eseguita la connessione la prima volta, all'utente è presentata una richiesta di abbinamento. Dopo l'abbinamento, i dati dei dispositivi

Dettagli
Publisher
A.A. 2021-2022
52 pagine
4 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher vitAndreA di informazioni apprese con la frequenza delle lezioni di Sviluppo di Mobile Software e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Bari o del prof Balducci Fabrizio.