Livello API: 21
Android 5.0 (LOLLIPOP) offre nuove funzionalità a utenti e sviluppatori di app. Questo documento fornisce una alle nuove API più importanti.
Se hai un'app pubblicata, assicurati di consultare la sezione Comportamento di Android 5.0 Modifiche che devi prendere in considerazione nella tua app. Questi comportamenti cambiano potrebbero interessare la tua app sui dispositivi Android 5.0, anche se non utilizzi nuove API o il targeting di nuove funzionalità.
Per un quadro generale delle nuove funzionalità della piattaforma, vedi il Lecca lecca di Android in evidenza.
Inizia a sviluppare
Per iniziare a sviluppare app per Android 5.0, dovete innanzitutto ottenere l'SDK Android. Utilizza SDK Manager. per scaricare le immagini di sistema e la piattaforma SDK Android 5.0.
Aggiorna il livello API target
Per ottimizzare meglio la tua app per i dispositivi con Android 5.0:
imposta targetSdkVersion
su
"21"
, installa la tua app su un dispositivo Android
5.0, testala e pubblica l'app aggiornata con
questa modifica.
Puoi usare le API Android 5.0 e supportare anche le API
o versioni successive aggiungendo al codice condizioni che controllano il livello API di sistema
prima di eseguire API non supportate dal tuo minSdkVersion
.
Per scoprire di più sul mantenimento della compatibilità con le versioni precedenti, leggi l'articolo Supporto
Versioni della piattaforma diverse.
Per saperne di più su come funzionano i livelli API, leggi l'articolo Che cos'è un'API Livello?
Importanti modifiche del comportamento
Se hai già pubblicato un'app per Android, tieni presente che la tua app potrebbe essere interessata da alcune modifiche in Android 5.0.
Per informazioni complete, consulta le Modifiche ad Android 5.0.
Interfaccia utente
Supporto di Material Design
Android 5.0 aggiunge il supporto del nuovo material design di Android lo stile del testo. Puoi creare app con material design visivamente dinamiche e presentano transizioni di elementi UI naturali per gli utenti. L'assistenza include:
- Il tema Material
- Visualizza ombre
- Widget
RecyclerView
- Animazioni disegnabili e effetti di stile
- Animazione di material design ed effetti di transizione delle attività
- Animatori per le proprietà della vista in base allo stato della vista
- Widget UI e barre delle app personalizzabili con tavolozze dei colori controllate da te
- Drawable animati e non animati basati su grafiche vettoriali XML
Per scoprire di più sull'aggiunta della funzionalità di material design alla tua app, consulta Material Design.
Documenti e attività simultanee nella schermata Recenti
Nelle versioni precedenti,
schermo recenti
ha potuto visualizzare solo un'attività per ogni app con cui l'utente ha interagito
più di recente. Ora la tua app può aprire più attività in base alle esigenze per ulteriori
attività simultanee per i documenti. Questa funzione facilita il multitasking
consentendo agli utenti di passare rapidamente da un'attività all'altra e da un documento all'altro
alla schermata Recenti, con un'esperienza di passaggio coerente tra tutte le app.
Esempi di attività simultanee potrebbero includere schede aperte in un sito web
browser, documenti in un'app di produttività, corrispondenze simultanee in
un gioco o le chat in un'app di messaggistica. La tua app può gestire le proprie attività
tramite il corso ActivityManager.AppTask
.
Per inserire un'interruzione logica in modo che il sistema tratti la tua attività come una nuova
l'attività, usa FLAG_ACTIVITY_NEW_DOCUMENT
quando
avviando l'attività con startActivity()
. Puoi ottenere questo comportamento anche impostando
<attività>
documentLaunchMode
dell'elemento a "intoExisting"
o
"always"
nel file manifest.
Per evitare di ingombrare la schermata Recenti, puoi impostare il numero massimo di
attività della tua app che possono essere visualizzate nella schermata. Per farlo, imposta il parametro
<applicazione>
android:maxRecents
. Lo stato attuale
il numero massimo di attività che possono essere specificate è di 50 attività per utente (25 per i dispositivi con poca RAM).
Le attività nella schermata Recenti possono essere impostate in modo da essere mantenute tra i riavvii. Per controllare
il comportamento di persistenza, utilizza
android:persistableMode
. Puoi anche modificare
le proprietà visive di un'attività nella schermata Recenti, come
il colore, l'etichetta e l'icona dell'attività richiamando il
setTaskDescription()
.
Aggiornamenti di WebView
Android 5.0 aggiorna WebView
implementazione di Chromium M37, con miglioramenti della sicurezza e della stabilità,
e correzioni di bug. La stringa dello user agent predefinita per un
WebView
su Android 5.0 ha
È stato aggiornato per incorporare 37.0.0.0 come numero di versione.
Questa release introduce la classe PermissionRequest
,
che consente alla tua app di concedere l'autorizzazione WebView
per accedere a risorse protette come fotocamera e microfono, tramite API web
ad esempio getUserMedia(). L'app deve disporre dell'appropriata
le autorizzazioni Android per queste risorse al fine di concedere le autorizzazioni al
WebView
.
Con il nuovo metodo onShowFileChooser()
,
Ora puoi utilizzare un campo di immissione del modulo nel WebView
,
e avvia un selettore di file per selezionare immagini e file dal dispositivo Android.
Inoltre, in questa versione è disponibile il supporto per WebAudio WebGL e Standard aperti WebRTC. Per ulteriori informazioni sulle nuove funzioni incluse in questa versione, vedi WebView per Android.
Acquisizione e condivisione schermo
Android 5.0 consente di aggiungere funzionalità di acquisizione schermo e condivisione schermo a
la tua app con le nuove API android.media.projection
. Questa funzionalità
è utile, ad esempio, se vuoi attivare la condivisione schermo in un video
app per videoconferenze.
Il nuovo metodo createVirtualDisplay()
consente alla tua app di acquisire i contenuti della schermata principale (l'impostazione predefinita
display) in un oggetto Surface
, che la tua app potrà quindi
inviare messaggi sulla rete. L'API consente di acquisire solo schermate non sicure
contenuti e non l'audio di sistema. Per avviare l'acquisizione schermo, l'app deve prima
richiedere l'autorizzazione dell'utente avviando una finestra di dialogo di acquisizione schermo utilizzando un
Intent
ottenuto tramite
createScreenCaptureIntent()
.
Per un esempio di come utilizzare le nuove API, consulta la MediaProjectionDemo
nel progetto di esempio.
Notifiche
Notifiche nella schermata di blocco
Le schermate di blocco in Android 5.0 consentono di presentare notifiche. Gli utenti possono scegliere tramite Impostazioni se consentire o meno contenuti sensibili delle notifiche da mostrare su una schermata di blocco sicura.
La tua app può controllare il livello di dettaglio visibile quando le notifiche vengono
visualizzato sopra la schermata di blocco sicura. Per controllare il livello di visibilità, chiama
setVisibility()
e
specificare uno di questi valori:
VISIBILITY_PRIVATE
: Mostra le informazioni di base, come l'icona della notifica, ma nasconde le i contenuti completi della notifica.VISIBILITY_PUBLIC
: Mostra l'intero contenuto della notifica.VISIBILITY_SECRET
: Non mostra nulla, esclusa anche l'icona della notifica.
Quando il livello di visibilità è VISIBILITY_PRIVATE
,
puoi anche fornire una versione oscurata della notifica
contenuti che nascondono dettagli personali. Ad esempio, un'app SMS potrebbe visualizzare una
Notifica che mostra "Hai 3 nuovi SMS" ma nasconde il messaggio
contenuti e mittenti. Per fornire questa notifica alternativa, devi prima creare il
notifica di sostituzione utilizzando Notification.Builder
. Quando
crei l'oggetto di notifica privata, alleghi la notifica di sostituzione
tramite
setPublicVersion()
.
Metadati delle notifiche
Android 5.0 utilizza i metadati associati alle notifiche delle app
per ordinare le notifiche in modo più intelligente. Per impostare i metadati, richiama il metodo
seguenti metodi in Notification.Builder
quando
crea la notifica:
setCategory()
: indica al sistema come gestire le notifiche dell'app quando dispositivo è in modalità priorità (ad esempio, se una notifica rappresenta chiamata in arrivo, messaggio istantaneo o sveglia).setPriority()
: Contrassegna la notifica come più o meno importante rispetto alle notifiche normali. Notifiche con il campo Priorità impostato suPRIORITY_MAX
oPRIORITY_HIGH
compaiono in piccola finestra mobile se anche la notifica ha un suono o una vibrazione.addPerson()
: consente di aggiungere una o più persone pertinenti a una notifica. La tua app può usare questa opzione per segnalare al sistema che deve essere raggruppate notifiche da utenti specificate o classifica le notifiche di queste persone più importante.
Grafica
Supporto per OpenGL ES 3.1
Android 5.0 aggiunge interfacce Java e supporto nativo per OpenGL ES 3.1. Le principali nuove funzionalità fornite in OpenGL ES 3.1 includono:
- Shader di computing
- Separa oggetti Shar
- Comandi di disegno indiretti
- Texture multicampione e stencil
- Miglioramenti del linguaggio di Shading
- Estensioni per modalità di fusione e debug avanzate
- Compatibilità con le versioni precedenti di OpenGL ES 2.0 e 3.0
L'interfaccia Java per OpenGL ES 3.1 su Android è fornita con
GLES31
. Quando utilizzi OpenGL ES 3.1, assicurati di:
dichiaralo nel file manifest con
<uses-feature>
e l'attributo android:glEsVersion
. Ad esempio:
<manifest> <uses-feature android:glEsVersion="0x00030001" /> ... </manifest>
Per ulteriori informazioni sull'utilizzo di OpenGL ES, incluso come controllare versione OpenGL ES supportata in runtime, consulta Guida all'API di OpenGL ES.
Pacchetto di estensioni Android
Oltre alla versione OpenGL ES 3.1, questa versione fornisce un pacchetto di estensione
Interfacce Java e supporto nativo per funzionalità grafiche avanzate. Questi
vengono trattate come un unico pacchetto da Android. (Se
L'estensione ANDROID_extension_pack_es31a
è presente, la tua app può
supporre che siano presenti tutte le estensioni nel pacchetto e abilitare il linguaggio di ombreggiatura
caratteristiche con una singola istruzione #extension
.)
Il pacchetto di estensioni supporta:
- Supporto garantito del tenere Shader per i buffer di archiviazione, le immagini e atomics (il supporto del Fragment Shar è facoltativo in OpenGL ES 3.1).
- Tessalazione e shaker per la geometria
- Formato di compressione delle texture ASTC (LDR)
- Interpolazione e ombreggiatura per campione
- Diverse modalità di fusione per ciascun allegato di colore in un buffer di fotogrammi
L'interfaccia Java per il pacchetto di estensioni è fornita con
GLES31Ext
. Nel file manifest dell'app puoi dichiarare che
l'app deve essere installata solo su dispositivi che supportano il pacchetto di estensioni.
Ad esempio:
<manifest> <uses-feature android:name=“android.hardware.opengles.aep” android:required="true" /> ... </manifest>
Contenuti multimediali
API Camera per funzionalità avanzate della fotocamera
Android 5.0 introduce il nuovo
android.hardware.camera2
API per facilitare l'acquisizione di foto a grana fine e l'elaborazione delle immagini. Ora puoi
accedere in modo programmatico alle videocamere disponibili per il sistema con
getCameraIdList()
e connetterti a un dispositivo specifico con
openCamera()
.
Per iniziare ad acquisire immagini, crea un CameraCaptureSession
e specificare gli oggetti Surface
per l'invio delle immagini acquisite.
CameraCaptureSession
può essere configurato per
scatti singoli o più immagini in una serie di foto a raffica.
Per ricevere notifiche quando vengono acquisite nuove immagini, implementa
Ascoltatore CameraCaptureSession.CaptureCallback
e impostarla nella richiesta di acquisizione. Ora, quando il sistema completa
richiesta di acquisizione, il tuo CameraCaptureSession.CaptureCallback
ascoltatore riceve una chiamata a
onCaptureCompleted()
,
fornendo i metadati di acquisizione delle immagini in un
CaptureResult
.
Il corso CameraCharacteristics
ti consente di
rilevare quali funzionalità della fotocamera sono disponibili su un dispositivo. L'oggetto
La proprietà INFO_SUPPORTED_HARDWARE_LEVEL
rappresenta il livello di funzionalità della fotocamera.
- Tutti i dispositivi supportano almeno
Livello hardware
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
, con funzionalità all'incirca equivalente a quello del modelloCamera
deprecato tramite Google Cloud CLI o tramite l'API Compute Engine. - I dispositivi che supportano il livello hardware
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
supportano la gestione manuale controllo dell'acquisizione, della post-elaborazione e dell'acquisizione di immagini ad alta risoluzione a frequenze fotogrammi elevate.
Per scoprire come utilizzare il modello
Fotocamera
API, fai riferimento all'implementazione di Camera2Basic
e Camera2Video
in questa release.
Riproduzione audio
Questa release include le seguenti modifiche a
AudioTrack
:
- Ora la tua app può fornire dati audio in formato con virgola mobile
(
ENCODING_PCM_FLOAT
) Questo consente un intervallo dinamico più ampio, una precisione più costante e un margine maggiore. L'aritmetica in virgola mobile è particolarmente utile durante i calcoli intermedi. Gli endpoint di riproduzione utilizzano un formato intero per i dati audio e una profondità in bit inferiore. (In Android 5.0, parti della pipeline interna non sono ancora rappresentazione in virgola mobile). - Ora la tua app può fornire dati audio come
ByteBuffer
, in nello stesso formato fornito daMediaCodec
. WRITE_NON_BLOCKING
può semplificare il buffering e il multithreading per alcune app.
Controllo riproduzione contenuti multimediali
Usare le nuove API di notifica e contenuti multimediali per garantire che
UI di sistema rileva la riproduzione di contenuti multimediali e può estrarre e mostrare le copertine degli album.
Controllare la riproduzione di contenuti multimediali all'interno di un'interfaccia utente e di un servizio ora è più semplice con la nuova
MediaSession
e
MediaController
corso.
La nuova classe MediaSession
sostituisce
la classe RemoteControlClient
deprecata e fornisce un
un singolo insieme di metodi di callback per la gestione dei controlli di trasporto e dei pulsanti multimediali.
Se la tua app offre la riproduzione di contenuti multimediali e funziona su Android
TV o
Wear, utilizza la
MediaSession
di classe per gestire il trasporto
con gli stessi metodi di callback.
Ora puoi creare la tua app controller multimediale con la nuova
MediaController
corso. Questo corso fornisce
un modo sicuro per i thread per monitorare e controllare la riproduzione di contenuti multimediali dal processo dell'interfaccia utente della tua app.
Quando crei un controller, specifica un MediaSession.Token
in modo che la tua app possa interagire con il MediaSession
specificato.
Se usi i metodi MediaController.TransportControls
,
puoi inviare comandi come play()
,
stop()
,
skipToNext()
,
e setRating()
per controllare la riproduzione di contenuti multimediali
nella sessione in questione. Con il controller puoi anche
registra un oggetto MediaController.Callback
in
rimane in ascolto dei metadati e delle modifiche
dello stato durante la sessione.
Inoltre, puoi creare notifiche avanzate per controllare la riproduzione
associata a una sessione multimediale con il nuovo Notification.MediaStyle
.
Navigazione tra i contenuti multimediali
Android 5.0 introduce la possibilità per le app di sfogliare i contenuti multimediali
libreria di un'altra app, tramite il nuovo
android.media.browse
tramite Google Cloud CLI
o tramite l'API Compute Engine. Per esporre i contenuti multimediali nella tua app, estendi il parametro
MediaBrowserService
corso. La tua implementazione
MediaBrowserService
deve fornire l'accesso a un
MediaSession.Token
per consentire alle app di riprodurre contenuti multimediali
forniti tramite il tuo servizio.
Per interagire con un servizio di browser multimediale, utilizza la classe
MediaBrowser
corso. Specifica il componente
un nome per un MediaSession
quando crei un
MediaBrowser
istanza. Utilizzando questa istanza del browser,
l'app può quindi connettersi al servizio associato e ottenere
MediaSession.Token
oggetto per riprodurre contenuti esposti
attraverso quel servizio.
Spazio di archiviazione
Selezione directory
Android 5.0 estende Framework Accesso allo spazio di archiviazione per consentire agli utenti di selezionare un intero sottoalbero della directory, dando alle app accesso in lettura/scrittura a tutti i documenti contenuti senza richiedere la conferma all'utente per ogni elemento.
Per selezionare un sottoalbero di directory, crea e invia
OPEN_DOCUMENT_TREE
l'intento. Il sistema visualizza tutte
DocumentsProvider
istanza che supporta la selezione del sottoalbero,
consentendo all'utente di sfogliare e selezionare una directory. L'URI restituito rappresenta
al sottoalbero selezionato. Dopodiché potrai usare buildChildDocumentsUriUsingTree()
e buildDocumentUriUsingTree()
insieme a
query()
per esplorare il sottoalbero.
Il nuovo metodo createDocument()
ti consente di creare nuovi documenti o directory ovunque
sotto il sottoalbero. Per gestire i documenti esistenti, utilizza
renameDocument()
e
deleteDocument()
.
Controlla COLUMN_FLAGS
per verificare l'assistenza del fornitore prima di emetterle.
Se stai implementando un DocumentsProvider
e vuoi
per supportare la selezione del sottoalbero, implementare isChildDocument()
e includere FLAG_SUPPORTS_IS_CHILD
nel tuo COLUMN_FLAGS
.
Android 5.0 introduce anche nuove directory specifiche per i pacchetti
spazio di archiviazione condiviso in cui l'app può inserire file multimediali da includere
MediaStore
. Il nuovo
getExternalMediaDirs()
restituisce i percorsi per questi
su tutti i dispositivi
di archiviazione condivisa. Analogamente a
getExternalFilesDir()
,
La tua app non richiede autorizzazioni aggiuntive per accedere ai percorsi restituiti. La
di Google Cloud esegue periodicamente la ricerca di nuovi contenuti multimediali in queste directory, ma puoi anche
usa MediaScannerConnection
per cercare esplicitamente nuovi
contenuti.
Wireless e Connettività
Più connessioni di rete
Android 5.0 offre nuove API di networking multiplo che consentono alla tua app cercare in modo dinamico le reti disponibili con funzionalità specifiche e stabilire una connessione con loro. Questa funzionalità è utile quando la tua app richiede una rete specializzata, ad esempio una rete SUPL, MMS o di fatturazione con l'operatore, o se vuoi inviare i dati utilizzando un particolare tipo di protocollo di trasporto.
Per selezionare e connetterti a una rete in modo dinamico dall'app, segui queste istruzioni: passaggi:
- Crea un
ConnectivityManager
. - Utilizza il corso
NetworkRequest.Builder
per creare unNetworkRequest
e specificare le caratteristiche di rete e il tipo di trasporto a cui la tua app è interessata. - Per cercare reti adatte, chiama
requestNetwork()
oregisterNetworkCallback()
e passiamoNetworkRequest
e un'implementazioneConnectivityManager.NetworkCallback
. Utilizza larequestNetwork()
se vuoi passare attivamente a una rete adatta una volta rilevata; per ricevere solo per le notifiche relative alle reti scansionate senza effettuare attivamente il passaggio, utilizzaregisterNetworkCallback()
.
Quando il sistema rileva una rete adatta, si connette alla rete
richiama il
onAvailable()
di Google. Puoi utilizzare l'oggetto Network
del callback per
ottenere ulteriori informazioni sulla rete o indirizzare il traffico all'utilizzo
rete selezionata.
Bluetooth Low Energy
Android 4.3 ha introdotto il supporto della piattaforma per Bluetooth Low Energy (Bluetooth LE) nel ruolo centrale. In Android 5.0, un dispositivo Android ora può Funzionano da dispositivo periferico Bluetooth LE. Le app possono utilizzare questa funzionalità per farne conoscere la presenza ai dispositivi nelle vicinanze. Ad esempio, puoi creare app che consentono a un dispositivo di funzionare da contapassi o di monitoraggio della salute e di comunicare i suoi dati con un altro dispositivo Bluetooth LE.
Le nuove API android.bluetooth.le
consentono alle tue app di trasmettere
pubblicità, ricerca di risposte e connessioni di moduli tramite Bluetooth nelle vicinanze
Dispositivi LE. Per utilizzare le nuove funzionalità pubblicitarie e di scansione, aggiungi il parametro
BLUETOOTH_ADMIN
l'autorizzazione nel file manifest. Quando gli utenti aggiornano o scaricano la tua app dal Play Store:
viene chiesto di concedere la seguente autorizzazione alla tua app:
"Informazioni sulla connessione Bluetooth: consente all'app di controllare il Bluetooth,
ad esempio la trasmissione ai dispositivi Bluetooth nelle vicinanze o la ricezione di informazioni."
Per avviare la pubblicità Bluetooth LE in modo che altri dispositivi possano rilevare
la tua app, chiama
startAdvertising()
e passare l'implementazione
AdvertiseCallback
corso. L'oggetto callback
riceve un report relativo alle operazioni pubblicitarie riuscite o non riuscite.
Android 5.0 introduce la classe ScanFilter
in modo che
che la tua app può analizzare
i tipi specifici di dispositivi a cui sono interessati. Per iniziare la ricerca di dispositivi Bluetooth
Dispositivi LE, chiama startScan()
e passare in un elenco di filtri. Nella chiamata al metodo, devi anche specificare
implementazione di ScanCallback
per segnalare quando
È stata trovata una pubblicità Bluetooth LE.
Miglioramenti NFC
Android 5.0 aggiunge questi miglioramenti per consentire una maggiore quantità di contenuti uso flessibile della tecnologia NFC:
- Android Beam è ora disponibile nel menu Condividi.
- L'app può richiamare Android Beam sul dispositivo dell'utente per condividere i dati
chiamata
invokeBeam()
. In questo modo l'utente non dovrà più toccare manualmente il dispositivo con un altro Dispositivo con supporto NFC per completare il trasferimento dei dati. - Puoi usare il nuovo metodo
createTextRecord()
per creare un record NDEF contenente dati di testo UTF-8. - Se stai sviluppando un'app di pagamento, ora hai la possibilità di
registrare un ID applicazione NFC (AID) in modo dinamico chiamando
registerAidsForService()
. Puoi anche utilizzaresetPreferredService()
per impostare il servizio di emulazione della carta preferito che deve quando un'attività specifica è in primo piano.
Progetto Volta
Oltre alle nuove funzionalità, Android 5.0 evidenzia i miglioramenti della batteria vita privata. Usa le nuove API e il nuovo strumento per comprendere e ottimizzare la potenza della tua app il consumo eccessivo.
Pianificazione dei job
Android 5.0 offre un nuovo JobScheduler
API che consente di ottimizzare la durata della batteria definendo i job da far eseguire al sistema
in modo asincrono in un secondo momento o in determinate condizioni (ad esempio, quando
dispositivo in carica). La pianificazione dei job è utile in situazioni come:
- L'app presenta operazioni non rivolte agli utenti che puoi rimandare.
- L'app svolge il lavoro che preferisci quando l'unità è collegata all'alimentazione.
- L'app include un'attività che richiede l'accesso alla rete o una connessione Wi-Fi connessione.
- L'app ha una serie di attività da eseguire in batch programmazione.
Un'unità di lavoro è incapsulata da un oggetto JobInfo
.
Questo oggetto specifica i criteri di pianificazione.
Utilizza il corso JobInfo.Builder
per configurare il modo
dell'attività pianificata. Puoi pianificare l'esecuzione dell'attività in specifiche
quali:
- Avvia quando il dispositivo è in carica
- Avvia quando il dispositivo è connesso a una rete unmetered
- Avvia quando il dispositivo è inattivo
- Da completare prima di una determinata scadenza o con un ritardo minimo
Ad esempio, puoi aggiungere codice come questo per eseguire l'attività su un rete non a consumo:
Kotlin
val uploadTask: JobInfo = JobInfo.Builder( jobId, serviceComponent /* JobService component */ ).run { setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) build() } val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler jobScheduler.schedule(uploadTask)
Java
JobInfo uploadTask = new JobInfo.Builder(jobId, serviceComponent /* JobService component */) .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED) .build(); JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(uploadTask);
Se il dispositivo ha un'alimentazione stabile (ovvero se è stato collegato per più di 2 minuti e la batteria è a un di salute), il sistema eseguirà qualsiasi job pianificato pronto per l'esecuzione, anche se non sia scaduta.
Per un esempio di come utilizzare l'API JobScheduler
:
fai riferimento all'esempio di implementazione di JobSchedulerSample
in questa release.
Strumenti per sviluppatori per l'utilizzo della batteria
Il nuovo comando dumpsys batterystats
genera contenuti interessanti
Dati statistici sull'utilizzo della batteria su un dispositivo, organizzati per ID utente univoco
(UID). Le statistiche includono:
- Cronologia di eventi relativi alla batteria
- Statistiche globali per il dispositivo
- Consumo approssimativo di energia per UID e componente di sistema
- ms per app mobile per pacchetto
- Statistiche aggregate UID di sistema
- Statistiche aggregate UID app
Utilizza l'opzione --help
per scoprire le varie opzioni per
per personalizzare l'output. Ad esempio, per stampare informazioni sull'utilizzo della batteria
statistiche per un determinato pacchetto di app dall'ultima ricarica del dispositivo, esegui questo
:
$ adb shell dumpsys batterystats --charged <package-name>
Puoi utilizzare lo
Storico della batteria
nell'output del comando dumpsys
generano una visualizzazione HTML degli eventi legati all'alimentazione dai log. Questo
semplifica la comprensione e la diagnosi di qualsiasi batteria
problemi correlati.
Android al lavoro e nell'istruzione
Provisioning gestito
Android 5.0 offre nuove funzionalità per l'esecuzione delle app un ambiente aziendale. R amministratore del dispositivo può: avviare un processo di provisioning gestito per aggiungere una co-presentazione, ma profilo gestito su un dispositivo, se l'utente dispone di un account personale esistente. Le app associate ai profili gestiti vengono visualizzate accanto app non gestite nell'Avvio app, nella schermata Recenti e nelle notifiche dell'utente.
Per avviare il processo di provisioning gestito, invia
ACTION_PROVISION_MANAGED_PROFILE
in Intent
. Se
ha esito positivo, il sistema attiva
Chiamata di onProfileProvisioningComplete()
.
Puoi quindi chiamare setProfileEnabled()
al
attivare questo profilo gestito.
Per impostazione predefinita, solo un piccolo sottoinsieme di app è abilitato nel profilo gestito.
Puoi installare altre app nel profilo gestito chiamando
enableSystemApp()
.
Se stai sviluppando un'app Avvio app, puoi utilizzare il nuovo corso LauncherApps
per ottenere un elenco di attività che possono essere lanciate
per l'utente corrente e gli eventuali profili gestiti associati. Avvio app può rendere
le app gestite sono visivamente ben visibili aggiungendo un badge aziendale all'icona
disegnabile. Per recuperare l'icona con il badge, chiama
getUserBadgedIcon()
.
Per scoprire come utilizzare la nuova funzionalità, consulta la
Esempio di implementazione di BasicManagedProfile
in questa release.
Proprietario del dispositivo
Android 5.0 introduce la possibilità di implementare un'app del proprietario del dispositivo. Un dispositivo
proprietario è un tipo specializzato
amministratore del dispositivo
che ha la possibilità aggiuntiva di creare e rimuovere utenti secondari
configurare le impostazioni globali sul dispositivo. L'app del proprietario del dispositivo può utilizzare
nella classe DevicePolicyManager
da seguire
un controllo granulare della configurazione, della sicurezza e delle app sui dispositivi gestiti.
Un dispositivo può avere un solo proprietario attivo alla volta.
Per implementare e attivare il proprietario di un dispositivo, devi eseguire un trasferimento di dati NFC da un'app di programmazione al dispositivo mentre è in corso il provisioning non eseguito stato. Questo trasferimento di dati invia le stesse informazioni dell'intent di provisioning descritto in Provisioning gestito.
Blocco su schermo
Android 5.0 introduce una nuova API di blocco schermo che consente impedire agli utenti di abbandonare la tua attività o di essere interrotti dalle notifiche. Puoi usarla, ad esempio, se stai sviluppando un'app per l'istruzione per Supportare requisiti di valutazione importanti su Android, applicazione kiosk. Dopo che l'app attiva il blocco su schermo, gli utenti non possono più vedere notifiche, accedere ad altre app o tornare alla schermata Home. finché l'app non esce dalla modalità.
Esistono due modi per attivare il blocco su schermo:
- Manualmente: gli utenti possono attivare il blocco su schermo nel Impostazioni > Sicurezza > Blocco schermo e selezionare le attività da eseguire fissa toccando l'icona a forma di puntina verde nella schermata Recenti.
- In modo programmatico:per attivare il blocco su schermo.
in modo programmatico, chiama
startLockTask()
dalla tua app. Se l'app che ha inviato la richiesta non è un proprietario del dispositivo, all'utente viene richiesto per conferma. L'app del proprietario del dispositivo può chiamare ilsetLockTaskPackages()
per abilitare il blocco delle app senza il passaggio di conferma dell'utente.
Quando il blocco delle attività è attivo, si verifica quanto segue:
- La barra di stato è vuota, le notifiche e le informazioni sullo stato dell'utente sono nascosti.
- I pulsanti Home e Applicazioni recenti sono nascosti.
- Le altre app non possono avviare nuove attività.
- L'app corrente può avviare nuove attività, a condizione che non vengano creare nuove attività.
- Quando il proprietario di un dispositivo richiama il blocco su schermo, l'utente rimane bloccato
alla tua app finché non chiama
stopLockTask()
. - Se il blocco su schermo viene attivato da un'altra app che non è un proprietario del dispositivo o direttamente dall'utente, può uscire tenendo premuti entrambi i pulsanti Indietro e Recenti.
Cornice per la stampa
Visualizza PDF come bitmap
Ora puoi eseguire il rendering delle pagine dei documenti PDF in immagini bitmap per la stampa mediante
utilizzando la nuova classe PdfRenderer
. Devi specificare
ParcelFileDescriptor
cercabile, ovvero i contenuti
accessibili in modo casuale) su cui il sistema scrive i contenuti stampabili.
La tua app può ottenere una pagina per il rendering con
openPage()
, poi chiama
render()
per trasformare il PdfRenderer.Page
aperto in una bitmap. Tu
puoi anche impostare parametri aggiuntivi se vuoi convertire solo una parte
documento in un'immagine bitmap (ad esempio, per implementare
rendering a riquadri
per aumentare lo zoom sul documento).
Per un esempio di come utilizzare le nuove API, consulta la PdfRendererBasic
campione.
Sistema
Statistiche sull'utilizzo di app
Ora puoi accedere alla cronologia di utilizzo delle app su un dispositivo Android con
nuova API android.app.usage
. Questa API fornisce un utilizzo più dettagliato
rispetto alla versione obsoleta
getRecentTasks()
.
Per utilizzare questa API, devi prima dichiarare
Autorizzazione "android.permission.PACKAGE_USAGE_STATS"
nel file manifest.
L'utente deve anche abilitare l'accesso per questa app tramite Impostazioni > Sicurezza > App
con accesso ai dati di utilizzo.
Il sistema raccoglie i dati sull'utilizzo per singola app, aggregando i dati dati su intervalli giornalieri, settimanali, mensili e annuali. La durata massima che il sistema conserva questi dati è il seguente:
- Dati giornalieri: 7 giorni
- Dati settimanali: 4 settimane
- Dati mensili: 6 mesi
- Dati annuali: 2 anni
Per ogni app, il sistema registra i seguenti dati:
- L'ultima volta che è stata utilizzata l'app.
- Il periodo di tempo totale durante il quale l'app è stata in primo piano per l'intervallo di tempo in questione (per giorno, settimana, mese o anno)
- Acquisizione del timestamp quando un componente (identificato da un nome di pacchetto e attività) spostato in primo piano o sullo sfondo durante un giorno
- Acquisizione del timestamp in caso di modifica della configurazione di un dispositivo (ad esempio quando l'orientamento del dispositivo è cambiato in seguito alla rotazione)
Test e Funzioni di
Miglioramenti ai test e all'accessibilità
Android 5.0 aggiunge il seguente supporto per i test e accessibilità:
- Il nuovo
getWindowAnimationFrameStats()
egetWindowContentFrameStats()
acquisiscono le statistiche del frame per le animazioni e i contenuti delle finestre. Questi metodi ti consentono di scrivere test di strumentazione per valutare se un'app viene visualizzata con una frequenza di aggiornamento sufficiente per offrire un'esperienza utente senza problemi. - Il nuovo
executeShellCommand()
consente di eseguire i comandi della shell dal test di strumentazione. La dell'esecuzione del comando è simile all'esecuzione diadb shell
da un host connessi al dispositivo, consentendoti di usare strumenti basati su shell comedumpsys
,am
,content
epm
. - Servizi di accessibilità e strumenti di test che utilizzano le API di accessibilità
(ad esempio
UiAutomator
) ora puoi recuperare informazioni dettagliate sulle proprietà delle finestre schermata con cui gli utenti vedenti possono interagire. Per recuperare un elenco diAccessibilityWindowInfo
oggetti, chiama il nuovogetWindows()
. - Il nuovo
AccessibilityNodeInfo.AccessibilityAction
consente di definire azioni standard o personalizzate da eseguireAccessibilityNodeInfo
. Il nuovoAccessibilityNodeInfo.AccessibilityAction
sostituisce le API relative alle azioni precedentemente trovate inAccessibilityNodeInfo
. - Android 5.0 offre un controllo più granulare sulla sintesi vocale
la tua app. La nuova classe
Voice
consente alla tua app di Utilizzare profili vocali associati a impostazioni internazionali, qualità e latenza specifici valutazione e parametri specifici del motore di sintesi vocale.
IME
Passaggio più semplice tra le lingue di input
A partire da Android 5.0, gli utenti possono passare più facilmente
tutti gli input
Method Editor (IME) supportati dalla piattaforma. L'esecuzione della
l'azione di cambio (di solito, la pressione dell'icona a forma di globo sulla tastiera software)
tutti questi IME. Questo cambiamento di comportamento viene implementato
shouldOfferSwitchingToNextInputMethod()
.
Inoltre, il framework ora controlla se il successivo IME include una
meccanismo di attivazione/disattivazione (quindi, se l'IME supporta il passaggio a
l'IME dopo). Un
In caso contrario, l'IME con meccanismo di commutazione non passa in sequenza a un IME. Questo
il cambiamento di comportamento viene implementato
switchToNextInputMethod()
.
Per un esempio di come utilizzare le API di commutazione IME aggiornate, fai riferimento alle esempio di implementazione della tastiera software aggiornato in questa release. Per scoprire di più su come implementare il passaggio da un IME all'altro, consulta Creazione di un metodo di immissione.
Dichiarazioni dei file manifest
Funzionalità richieste dichiarabili
I valori seguenti sono ora supportati nel
<uses-feature>
, per avere la certezza che l'app sia installata soltanto su dispositivi che
fornire le funzionalità necessarie alla tua app.
FEATURE_AUDIO_OUTPUT
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_CAMERA_CAPABILITY_RAW
FEATURE_CAMERA_LEVEL_FULL
FEATURE_GAMEPAD
FEATURE_LIVE_TV
FEATURE_MANAGED_USERS
FEATURE_LEANBACK
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_HEART_RATE_ECG
FEATURE_SENSOR_RELATIVE_HUMIDITY
FEATURE_VERIFIED_BOOT
FEATURE_WEBVIEW
Autorizzazioni utente
La seguente autorizzazione è ora supportata nel
<uses-permission>
per dichiarare le autorizzazioni richieste dalla tua app per accedere a determinate API.
BIND_DREAM_SERVICE
: quando si sceglie l'API come target 21 e successivi, questa autorizzazione è richiesta da un servizio Daydream, per garantire che solo il sistema possa eseguire il binding.