API Android 6.0

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" />
Dispositivo mobile che mostra la funzionalità di autenticazione tramite impronta

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:

  1. Installa Android SDK Tools Revisione 24.3, se non l'hai ancora fatto.
  2. Registra una nuova impronta nell'emulatore andando all'indirizzo Impostazioni > Sicurezza > Impronta digitale, quindi segui le istruzioni per la registrazione.
  3. 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> seguito finger 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

Parte inferiore di un dispositivo mobile su cui è visualizzata la funzionalità Direct Share

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:

  1. Implementa l'interfaccia Application.OnProvideAssistDataListener.
  2. Registra questo listener utilizzando registerOnProvideAssistDataListener().
  3. Per fornire informazioni contestuali specifiche per l'attività, sostituisci il valore onProvideAssistData() il callback e, facoltativamente, il nuovo onProvideAssistContent() 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.

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:

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:

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 e AudioTrack.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'oggetto InputDevice da quel callback, quindi chiama nuovo metodo hasMicrophone().
  • Nuovo metodo getDevices() che ti consente recupera un elenco di tutti i dispositivi audio attualmente connessi al sistema. Puoi anche registrare AudioDeviceCallback 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:

  1. Chiama il metodo dequeueInputImage().
  2. Riempi i dati nel buffer di input.
  3. 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):
  • 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 chiamare onChoosePrivateKeyAlias() 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:
  • Dispositivo mobile su cui è visualizzata la funzione di notifica dello stato di lavoro in Android for Work
  • 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.