API per Android 5.0

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 una panoramica generale delle nuove funzionalità della piattaforma, consulta invece gli aspetti salienti di Android Lollipop.

Inizia a sviluppare

Per iniziare a creare app per Android 5.0, devi prima 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 l'app su un'immagine di sistema Android 5.0, testala e poi 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. Questa assistenza include:

  • Il tema Material
  • Visualizza ombre
  • Il widget RecyclerView
  • Animazioni disegnabili e effetti di stile
  • Effetti di animazione e transizione di attività di Material Design
  • 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 altre attività contemporaneamente per i documenti. Questa funzionalità semplifica il multitasking consentendo agli utenti di passare rapidamente da una singola attività e da un documento all'altro dalla 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 l'attributo documentLaunchMode dell'elemento <activity> su "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. Il valore massimo corrente che può essere specificato è 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 l'attributo 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 l'implementazione di WebView a Chromium M37, apportando miglioramenti alla sicurezza e alla stabilità, nonché correzioni di bug. La stringa dello user agent predefinita per un WebView in esecuzione su Android 5.0 è stata aggiornata per includere 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 la fotocamera e il microfono tramite API web come getUserMedia(). La tua app deve disporre delle autorizzazioni Android appropriate per queste risorse per poterle concedere al WebView.

Con il nuovo metodo onShowFileChooser(), ora puoi utilizzare un campo del modulo di immissione in WebView, e avviare 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 scoprire di più sulle nuove funzionalità incluse in questa release, consulta WebView per Android.

Acquisizione e condivisione schermo

Android 5.0 ti consente di aggiungere funzionalità di acquisizione e condivisione dello schermo alla 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 all'app di acquisire i contenuti della schermata principale (la visualizzazione predefinita) in un oggetto Surface, che l'app può poi inviare tramite la 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 sue notifiche vengono visualizzate sulla schermata di blocco sicura. Per controllare il livello di visibilità, chiama setVisibility() e specificare uno di questi valori:

  • VISIBILITY_PRIVATE: vengono mostrate informazioni di base, come l'icona della notifica, ma i contenuti completi della notifica vengono nascosti.
  • VISIBILITY_PUBLIC: mostra i contenuti completi 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, crea prima la notifica di sostituzione utilizzando Notification.Builder. Quando crei l'oggetto di notifica privata, allega la notifica di sostituzione tramite il metodo 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 su PRIORITY_MAX o PRIORITY_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ò utilizzare queste informazioni per segnalare al sistema di raggruppare le notifiche delle persone specificate o classificarle come più importanti.

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 calcolo
  • Oggetti shader separati
  • Comandi di disegno indiretti
  • Texture multicampione e stencil
  • Miglioramenti al linguaggio relativo all'ombreggiatura
  • 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: dichiararlo 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 a OpenGL ES 3.1, questa release fornisce un pacchetto di estensioni con interfacce Java e supporto nativo per funzionalità grafiche avanzate. Queste estensioni vengono trattate come un unico pacchetto da Android. Se è presente l'estensione ANDROID_extension_pack_es31a, l'app può assumere che tutte le estensioni del pacchetto siano presenti e attivare le funzionalità del linguaggio di ombreggiatura con una singola dichiarazione #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).
  • Tessellatura e shader di 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 la tua app deve essere installata solo sui 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 la nuova API android.hardware.camera2 per facilitare l'acquisizione di foto e l'elaborazione di immagini con dettagli fini. Ora puoi accedere in modo programmatico alle videocamere disponibili per il sistema con getCameraIdList() e connetterti a un dispositivo specifico 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 lo Ascoltatore CameraCaptureSession.CaptureCallback e impostarla nella richiesta di acquisizione. Ora, quando il sistema completa la richiesta di acquisizione di immagini, il tuo ascoltatore CameraCaptureSession.CaptureCallback riceve una chiamata a onCaptureCompleted(), che fornisce i metadati di acquisizione delle immagini in un CaptureResult.

Il corso CameraCharacteristics consente a 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 il livello hardware INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY, che ha funzionalità approssimativamente equivalenti a quelle dell'API Camera ritirata.
  • 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 l'API aggiornata Camera, consulta gli esempi di implementazione 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 a virgola mobile (ENCODING_PCM_FLOAT). Ciò consente una maggiore gamma dinamica, una precisione più costante e un maggiore headroom. L'aritmetica a virgola mobile è particolarmente utile durante i calcoli intermedi. Gli endpoint di riproduzione utilizzano il formato intero per i dati audio e una profondità di 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 da MediaCodec.
  • L'opzione WRITE_NON_BLOCKING può semplificare il buffering e il multithreading per alcune app.

Controllo della riproduzione dei contenuti multimediali

Utilizza le nuove API di notifica e multimediali per assicurarti che l'UI di sistema sia a conoscenza della riproduzione dei contenuti multimediali e possa estrarre e mostrare la grafica dell'album. Il controllo della riproduzione dei contenuti multimediali in un'interfaccia utente e in un servizio è ora più semplice con le nuove classi MediaSession e MediaController.

