Android 6.0 (M) offre nuove funzionalità a utenti e sviluppatori di app. Il presente documento fornisce un'introduzione le API più importanti.
Inizia a sviluppare
Per iniziare a sviluppare app per Android 6.0, dovete innanzitutto ottenere l'SDK Android. Utilizza SDK Manager. per scaricare la piattaforma SDK Android 6.0 e le immagini di sistema.
Aggiorna il livello API target
Per ottimizzare meglio la tua app per i dispositivi con Android ,
imposta targetSdkVersion
su
"23"
, installa la tua app su un dispositivo Android
l'immagine di sistema, testala e pubblica l'app aggiornata
questa modifica.
Puoi usare le API Android 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?
Autenticazione tramite impronta
Questa release offre nuove API per consentirti di autenticare gli utenti utilizzando le scansioni delle impronte digitali su sui dispositivi supportati, utilizza queste API insieme il sistema Android Keystore.
Per autenticare gli utenti tramite la scansione delle impronte, richiedi un'istanza del nuovo
corso FingerprintManager
e chiama il
authenticate()
. L'app deve essere in esecuzione su un
dispositivo con un sensore di impronte digitali. Devi implementare l'interfaccia utente per l'impronta
flusso di autenticazione nell'app e usare l'icona dell'impronta Android standard nell'interfaccia utente.
L'icona dell'impronta Android (c_fp_40px.png
) è inclusa nella
Esempio di autenticazione biometrica.
Se stai sviluppando più app che utilizzano l'autenticazione tramite impronta, tieni presente che ogni app deve:
Autenticare l'impronta dell'utente in modo indipendente.
Per utilizzare questa funzionalità nella tua app, aggiungi prima il
Autorizzazione USE_FINGERPRINT
nel file manifest.
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
Per visualizzare l'implementazione dell'autenticazione tramite impronta in un'app, fai riferimento alle Esempio di autenticazione biometrica. Per una dimostrazione di come puoi utilizzare queste autenticazioni API insieme ad altre API Android, guarda il video API Fingerprint e Payment.
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 andando all'indirizzo Impostazioni > Sicurezza > Impronta digitale, quindi segui le istruzioni per la registrazione.
- Utilizza un emulatore per emulare gli eventi di tocco dell'impronta con il
. Usa lo stesso comando per emulare gli eventi di tocco dell'impronta sulla schermata di blocco o
all'interno dell'app.
adb -e emu finger touch <finger_id>
Su Windows, potrebbe essere necessario eseguire
telnet 127.0.0.1 <emulator-id>
seguitofinger touch <finger_id>
.
Conferma credenziale
La tua app può autenticare gli utenti in base all'ultima volta che hanno sbloccato il dispositivo. Questo libera gli utenti dal dover ricordare password aggiuntive specifiche per le app ed evita la necessità per implementare la tua interfaccia utente di autenticazione. La tua app dovrebbe usare questa funzionalità in in combinazione con un'implementazione di una chiave pubblica o segreta per l'autenticazione degli utenti.
Per impostare la durata del timeout durante la quale la stessa chiave può essere riutilizzata dopo che un utente ha avuto esito positivo
autenticati, richiama il nuovo
setUserAuthenticationValidityDurationSeconds()
quando configuri un KeyGenerator
o
KeyPairGenerator
.
Evita di visualizzare eccessivamente la finestra di dialogo di riautenticazione: le app dovrebbero provare a utilizzare
e, se il timeout scade, utilizza la classe
createConfirmDeviceCredentialIntent()
per autenticare nuovamente l'utente nella tua app.
Collegamento dell'app
Questa release migliora il sistema di intent di Android fornendo un collegamento più potente delle app. Questa funzionalità ti consente di associare un'app a un dominio web di tua proprietà. In base a questi associazione, la piattaforma può determinare l'app predefinita da utilizzare per gestire una link web e non chiedere agli utenti di selezionare un'app. Per scoprire come implementare questa funzionalità, consulta Gestione dei link alle app.
Backup automatico per le app
Il sistema ora esegue il backup completo e il ripristino automatici dei dati per le app. La tua app deve avere come target Android 6.0 (livello API 23) per attivare questo comportamento. senza bisogno di aggiungere altro codice. Se gli utenti eliminano i propri Account Google, vengono eliminati anche i dati di backup. Per scoprire in che modo e come configurare gli elementi di cui eseguire il backup nel file system, vedi Configurazione del Backup automatico per le app.
Condivisione diretta
Questa release fornisce le API per rendere la condivisione intuitiva e rapida per gli utenti. Ora puoi definisci i target per la condivisione diretta che avviano un'attività specifica nella tua app. Queste condivisioni dirette i target sono esposti agli utenti mediante il menu Condividi. Questa funzionalità consente agli utenti di condividere contenuti da scegliere come target, ad esempio i contatti, all'interno di altre app. Ad esempio, il target della condivisione diretta avviare un'attività in un'altra app di social network, che consente all'utente di condividere contenuti direttamente con un un amico o una community specifica in quell'app.
Per attivare i target della condivisione diretta, devi definire una classe che estenda i
ChooserTargetService
corso. Dichiara il tuo
nel file manifest. All'interno della dichiarazione, specifica
BIND_CHOOSER_TARGET_SERVICE
e un'autorizzazione
filtro per intent che utilizza
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
ChooserTargetService
, aggiungi un
Elemento <meta-data>
con il nome
"android.service.chooser.chooser_target_service"
nel file 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
Azioni vocali,
ti consente di integrare esperienze vocali di conversazione nelle tue app. Chiama il
Metodo isVoiceInteraction()
per determinare se è stata attivata un'azione vocale
la tua attività. In questo caso, la tua app può utilizzare
VoiceInteractor
corso per richiedere una conferma vocale all'utente, seleziona
da un elenco di opzioni e altro ancora.
La maggior parte delle interazioni vocali ha origine da un'azione vocale dell'utente. Un'attività di interazione vocale può
e iniziare senza input dell'utente. Ad esempio, un'altra app avviata tramite comandi vocali
un'interazione può anche inviare un intento di avviare un'interazione vocale. Per determinare se la tua attività
avviato da una query vocale dell'utente o da un'altra app di interazione vocale, chiama
isVoiceInteractionRoot()
. Se un'altra app ha avviato il tuo
attività, il metodo restituisce false
. L'app potrebbe quindi chiedere all'utente di confermare che
intendevano eseguire questa azione.
Per ulteriori informazioni sull'implementazione delle azioni vocali, consulta le Sito per sviluppatori di Voice Actions.
API Assist
Questa release offre agli utenti un nuovo modo di interagire con le tue app tramite un assistente. Per usare questa , l'utente deve attivare l'assistente per usare il contesto corrente. Una volta abilitata, 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 l'opzione
FLAG_SECURE
flag. Oltre alla sezione
un set standard di informazioni che la piattaforma passa all'assistente, la tua app può condividere
ulteriori informazioni utilizzando la nuova classe AssistContent
.
Per fornire all'assistente ulteriore contesto relativo alla tua app, svolgi i seguenti passaggi:
- Implementa l'interfaccia
Application.OnProvideAssistDataListener
. - Registra questo listener utilizzando
registerOnProvideAssistDataListener()
. - Per fornire informazioni contestuali specifiche per l'attività, sostituisci il valore
onProvideAssistData()
il callback e, facoltativamente, il nuovoonProvideAssistContent()
di Google.
Dispositivi di archiviazione utilizzabili
Con questa release, gli utenti possono adottare dispositivi di archiviazione esterni come le schede SD. L'adozione di un
Il dispositivo di archiviazione esterno cripta e formatta il dispositivo in modo che si comporti come una memoria interna. Questo
consente agli utenti di spostare sia le app sia i relativi dati privati tra dispositivi di archiviazione. Quando
app in movimento, il sistema rispetta
android:installLocation
preferenza nel file manifest.
Se la tua app accede alle API o ai campi seguenti, tieni presente che i percorsi dei file che restituiscono cambieranno in modo dinamico quando l'app viene spostata tra dispositivi di archiviazione interni ed esterni. Quando crei percorsi di file, ti consigliamo vivamente di chiamare queste API sempre in modo dinamico. Non utilizzare percorsi di file impostati come hardcoded o percorsi di file completi creati in precedenza.
Context
metodi:ApplicationInfo
campi:
Per eseguire il debug di questa funzionalità, puoi attivare l'adozione di un'unità USB che connesso a un dispositivo Android tramite un cavo USB On-The-Go (OTG), eseguendo questo comando:
$ adb shell sm set-force-adoptable true
Notifiche
In questa release vengono aggiunte le seguenti modifiche all'API per le notifiche:
- Nuovo livello di filtro
INTERRUPTION_FILTER_ALARMS
che corrisponde alla nuova modalità Non disturbare di Solo sveglie. - Nuovo valore della categoria
CATEGORY_REMINDER
utilizzato per distinguere i promemoria pianificati dall'utente dagli altri eventi (CATEGORY_EVENT
) e sveglie (CATEGORY_ALARM
). - Nuovo corso
Icon
che puoi allegare alle notifiche tramitesetSmallIcon()
esetLargeIcon()
di machine learning. Analogamente, Il metodoaddAction()
ora accetta un oggettoIcon
anziché un l'ID risorsa drawable. - Nuovo metodo
getActiveNotifications()
che consente alle tue app per scoprire quali notifiche sono attive in quel momento.
Supporto per stilo Bluetooth
Questa release fornisce un supporto migliorato per l'input utente tramite uno stilo Bluetooth. Gli utenti possono accoppiare
e connettere uno stilo Bluetooth compatibile con il suo smartphone o tablet. Mentre il dispositivo è connesso, posiziona
le informazioni del touchscreen sono unite alle informazioni sulla pressione e sui pulsanti provenienti dallo stilo
offrono una gamma di espressione più ampia rispetto al solo touchscreen. La tua app può ascoltare
la pressione del pulsante dello stilo ed eseguire azioni secondarie, registrando
View.OnContextClickListener
e
GestureDetector.OnContextClickListener
oggetti nell'attività.
Usa i metodi e le costanti MotionEvent
per rilevare il pulsante dello stilo
interazioni:
- Se l'utente tocca uno stilo con un pulsante sullo schermo della tua app,
Resi del metodo
getTooltype()
TOOL_TYPE_STYLUS
. - Per le app che hanno come target Android 6.0 (livello API 23), la proprietà
getButtonState()
restituisceBUTTON_STYLUS_PRIMARY
quando l'utente preme il pulsante principale dello stilo. Se lo stilo ha un secondo pulsante, viene restituito lo stesso metodo.BUTTON_STYLUS_SECONDARY
quando l'utente lo preme. Se l'utente preme entrambi i pulsanti contemporaneamente, il metodo restituisce entrambi i valori OR insieme (BUTTON_STYLUS_PRIMARY
|BUTTON_STYLUS_SECONDARY
). -
Per le app che hanno come target una versione della piattaforma precedente, il valore
Resi del metodo
getButtonState()
BUTTON_SECONDARY
(per la pressione del pulsante principale dello stilo),BUTTON_TERTIARY
(per la pressione del pulsante secondario dello stilo) o entrambe le opzioni.
Scansione Bluetooth Low Energy migliorata
Se la tua app esegue scansioni Bluetooth Low Energy, utilizza il nuovo
setCallbackType()
per specificare se vuoi che il sistema invii una notifica ai callback la prima volta che trova o vede dopo una
molto tempo, un pacchetto pubblicitario corrispondente all'insieme ScanFilter
. Questo
è più efficiente dal punto di vista energetico rispetto a quello fornito nella precedente versione della piattaforma.
Supporto hotspot 2.0 release 1
In questa versione è stato aggiunto il supporto della specifica Hotspot 2.0 Release 1 su dispositivi Nexus 6 e Nexus 9. A
eseguire il provisioning delle credenziali dell'hotspot 2.0 nella tua app, utilizza i nuovi metodi
WifiEnterpriseConfig
corso, come
setPlmn()
e
setRealm()
. Nella
WifiConfiguration
, puoi impostare
FQDN
e
providerFriendlyName
campi.
Il nuovo metodo isPasspointNetwork()
indica se viene rilevato
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 il nuovo
Display.Mode
API. Se l'interfaccia utente è disegnata a una risoluzione logica inferiore
migliorata a una risoluzione fisica più ampia, tieni presente che la risoluzione fisica
I resi del metodo getPhysicalWidth()
possono essere diversi dalla logica
risoluzione segnalata da getSize()
.
Puoi richiedere al sistema di modificare la risoluzione fisica nella tua app durante l'esecuzione impostando
la proprietà preferredDisplayModeId
dello spazio di archiviazione
finestra. Questa funzionalità è utile se vuoi passare alla risoluzione del display 4K. Con display 4K
, l'UI continua a essere visualizzata alla risoluzione originale (ad esempio 1080p) ed è migliorata
4K, ma SurfaceView
oggetti potrebbero mostrare i contenuti alla risoluzione nativa.
ColorStateList a tema
Gli attributi del tema sono ora supportati in
ColorStateList
per i dispositivi con Android 6.0 (livello API 23). La
Resources.getColorStateList()
e
Resources.getColor()
metodi sono stati
ritirato. Se chiami queste API, chiama il nuovo
Context.getColorStateList()
o
Context.getColor()
. Questi metodi sono
disponibile anche nella libreria compatibile con la versione 4 tramite ContextCompat
.
Funzionalità audio
In questa release sono stati aggiunti miglioramenti all'elaborazione dell'audio su Android, tra cui:
- Supporto per MIDI
con le nuove API
android.media.midi
. Usa queste API per inviare e ricevere messaggi MIDI eventi. - Nuovi
AudioRecord.Builder
eAudioTrack.Builder
per creare rispettivamente oggetti di acquisizione e riproduzione dell'audio digitale e configurare l'audio e le proprietà sink per eseguire l'override delle impostazioni predefinite di sistema. - Hook API per l'associazione di dispositivi audio e di input. Ciò è particolarmente utile se la tua app
consente agli utenti di avviare una ricerca vocale da un controller di gioco o un telecomando collegato ad Android
sulla TV. Il sistema richiama il nuovo
onSearchRequested()
quando l'utente avvia una ricerca. Per determinare se il dispositivo di input dell'utente ha un dispositivo integrato microfono, recupera l'oggettoInputDevice
da quel callback, quindi chiama nuovo metodohasMicrophone()
. - Nuovo metodo
getDevices()
che ti consente recupera un elenco di tutti i dispositivi audio attualmente connessi al sistema. Puoi anche registrareAudioDeviceCallback
oggetto se vuoi che il sistema invii una notifica alla tua app quando un dispositivo audio si connette o si disconnette.
Funzionalità video
In questa release vengono aggiunte nuove funzionalità alle API di elaborazione video, tra cui:
- Nuova classe
MediaSync
che consente il rendering sincrono delle applicazioni stream audio e video. I buffer audio vengono inviati in modo non bloccante e sono che viene restituito tramite un callback. Supporta anche la velocità di riproduzione dinamica. - Nuovo evento
EVENT_SESSION_RECLAIMED
, che indica che 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 Resource Manager abbia recuperato la risorsa multimediale usata dal codec. Con questa eccezione, deve essere rilasciato, dato che è passato allo stato terminale. - Nuova interfaccia di
getMaxSupportedInstances()
per ottenere un suggerimento per il numero massimo di dispositivi supportati di istanze codec simultanee. - Nuovo metodo
setPlaybackParams()
per impostare la velocità di riproduzione multimediale o in slow motion. Allunga o accelera automaticamente la riproduzione audio nelle in congiunzione con il video.
Funzionalità della fotocamera
Questa release include le seguenti nuove API per accedere alla torcia della fotocamera e per rielaborazione delle immagini da parte della fotocamera:
API Flashlight
Se la fotocamera dispone di un flash, puoi chiamare il
setTorchMode()
per attivare o disattivare la modalità torcia dell'unità flash senza aprire la fotocamera. L'app
non possiede la proprietà esclusiva del flash o della fotocamera. La modalità torcia è attivata
e non sarà più disponibile quando il dispositivo della videocamera non è più disponibile o quando un'altra videocamera
le risorse che mantengono la torcia accesa diventano non disponibili. Anche altre app possono chiamare
setTorchMode()
per disattivare la modalità torcia. Quando l'ultima app che ha attivato la modalità torcia è chiusa, la torcia
non è attiva.
Puoi registrare un callback per ricevere notifiche sullo stato della modalità torcia chiamando il
registerTorchCallback()
. La prima volta che il callback viene registrato, viene chiamato immediatamente con la modalità torcia.
stato di tutte le fotocamere attualmente conosciute con un flash. Se la modalità torcia è attiva o
è stato disattivato correttamente,
onTorchModeChanged()
viene richiamato.
API Reprocessing
L'API Camera2
è stata estesa per supportare YUV e private
opaco di rielaborazione dell'immagine. Per determinare se queste funzionalità di rielaborazione sono disponibili,
chiama getCameraCharacteristics()
e controlla se
Chiave REPROCESS_MAX_CAPTURE_STALL
. Se
dispositivo supporta la rielaborazione, puoi creare una sessione di acquisizione con la fotocamera rielaborabile chiamando
createReprocessableCaptureSession()
,
e creare richieste per la rielaborazione del buffer di input.
Utilizza la classe ImageWriter
per collegare il flusso del buffer di ingresso alla videocamera
di rielaborazione dell'input. 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 fotocamera chiamando il metodo
queueInputImage()
.
Se utilizzi un oggetto ImageWriter
insieme a un
Immagine PRIVATE
, l'app non può accedere all'immagine
direttamente i dati. Passa invece l'immagine PRIVATE
direttamente al
ImageWriter
chiamando il
Metodo queueInputImage()
senza copia del buffer.
Il corso ImageReader
ora supporta
Stream di immagini in formato PRIVATE
. Questo supporto consente alla tua app di
mantieni una coda di immagini circolare di ImageReader
immagini di output, selezionane una o
altre immagini e inviale al ImageWriter
per la rielaborazione della fotocamera.
Funzionalità di Android for Work
Questa release include le seguenti nuove API per Android for Work:
- Controlli avanzati per dispositivi di proprietà aziendale monouso: proprietario del dispositivo
ora puoi controllare le seguenti impostazioni per migliorare la gestione
Dispositivi di proprietà aziendale e monouso (COSU):
- .
- Disattiva o riattiva il blocco tastiera con il
setKeyguardDisabled()
. - Disattivare o riattivare la barra di stato (incluse le impostazioni rapide, le notifiche e il
gesto di scorrimento verso l'alto durante la navigazione che avvia Google Now) con
setStatusBarDisabled()
. - Disattiva o riattiva l'avvio protetto con la costante
UserManager
DISALLOW_SAFE_BOOT
. - Evita che lo schermo si spenga quando il dispositivo è collegato alla corrente
STAY_ON_WHILE_PLUGGED_IN
costante.
- Disattiva o riattiva il blocco tastiera con il
- Installazione automatica e disinstallazione di app da parte del proprietario del dispositivo:ora un proprietario del dispositivo può
installare e disinstallare automaticamente le applicazioni utilizzando il
PackageInstaller
indipendenti da Google Play for Work. 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 one-touch il provisioning di kiosk o di altri dispositivi simili senza attivare un Account Google. - Accesso invisibile 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 può ora chiamareonChoosePrivateKeyAlias()
per fornire l'alias in modo invisibile all'applicazione richiedente. Questa funzione ti consente di concedere l'accesso delle app gestite ai certificati senza interazione da parte 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 sistema aggiornare, ad esempio nel caso di un dispositivo kiosk, oppure posticipare l'aggiornamento ed evitare che venga prese dall'utente per un massimo di 30 giorni. Inoltre, un amministratore può impostare una finestra temporale giornaliera che è necessario aggiornare, ad esempio durante gli orari in cui un dispositivo kiosk non è in uso. Quando è disponibile un aggiornamento di sistema, il sistema controlla se l'app controller dei criteri dei dispositivi ha impostato un sistema aggiornano i criteri e si comportano di conseguenza. -
Installazione dei certificati con delega:ora un proprietario di profilo o dispositivo può concedere un
app di terze parti la possibilità di chiamare questi certificati
DevicePolicyManager
API di gestione dei dati: - Monitoraggio dell'utilizzo dei dati. Un proprietario di un profilo o di un dispositivo ora può richiedere
statistiche sull'utilizzo dei dati visibili in Impostazioni > Utilizzo dei dati usando il nuovo
NetworkStatsManager
. Ai proprietari dei profili viene concesso automaticamente l'autorizzazione a eseguire query sui dati del profilo che gestisce, mentre i proprietari dei dispositivi hanno accesso ai dati sull'utilizzo dell'utente principale gestito. - Gestione delle autorizzazioni di runtime:
Un proprietario di un profilo o di un dispositivo può impostare un criterio di autorizzazione per tutte le richieste di runtime di tutte le applicazioni
setPermissionPolicy()
, per richiedere all'utente di concedere l'autorizzazione oppure concedere o concedere automaticamente neghi l'autorizzazione in silenzio. Se quest'ultimo viene configurato, l'utente non potrà modificare la selezione effettuata dal profilo o dal proprietario del dispositivo nella schermata delle autorizzazioni dell'app in Impostazioni. - VPN nelle Impostazioni. Le app VPN sono ora visibili nelle Impostazioni > Altro > VPN. Inoltre, le notifiche che accompagnano l'utilizzo della VPN sono ora specifiche per il modo in cui la VPN configurato. Per il proprietario del profilo, le notifiche riguardano se la VPN è configurata o meno per un profilo gestito, personale o entrambi. Per il proprietario di un dispositivo, le notifiche vengono e specifica se la VPN è 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 all'utente che si trova all'interno del profilo di lavoro.