Android 6.0 (M) offre nuove funzionalità per utenti e sviluppatori di app. Questo documento fornisce un'introduzione alle API più importanti.
Inizia a sviluppare
Per iniziare a creare app per Android 6.0, devi prima ottenere l'SDK Android. Quindi, utilizza SDK Manager per scaricare la piattaforma SDK e le immagini di sistema di Android 6.0.
Aggiorna il livello API target
Per ottimizzare meglio la tua app per i dispositivi con sistema operativo Android, imposta targetSdkVersion
su"23"
, installa l'app su un'immagine di sistema Android, testala e poi pubblica l'app aggiornata con questa modifica.
Puoi utilizzare le API Android supportando contemporaneamente le versioni precedenti aggiungendo al codice condizioni che controllano il livello dell'API di sistema prima di eseguire le API non supportate dal tuo minSdkVersion
.
Per scoprire di più sul mantenimento della compatibilità con le versioni precedenti, consulta Supporto di diverse versioni della piattaforma.
Per saperne di più sul funzionamento dei livelli API, consulta Che cos'è il livello API?
Autenticazione tramite impronta
Questa release offre nuove API per consentirti di autenticare gli utenti utilizzando le scansioni delle impronte digitali sui dispositivi supportati. Utilizza queste API in combinazione con il sistema Android Keystore.
Per autenticare gli utenti tramite scansione dell'impronta, ottieni un'istanza della nuova classeFingerprintManager
e chiama il metodoauthenticate()
. L'app deve essere in esecuzione su un
dispositivo compatibile con sensore di impronte digitali. Devi implementare l'interfaccia utente per il flusso di autenticazione tramite impronta nella tua app e utilizzare l'icona dell'impronta standard di Android nell'interfaccia utente.
L'icona dell'impronta Android (c_fp_40px.png
) è inclusa nell'esempio di autenticazione biometrica.
Se stai sviluppando più app che utilizzano l'autenticazione tramite impronta digitale, tieni presente che ogni app deve autenticare l'impronta dell'utente in modo indipendente.
Per utilizzare questa funzionalità nella tua app, aggiungi prima l'autorizzazione USE_FINGERPRINT
nel file manifest.
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
Per vedere un'implementazione dell'autenticazione tramite impronta in un'app, consulta l'esempio di autenticazione biometrica. Per una dimostrazione di come utilizzare queste API di autenticazione insieme ad altre API per Android, guarda il video API di impronte digitali e pagamenti.
Se stai testando questa funzionalità, segui questi passaggi:
- Installa Android SDK Tools Revisione 24.3, se non l'hai ancora fatto.
- Registra una nuova impronta nell'emulatore in Impostazioni > Sicurezza > Impronta, quindi segui le istruzioni per la registrazione.
- Utilizza un emulatore per emulare gli eventi touch dell'impronta con il seguente comando. Utilizza lo stesso comando per emulare gli eventi touch dell'impronta sulla schermata di blocco o
nella tua app.
adb -e emu finger touch <finger_id>
Su Windows, potrebbe essere necessario eseguire
telnet 127.0.0.1 <emulator-id>
seguito dafinger touch <finger_id>
.
Conferma credenziale
La tua app può autenticare gli utenti in base all'ultima volta che hanno sbloccato il dispositivo. Questa funzionalità consente agli utenti di non dover ricordare password aggiuntive specifiche per le app ed evita di dover implementare la tua interfaccia utente di autenticazione. L'app deve utilizzare questa funzionalità in combinazione con un'implementazione di chiavi pubbliche o segrete per l'autenticazione utente.
Per impostare la durata del timeout per cui la stessa chiave può essere riutilizzata dopo l'autenticazione di un utente, chiama il nuovo metodo setUserAuthenticationValidityDurationSeconds()
quando configuri un KeyGenerator
o un KeyPairGenerator
.
Evita di mostrare eccessivamente la finestra di dialogo di autenticazione. Le tue app devono prima provare a utilizzare l'oggetto cryptographic e, se il timeout scade, utilizzare il metodo createConfirmDeviceCredentialIntent()
per autenticare nuovamente l'utente all'interno dell'app.
Collegamento dell'app
Questa release migliora il sistema di intent di Android offrendo un collegamento delle app più efficace. Questa funzionalità ti consente di associare un'app a un dominio web di tua proprietà. In base a questa associazione, la piattaforma può determinare l'app predefinita da utilizzare per gestire un determinato link web e ignorare la richiesta agli utenti di selezionare un'app. Per informazioni su come implementare questa funzionalità, consulta Gestione dei link alle app.
Backup automatico per le app
Ora il sistema esegue il backup e il ripristino automatici dei dati completi per le app. Per attivare questo comportamento, la tua app deve avere come target Android 6.0 (livello API 23); non è necessario aggiungere altro codice. Se gli utenti eliminano i propri Account Google, vengono eliminati anche i dati di backup. Per scoprire come funziona questa funzionalità e come configurare i dati di cui eseguire il backup sul file system, consulta Configurare il backup automatico per le app.
Condivisione diretta
Questa release fornisce le API per rendere la condivisione intuitiva e rapida per gli utenti. Ora puoi definire target della condivisione diretta che lanciano un'attività specifica nella tua app. Questi target di condivisione diretta sono esposti agli utenti tramite il menu Condividi. Questa funzionalità consente agli utenti di condividere contenuti con obiettivi, ad esempio i contatti, all'interno di altre app. Ad esempio, il target della condivisione diretta potrebbe avviare un'attività in un'altra app di social network, che consente all'utente di condividere contenuti direttamente con un amico o una community specifici nell'app.
Per attivare i target di condivisione diretta, devi definire una classe che estenda la classeChooserTargetService
. Dichiara il servizio nel manifest. All'interno di questa dichiarazione, specifica l'autorizzazione BIND_CHOOSER_TARGET_SERVICE
e un filtro per intent utilizzando l'azione SERVICE_INTERFACE
.
L'esempio seguente mostra come dichiarare ChooserTargetService
nel file manifest.
<service android:name=".ChooserTargetService" android:label="@string/service_name" android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>
Per ogni attività che vuoi esporre a
ChooserTargetService
, aggiungi un elemento
<meta-data>
con il nome
"android.service.chooser.chooser_target_service"
nel manifest dell'app.
<activity android:name=".MyShareActivity” android:label="@string/share_activity_label"> <intent-filter> <action android:name="android.intent.action.SEND" /> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ChooserTargetService" /> </activity>
Interazioni vocali
Questa release fornisce una nuova API di interazione vocale che, insieme ad
Azioni vocali,
consente di creare esperienze vocali di conversazione nelle tue app. Chiama il metodo isVoiceInteraction()
per determinare se un'azione vocale ha attivato la tua attività. In questo caso, la tua app può utilizzare la classe VoiceInteractor
per richiedere una conferma vocale all'utente, selezionare un elemento da un elenco di opzioni e altro ancora.
La maggior parte delle interazioni vocali ha origine da un'azione vocale dell'utente. Tuttavia, un'attività di interazione vocale può anche essere avviata senza input dell'utente. Ad esempio, anche un'altra app avviata tramite
un'interazione vocale può inviare l'intenzione di avviare un'interazione vocale. Per determinare se la tua attività
è stata avviata da una query vocale dell'utente o da un'altra app di interazione vocale, chiama
il metodo isVoiceInteractionRoot()
. Se un'altra app ha avviato la tua attività, il metodo restituisce false
. L'app potrebbe quindi chiedere all'utente di confermare
che intendeva eseguire questa azione.
Per scoprire di più sull'implementazione delle azioni vocali, consulta il sito per sviluppatori di azioni vocali.
API Assist
Questa release offre agli utenti un nuovo modo per interagire con le tue app tramite un assistente. Per utilizzare questa funzionalità, l'utente deve consentire all'assistente di utilizzare il contesto corrente. Una volta attivata, l'utente può richiamare l'assistente in qualsiasi app premendo a lungo il pulsante Home.
L'app può scegliere di non condividere il contesto corrente con l'assistente impostando il flag FLAG_SECURE
. Oltre all'insieme di informazioni standard che la piattaforma passa all'assistente, la tua app può condividere informazioni aggiuntive utilizzando la nuova classe AssistContent
.
Per fornire all'assistente un contesto aggiuntivo dalla tua app:
- Implementa l'interfaccia
Application.OnProvideAssistDataListener
. - Registra questo listener utilizzando
registerOnProvideAssistDataListener()
. - Per fornire informazioni contestuali specifiche per l'attività, sostituisci il callback
onProvideAssistData()
e, facoltativamente, il nuovo callbackonProvideAssistContent()
.
Dispositivi di archiviazione utilizzabili
Con questa release, gli utenti possono adottare dispositivi di archiviazione esterni come le schede SD. Se utilizzi un
dispositivo di archiviazione esterno, questo viene criptato e formattato in modo da comportarsi come la memoria interna. Questa funzionalità consente agli utenti di spostare sia le app sia i dati privati di queste app tra dispositivi di archiviazione. Quando muovi le app, il sistema rispetta la preferenza android:installLocation
nel manifest.
Se la tua app accede alle seguenti API o ai seguenti campi, tieni presente che i percorsi dei file restituiti subiranno modifiche dinamiche quando l'app viene spostata tra dispositivi di archiviazione interni ed esterni. Quando crei i percorsi dei file, ti consigliamo vivamente di chiamare sempre queste API in modo dinamico. Non utilizzare percorsi file hardcoded o mantenere i percorsi file completi creati in precedenza.
Context
metodi:ApplicationInfo
campi:
Per eseguire il debug di questa funzionalità, puoi attivare l'adozione di un'unità USB collegata a un dispositivo Android tramite un cavo USB On-The-Go (OTG), eseguendo questo comando:
$ adb shell sm set-force-adoptable true
Notifiche
Questa release aggiunge le seguenti modifiche all'API per le notifiche:
- Nuovo livello di filtro
INTERRUPTION_FILTER_ALARMS
corrispondente alla nuova modalità Non disturbare Solo sveglie. - Nuovo valore della categoria
CATEGORY_REMINDER
utilizzato per distinguere i promemoria pianificati dall'utente da altri eventi (CATEGORY_EVENT
) e sveglie (CATEGORY_ALARM
). - Nuova classe
Icon
che puoi allegare alle notifiche tramite i metodisetSmallIcon()
esetLargeIcon()
. Analogamente, il metodoaddAction()
ora accetta un oggettoIcon
anziché un ID risorsa drawable. - Nuovo metodo
getActiveNotifications()
che consente alle tue app di scoprire quali notifiche sono attualmente attive.
Supporto per stilo Bluetooth
Questa release fornisce un supporto migliorato per l'input utente tramite uno stilo Bluetooth. Gli utenti possono accoppiare
e connettere un pennino Bluetooth compatibile con il proprio smartphone o tablet. Quando è connesso, le informazioni sulla posizione del touch screen vengono fuse con le informazioni sulla pressione e sui pulsanti dello stilo per offrire una gamma di espressioni più ampia rispetto al solo touch screen. La tua app può ascoltare le pressioni dei pulsanti dello stilo ed eseguire azioni secondarie registrando gli oggetti View.OnContextClickListener
e GestureDetector.OnContextClickListener
nella tua attività.
Utilizza i metodi e le costanti MotionEvent
per rilevare le interazioni con i pulsanti dello stilo:
- Se l'utente tocca uno stilo con un pulsante sullo schermo della tua app, il
metodo
getTooltype()
restituisceTOOL_TYPE_STYLUS
. - Per le app che hanno come target Android 6.0 (livello API 23), il metodo
getButtonState()
restituisceBUTTON_STYLUS_PRIMARY
quando l'utente preme il pulsante principale dello stilo. Se lo stilo ha un secondo pulsante, lo stesso metodo restituisceBUTTON_STYLUS_SECONDARY
quando l'utente lo preme. Se l'utente preme entrambi i pulsanti contemporaneamente, il metodo restituisce entrambi i valori OR (BUTTON_STYLUS_PRIMARY
|BUTTON_STYLUS_SECONDARY
). -
Per le app che hanno come target una versione della piattaforma precedente, il metodo
getButtonState()
restituisceBUTTON_SECONDARY
(per la pressione del pulsante dello stilo principale),BUTTON_TERTIARY
(per la pressione del pulsante dello stilo secondario) o entrambi.
Ricerca Bluetooth Low Energy migliorata
Se la tua app esegue scansioni Bluetooth Low Energy, utilizza il nuovo
setCallbackType()
metodo per specificare che vuoi che il sistema invii notifiche di callback quando rileva per la prima volta o dopo molto tempo un pacchetto di annunci corrispondente all'insieme ScanFilter
. Questo
approccio alla scansione è più efficiente in termini di consumo energetico rispetto a quello fornito nella versione precedente della piattaforma.
Assistenza per la release 1 di Hotspot 2.0
Questa release aggiunge il supporto per le specifiche Hotspot 2.0 Release 1 sui dispositivi Nexus 6 e Nexus 9. Per eseguire il provisioning delle credenziali Hotspot 2.0 nella tua app, utilizza i nuovi metodi della classe WifiEnterpriseConfig
, ad esempio setPlmn()
e setRealm()
. Nell'oggetto WifiConfiguration
, puoi impostare i campi FQDN
e providerFriendlyName
.
Il nuovo metodo isPasspointNetwork()
indica se una rete rilevata rappresenta un punto di accesso Hotspot 2.0.
Modalità display 4K
La piattaforma ora consente alle app di richiedere l'upgrade della risoluzione del display al rendering 4K su hardware compatibile. Per eseguire query sulla risoluzione fisica attuale, utilizza le nuove
API Display.Mode
. Se l'interfaccia utente viene disegnata a una risoluzione logica inferiore e viene upscalata a una risoluzione fisica più grande, tieni presente che la risoluzione fisica restituita dal metodo getPhysicalWidth()
potrebbe essere diversa da quella logica riportata da getSize()
.
Puoi chiedere al sistema di modificare la risoluzione fisica nell'app durante l'esecuzione impostando la proprietà preferredDisplayModeId
della finestra dell'app. Questa funzionalità è utile se vuoi passare alla risoluzione del display 4K. In modalità di visualizzazione 4K, l'interfaccia utente continua a essere visualizzata nella risoluzione originale (ad esempio 1080p) e viene aumentata di risoluzione fino a 4K, ma gli oggetti SurfaceView
potrebbero mostrare i contenuti nella risoluzione nativa.
ColorStateList adattabili ai temi
Gli attributi tema sono ora supportati in
ColorStateList
per i dispositivi con Android 6.0 (livello API 23). I metodi
Resources.getColorStateList()
e
Resources.getColor()
sono stati
ritirati. Se chiami queste API, chiama invece i nuovi metodi
Context.getColorStateList()
o
Context.getColor()
. Questi metodi sono disponibili anche nella libreria appcompat v4 tramite ContextCompat
.
Funzionalità audio
Questa release aggiunge miglioramenti all'elaborazione audio su Android, tra cui:
- Supporto per il protocollo MIDI con le nuove API
android.media.midi
. Utilizza queste API per inviare e ricevere eventi MIDI. - Nuove classi
AudioRecord.Builder
eAudioTrack.Builder
per creare rispettivamente oggetti di riproduzione e acquisizione audio digitale e per configurare le proprietà di origine e destinazione audio in modo da sostituire i valori predefiniti di sistema. - Hook API per l'associazione di dispositivi audio e di input. Questa operazione è particolarmente utile se la tua app consente agli utenti di avviare una ricerca vocale da un controller per videogiochi o un telecomando connesso ad Android TV. Il sistema richiama il nuovo
callback di
onSearchRequested()
quando l'utente avvia una ricerca. Per determinare se il dispositivo di input dell'utente ha un microfono integrato, recupera l'oggettoInputDevice
dal callback e poi chiama il nuovo metodohasMicrophone()
. - Nuovo metodo
getDevices()
che consente di recuperare un elenco di tutti i dispositivi audio attualmente connessi al sistema. Puoi anche registrare un oggettoAudioDeviceCallback
se vuoi che il sistema invii una notifica alla tua app quando un dispositivo audio si connette o si disconnette.
Funzionalità video
Questa release aggiunge nuove funzionalità alle API di elaborazione video, tra cui:
- Nuova classe
MediaSync
che aiuta le applicazioni a eseguire il rendering sincrono di stream audio e video. I buffer audio vengono inviati in modo non bloccante e vengono restituito tramite un callback. Supporta anche la frequenza di riproduzione dinamica. - Nuovo evento
EVENT_SESSION_RECLAIMED
, che indica che una sessione aperta dall'app è stata recuperata da Resource Manager. Se la tua app utilizza sessioni DRM, devi gestire questo evento e assicurarti di non utilizzare una sessione recuperata. - Nuovo codice di errore
ERROR_RECLAIMED
, che indica che il gestore delle risorse ha recuperato la risorsa multimediale utilizzata dal codec. Con questa eccezione, il codec deve essere rilasciato, poiché è passato allo stato di terminazione. - Nuova interfaccia
getMaxSupportedInstances()
per ottenere un suggerimento per il numero massimo di istanze di codec simultanee supportate. - Nuovo metodo
setPlaybackParams()
per impostare la velocità di riproduzione dei contenuti multimediali per la riproduzione in sequenza rapida o in slow motion. Inoltre, allunga o accelera automaticamente la riproduzione dell'audio in combinazione con il video.
Funzionalità della fotocamera
Questa release include le seguenti nuove API per accedere alla torcia della fotocamera e per il nuovo trattamento delle immagini da parte della fotocamera:
API Torcia
Se un dispositivo con fotocamera è dotato di un'unità flash, puoi chiamare il metodosetTorchMode()
per attivare o disattivare la modalità torcia dell'unità flash senza aprire il dispositivo. L'app non detiene la proprietà esclusiva dell'unità flash o del dispositivo della fotocamera. La modalità torcia viene disattivata e non è disponibile quando il dispositivo della fotocamera non è disponibile o quando altre risorse della fotocamera non sono disponibili per mantenere la torcia accesa. Anche altre app possono chiamare
setTorchMode()
per disattivare la modalità torcia. Quando l'ultima app che ha attivato la modalità torcia viene chiusa, la modalità torcia viene disattivata.
Puoi registrare un callback per ricevere una notifica sullo stato della modalità torcia chiamando il metodo
registerTorchCallback()
. La prima volta che viene registrato, il callback viene chiamato immediatamente con lo stato della modalità torcia di tutti i dispositivi con fotocamera attualmente noti con un'unità flash. Se la modalità torcia viene attivata o disattivata correttamente, viene invocato il metodo onTorchModeChanged()
.
API di ricelaborazione
L'API Camera2
è stata estesa per supportare il rielaborare le immagini in formato opaco privato e YUV. Per determinare se queste funzionalità di elaborazione sono disponibili, chiama getCameraCharacteristics()
e controlla la presenza della chiave REPROCESS_MAX_CAPTURE_STALL
. Se un
dispositivo supporta il ricalcolo, puoi creare una sessione di acquisizione della fotocamera ricalcolabile chiamando
createReprocessableCaptureSession()
e creare richieste per il ricalcolo del buffer di input.
Utilizza la classe ImageWriter
per collegare il flusso del buffer di input all'input di rielaborazioni della fotocamera. Per ottenere un buffer vuoto, segui questo modello di programmazione:
- Chiama il metodo
dequeueInputImage()
. - Riempi i dati nel buffer di input.
- Invia il buffer alla videocamera chiamando il metodo
queueInputImage()
.
Se utilizzi un oggetto ImageWriter
insieme a un'immagine PRIVATE
, la tua app non può accedere direttamente ai dati dell'immagine. Passa invece l'immagine PRIVATE
direttamente al
ImageWriter
chiamando il metodo
queueInputImage()
senza alcuna copia del buffer.
La classe ImageReader
ora supporta
gli stream di immagini in formato PRIVATE
. Questo supporto consente alla tua app di mantenere una coda circolare di immagini di output ImageReader
, selezionare una o più immagini e inviarle al ImageWriter
per il ricupero della fotocamera.
Funzionalità di Android for Work
Questa release include le seguenti nuove API per Android for Work:
- Controlli avanzati per i dispositivi di proprietà dell'azienda utilizzabili una sola volta: il proprietario del dispositivo ora può controllare le seguenti impostazioni per migliorare la gestione dei dispositivi di proprietà dell'azienda utilizzabili una sola volta (COSU):
- Disattiva o riattiva la schermata di blocco con il metodo
setKeyguardDisabled()
. - Disattiva o riattiva la barra di stato (incluse le Impostazioni rapide, le notifiche e il gesto di scorrimento verso l'alto per la navigazione che avvia Google Now) con il metodo
setStatusBarDisabled()
. - Disattiva o riattiva l'avvio protetto con la costante
UserManager
DISALLOW_SAFE_BOOT
. - Impedisci che lo schermo si spenga quando è collegato alla corrente con la costante
STAY_ON_WHILE_PLUGGED_IN
.
- Disattiva o riattiva la schermata di blocco con il metodo
- Installazione e disinstallazione silenziose di app da parte del proprietario del dispositivo: ora un proprietario del dispositivo può installare e disinstallare applicazioni in modalità silenziosa utilizzando le API
PackageInstaller
, indipendentemente da Google Play per il lavoro. Ora puoi eseguire il provisioning dei dispositivi tramite un proprietario del dispositivo che recupera e installa le app senza interazione dell'utente. Questa funzionalità è utile per attivare il provisioning con un solo tocco di chioschi o altri dispositivi simili senza attivare un Account Google. - Accesso silenzioso ai certificati aziendali: quando un'app chiama
choosePrivateKeyAlias()
, prima che all'utente venga chiesto di selezionare un certificato, il proprietario del profilo o del dispositivo ora può chiamare metodoonChoosePrivateKeyAlias()
per fornire l'alias in modo silenzioso all'applicazione richiedente. Questa funzionalità ti consente di concedere alle app gestite l'accesso ai certificati senza l'interazione dell'utente. - Accettazione automatica degli aggiornamenti di sistema. Impostando un criterio di aggiornamento di sistema con
setSystemUpdatePolicy()
, un proprietario del dispositivo ora può accettare automaticamente un aggiornamento di sistema, ad esempio nel caso di un dispositivo kiosk, o posticipare l'aggiornamento e impedire che venga eseguito dall'utente per un massimo di 30 giorni. Inoltre, un amministratore può impostare una finestra temporale giornaliera in cui deve essere eseguito un aggiornamento, ad esempio durante le ore in cui un dispositivo kiosk non è in uso. Quando è disponibile un aggiornamento di sistema, il sistema controlla se l'app del controller dei criteri dei dispositivi ha impostato un criterio di aggiornamento di sistema e si comporta di conseguenza. -
Installazione dei certificati con delega:ora un proprietario di dispositivo o profilo può concedere a un'app di terze parti la possibilità di chiamare queste
DevicePolicyManager
API di gestione dei certificati: - Monitoraggio dell'utilizzo dei dati. Ora un proprietario del profilo o del dispositivo può eseguire query sulle statistiche sull'utilizzo dei dati visibili in Impostazioni > Dati utilizzando i nuovi metodi
NetworkStatsManager
. Ai proprietari di profili viene concessa automaticamente l'autorizzazione per eseguire query sui dati del profilo che gestiscono, mentre i proprietari di dispositivi hanno accesso ai dati di utilizzo dell'utente principale gestito. - Gestione delle autorizzazioni di runtime:
Un proprietario del profilo o del dispositivo può impostare un criterio di autorizzazione per tutte le richieste di runtime di tutte le applicazioni che utilizzano
setPermissionPolicy()
per chiedere all'utente di concedere l'autorizzazione o per concederla o negarla automaticamente in silenzio. Se è impostato quest'ultimo criterio, l'utente non può modificare la selezione effettuata dal proprietario del profilo o del dispositivo nella schermata delle autorizzazioni dell'app in Impostazioni. - VPN nelle Impostazioni: le app VPN ora sono visibili in Impostazioni > Altro > VPN. Inoltre, le notifiche che accompagnano l'utilizzo della VPN sono ora specifiche per la configurazione della VPN. Per il proprietario del profilo, le notifiche sono specifiche in base al fatto che la VPN sia configurata per un profilo gestito, un profilo personale o entrambi. Per un proprietario del dispositivo, le notifiche sono specifiche in base al fatto che la VPN sia configurata per l'intero dispositivo.
- Notifica sullo stato del lavoro: ora viene visualizzata un'icona a forma di valigetta nella barra di stato ogni volta che un'app del profilo gestito presenta un'attività in primo piano. Inoltre, se il dispositivo viene sbloccato direttamente all'attività di un'app nel profilo gestito, viene visualizzato un avviso popup che comunica all'utente che si trova nel profilo di lavoro.