La nuova classe MediaSession sostituisce la classe RemoteControlClient deprecata e fornisce un unico 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. Questa classe fornisce un modo sicuro per monitorare e controllare la riproduzione dei contenuti multimediali dal processo dell'interfaccia utente dell'app. Quando crei un controller, specifica un oggetto MediaSession.Token in modo che la tua app possa interagire con il MediaSession specificato. Utilizzando i metodi MediaController.TransportControls, puoi inviare comandi come play(), stop(), skipToNext() e setRating() per controllare la riproduzione dei contenuti multimediali nella sessione. Con il controller, puoi anche registrare un oggetto MediaController.Callback per ascoltare le modifiche dei metadati e degli stati nella sessione.

Inoltre, puoi creare notifiche avanzate che consentono il controllo della riproduzione associato a una sessione multimediale con la nuova classe Notification.MediaStyle.

Navigazione tra i contenuti multimediali

Android 5.0 introduce la possibilità per le app di sfogliare la raccolta di contenuti multimediali di un'altra app tramite la nuova API android.media.browse. 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. Specifica il componente un nome per un MediaSession quando crei un MediaBrowser istanza. Utilizzando questa istanza del browser, la tua app può connettersi al servizio associato e ottenere un oggetto MediaSession.Token per riprodurre i contenuti esposti tramite quel servizio.

Spazio di archiviazione

Selezione della directory

Android 5.0 estende Storage Access Framework per consentire agli utenti di selezionare un intero sottoalbero di directory, concedendo alle app l'accesso in lettura/scrittura a tutti i documenti contenuti senza richiedere la conferma dell'utente per ogni elemento.

Per selezionare un sottoalbero di directory, crea e invia un'OPEN_DOCUMENT_TREE intent. Il sistema mostra tutte le istanzeDocumentsProvider che supportano la selezione del sottoalbero, consentendo all'utente di sfogliare e selezionare una directory. L'URI restituito rappresenta al sottoalbero selezionato. Puoi quindi utilizzare 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 il pacchetto nello spazio di archiviazione condiviso in cui la tua app può inserire file multimediali da includere in MediaStore. Il nuovo getExternalMediaDirs() restituisce i percorsi per questi su tutti i dispositivi di archiviazione condivisa. Come per getExternalFilesDir(), la tua app non ha bisogno di autorizzazioni aggiuntive per accedere ai percorsi restituiti. La piattaforma cerca periodicamente nuovi contenuti multimediali in queste directory, ma puoi anche utilizzare 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 dalla tua app:

  1. Crea un ConnectivityManager.
  2. Utilizza la classe NetworkRequest.Builder per creare un oggetto NetworkRequest e specificare le funzionalità della rete e il tipo di trasporto di cui è interessata la tua app.
  3. Per cercare reti idonee, chiama requestNetwork() o registerNetworkCallback() e passa l'oggetto NetworkRequest e un'implementazione di ConnectivityManager.NetworkCallback. Utilizza il metodo requestNetwork() se vuoi passare attivamente a una rete adatta una volta rilevata. Per ricevere solo notifiche per le reti sottoposte a scansione senza passare attivamente, utilizza il metodo registerNetworkCallback().

Quando il sistema rileva una rete adatta, si connette alla rete e invoca il callbackonAvailable(). 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 loro chiesto di concedere alla tua app la seguente autorizzazione: "Informazioni sulla connessione Bluetooth: consente all'app di controllare il Bluetooth, inclusa la trasmissione o l'ottenimento di informazioni sui dispositivi Bluetooth nelle vicinanze".

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 di callback riceve un report sull'esito positivo o negativo dell'operazione pubblicitaria.

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.
  • La tua app può invocare Android Beam sul dispositivo dell'utente per condividere dati chiamando 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 utilizzare 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 utilizzare setPreferredService() per impostare il servizio di emulazione della scheda preferito da utilizzare quando un'attività specifica è in primo piano.

Progetto Volta

Oltre alle nuove funzionalità, Android 5.0 evidenzia i miglioramenti della batteria vita privata. Utilizza le nuove API e lo strumento per comprendere e ottimizzare il consumo di energia della tua app.

Pianificazione dei job

Android 5.0 fornisce una nuova API JobScheduler che consente di ottimizzare la durata della batteria definendo job da eseguire in modo asincrono in un secondo momento o in condizioni specifiche (ad esempio quando il dispositivo è in carica). La pianificazione dei job è utile in situazioni quali:

  • L'app ha attività non rivolte agli utenti che puoi posticipare.
  • L'app ha operazioni che preferisci svolgere quando l'unità è collegata alla corrente.
  • L'app include un'attività che richiede l'accesso alla rete o una connessione Wi-Fi connessione.
  • L'app contiene una serie di attività che vuoi eseguire in batch con una pianificazione regolare.

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
  • Completare prima di una determinata scadenza o con un ritardo minimo

Ad esempio, puoi aggiungere codice come questo per eseguire l'attività su una rete senza misurazione:

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 l'alimentazione del dispositivo è stabile (ovvero è collegato alla corrente da più di 2 minuti e la batteria è a un livello ottimale), il sistema eseguirà qualsiasi job pianificato pronto per l'esecuzione, anche se la scadenza del job non è 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
  • Milisecondi per pacchetto per app mobile
  • Statistiche aggregate UID di sistema
  • Statistiche aggregate dell'UID dell'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. Queste informazioni ti consentono di comprendere e diagnosticare più facilmente eventuali problemi relativi alla batteria.

Android sul posto di lavoro e in ambito educativo

Provisioning gestito

Android 5.0 offre nuove funzionalità per l'esecuzione delle app un ambiente aziendale. Un amministratore del dispositivo può avviare una procedura di provisioning gestito per aggiungere un profilo gestito coesistente ma separato a un dispositivo, se l'utente ha già un account personale. 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 la chiamata va a buon fine, il sistema attiva il callback onProfileProvisioningComplete(). Puoi quindi chiamare setProfileEnabled() per attivare questo profilo gestito.

Per impostazione predefinita, nel profilo gestito è attivato solo un piccolo sottoinsieme di app. Puoi installare altre app nel profilo gestito chiamando enableSystemApp().

Se stai sviluppando un'app Avvio, puoi utilizzare la nuova classe LauncherApps per ottenere un elenco di attività avviabili per l'utente corrente e per eventuali profili gestiti associati. Avvio app può mettere in evidenza le app gestite aggiungendo un badge di lavoro all'icona DRAWABLE. Per recuperare l'icona con il badge, chiama getUserBadgedIcon().

Per scoprire come utilizzare la nuova funzionalità, consulta BasicManagedProfile l'esempio di implementazione 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 eseguire il deployment e attivare un proprietario del dispositivo, devi eseguire un trasferimento di dati NFC da un'app di programmazione al dispositivo mentre è in stato non provisionato. 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. Una volta attivato il blocco schermo, gli utenti non possono vedere le notifiche, accedere ad altre app o tornare alla schermata Home, finché l'app non esce dalla modalità.

Esistono due modi per attivare il blocco schermo:

  • Manualmente: gli utenti possono attivare il blocco su schermo in Impostazioni > Sicurezza > Blocco su schermo e selezionare le attività da bloccare toccando l'icona a forma di blocco verde nella schermata delle app 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. Un'app di proprietà del dispositivo può chiamare il metodo setLockTaskPackages() per consentire alle app di essere bloccate senza il passaggio di conferma dell'utente.

Quando il blocco delle attività è attivo, si verifica il seguente comportamento:

  • La barra di stato è vuota e le notifiche e le informazioni sullo stato dell'utente sono nascoste.
  • 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 create nuove attività.
  • Quando il blocco schermo viene invocato dal proprietario di un dispositivo, l'utente rimane bloccato nella tua app finché l'app 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 utilizzando la nuova classe PdfRenderer. Devi specificare ParcelFileDescriptor ricercabile, 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(), quindi chiama render() per trasformare il PdfRenderer.Page aperto in una bitmap. Puoi anche impostare parametri aggiuntivi se vuoi convertire solo una parte del documento in un'immagine bitmap (ad esempio, per implementare il 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 informazioni sull'utilizzo più dettagliate rispetto al metodo getRecentTasks() ritirato. Per utilizzare questa API, devi prima dichiarare l'autorizzazione "android.permission.PACKAGE_USAGE_STATS" nel file manifest. L'utente deve anche attivare l'accesso per questa app tramite Impostazioni > Sicurezza > App con accesso in base all'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 per la quale il sistema conserva questi dati è la 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 l'app è stata utilizzata
  • 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 del pacchetto e dell'attività) viene spostato in primo piano o in background durante una giornata
  • 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à:

  • I nuovi metodi getWindowAnimationFrameStats() e getWindowContentFrameStats() registrano le statistiche dei 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. L'esecuzione del comando è simile all'esecuzione di adb shell da un host collegato al dispositivo, il che ti consente di utilizzare strumenti basati su shell come dumpsys, am, content e pm.
  • 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 di oggetti AccessibilityWindowInfo, chiama il nuovo metodo getWindows().
  • La nuova classe AccessibilityNodeInfo.AccessibilityAction ti consente di definire azioni standard o personalizzate da eseguire su un AccessibilityNodeInfo. La nuova classe AccessibilityNodeInfo.AccessibilityAction sostituisce le API relative alle azioni precedentemente disponibili in AccessibilityNodeInfo.
  • 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 tra tutti gli editor di metodi di inserimento (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 IME con un meccanismo di commutazione non passerà a un IME senza. Questa variazione di comportamento è implementata dal metodo switchToNextInputMethod().

Per un esempio di come utilizzare le API di commutazione dell'IME aggiornate, consulta l'esempio di implementazione della tastiera virtuale 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à obbligatorie dichiarabili

I valori seguenti sono ora supportati nel <uses-feature> , consentendoti di assicurarti che l'app sia installata soltanto su dispositivi che per fornire le funzionalità necessarie alla tua app.

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 scegli come target il livello API 21 e versioni successive, questa autorizzazione è richiesta da un servizio Daydream per garantire che solo il sistema possa associarsi.