Android 15 introduce fantastiche funzionalità e API per gli sviluppatori. Le sezioni seguenti riepilogano queste funzionalità per aiutarti a iniziare a utilizzare le API correlate.
Per un elenco dettagliato delle API aggiunte, modificate e rimosse, leggi il report diff API. Per informazioni dettagliate sulle API aggiunte, visita la documentazione di riferimento delle API Android. Per Android 15, cerca le API aggiunte nel livello API 35. Per scoprire le aree in cui le modifiche alla piattaforma potrebbero influire sulle tue app, consulta le modifiche al comportamento di Android 15 per le app che hanno come target Android 15 e per tutte le app.
Fotocamera e contenuti multimediali
Android 15 include una serie di funzionalità che migliorano l'esperienza con la fotocamera e i contenuti multimediali e che ti danno accesso a strumenti e hardware per aiutare i creator a dare vita alla loro visione su Android.
Per saperne di più sulle funzionalità e sulle soluzioni per sviluppatori più recenti per i contenuti multimediali e la fotocamera di Android, guarda il talk Building modern Android media and camera experiences di Google I/O.
Low Light Boost
Android 15 introduces Low Light Boost, an auto-exposure mode available to both Camera 2 and the night mode camera extension. Low Light Boost adjusts the exposure of the Preview stream in low-light conditions. This is different from how the night mode camera extension creates still images, because night mode combines a burst of photos to create a single, enhanced image. While night mode works very well for creating a still image, it can't create a continuous stream of frames, but Low Light Boost can. Thus, Low Light Boost enables camera capabilities, such as:
- Providing an enhanced image preview, so users are better able to frame their low-light pictures
- Scanning QR codes in low light
If you enable Low Light Boost, it automatically turns on when there's a low light level, and turns off when there's more light.
Apps can record off the Preview stream in low-light conditions to save a brightened video.
For more information, see Low Light Boost.
Controlli della videocamera in-app
Android 15 aggiunge un'estensione per un maggiore controllo sull'hardware e sugli algoritmi della fotocamera sui dispositivi supportati:
- Regolazioni avanzate dell'intensità del flash che consentono di controllare con precisione l'intensità del flash sia in modalità
SINGLE
sia in modalitàTORCH
durante l'acquisizione delle immagini.
Controllo dell'headroom HDR
Android 15 chooses HDR headroom that is appropriate for the underlying device
capabilities and bit-depth of the panel. For pages that have lots of SDR
content, such as a messaging app displaying a single HDR thumbnail, this
behavior can end up adversely influencing the perceived brightness of the SDR
content. Android 15 lets you control the HDR headroom with
setDesiredHdrHeadroom
to strike a balance between SDR
and HDR content.

Controllo del loudness
Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.
To enable this feature, you need to ensure loudness metadata is available in
your AAC content and enable the platform feature in your app. For this, you
instantiate a LoudnessCodecController
object by
calling its create factory method with the audio
session ID from the associated AudioTrack
; this
automatically starts applying audio updates. You can pass an
OnLoudnessCodecUpdateListener
to modify or filter
loudness parameters before they are applied on the
MediaCodec
.
// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = …
val audioTrack = AudioTrack.Builder()
.setSessionId(sessionId)
.build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
val lcController = LoudnessCodecController.create(mSessionId)
// Starts applying audio updates for each added MediaCodec
}
AndroidX media3 ExoPlayer will also be updated to use the
LoudnessCodecController
APIs for a seamless app integration.
Dispositivi MIDI virtuali 2.0
Android 13 ha aggiunto il supporto per la connessione ai dispositivi MIDI 2.0 tramite USB, che comunicano utilizzando Universal MIDI Packets (UMP). Android 15 estende il supporto UMP alle app MIDI virtuali, consentendo alle app di composizione di controllare le app di sintesi come un dispositivo MIDI 2.0 virtuale, proprio come faresti con un dispositivo MIDI 2.0 USB.
Decodifica software AV1 più efficiente
dav1d, il popolare decodificatore software AV1 di VideoLAN, è disponibile per i dispositivi Android che non supportano la decodifica AV1 in hardware. dav1d è fino a 3 volte più performante del precedente decodificatore software AV1, il che consente la riproduzione di AV1 HD a un maggior numero di utenti, inclusi alcuni dispositivi di fascia bassa e media.
La tua app deve attivare l'utilizzo di dav1d invocandolo per nome"c2.android.av1-dav1d.decoder"
. In un aggiornamento successivo, dav1d diventerà il decodificatore software AV1 predefinito. Questo supporto è standardizzato e sottoposto a backporting sui dispositivi Android 11 che ricevono gli aggiornamenti di sistema di Google Play.
Produttività e strumenti per gli sviluppatori
La maggior parte del nostro lavoro per migliorare la tua produttività si concentra su strumenti come Android Studio, Jetpack Compose e le librerie Android Jetpack, ma cerchiamo sempre modi nella piattaforma per aiutarti a realizzare più facilmente la tua visione.
Aggiornamenti di OpenJDK 17
Android 15 continues the work of refreshing Android's core libraries to align with the features in the latest OpenJDK LTS releases.
The following key features and improvements are included:
- Quality-of-life improvements around NIO buffers
- Streams
- Additional
math
andstrictmath
methods util
package updates including sequencedcollection
,map
, andset
ByteBuffer
support inDeflater
- Security updates such as
X500PrivateCredential
and security key updates
These APIs are updated on over a billion devices running Android 12 (API level 31) and higher through Google Play System updates, so you can target the latest programming features.
Miglioramenti al PDF
Android 15 includes substantial improvements to the PdfRenderer
APIs. Apps can incorporate advanced features such as rendering
password-protected files, annotations, form editing,
searching, and selection with copy. Linearized PDF
optimizations are supported to speed local PDF viewing and reduce resource use.
The Jetpack PDF library uses these APIs to simplify adding PDF
viewing capabilities to your app.

The PdfRenderer
has been moved to a module that can be updated using Google
Play system updates independent of the platform release, and we're supporting
these changes back to Android 11 (API level 30) by creating a compatible
pre-Android 15 version of the API surface, called
PdfRendererPreV
.
Perfezionamenti del cambio di lingua automatico
Android 14 ha aggiunto il riconoscimento multilingue on-device nell'audio con il passaggio automatico tra le lingue, ma questo può causare l'eliminazione di parole, soprattutto quando le lingue cambiano con una pausa minore tra le due frasi. Android 15 aggiunge controlli aggiuntivi per aiutare le app a ottimizzare questo passaggio in base al loro caso d'uso.
EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
limita il passaggio automatico all'inizio della sessione audio, mentre EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
disattiva il passaggio di lingua dopo un numero definito di passaggi. Queste opzioni sono particolarmente utili se prevedi che durante la sessione verrà parlata una sola lingua che deve essere rilevata automaticamente.
API per caratteri variabili OpenType migliorata
Android 15 migliora l'usabilità del carattere variabile OpenType. Ora puoi
Creare un'istanza FontFamily
da un carattere variabile senza specificare
degli assi di ponderazione con l'API buildVariableFamily
. Il renderer di testo esegue l'override
il valore dell'asse wght
affinché corrisponda al testo visualizzato.
Se utilizzi la nuova API, questo semplifica il codice per la creazione di una Typeface
considerevolmente:
Kotlin
val newTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build()
Java
Typeface newTypeface = Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf").build()) .buildVariableFamily()) .build();
In precedenza, per creare lo stesso Typeface
, era necessario molto più codice:
Kotlin
val oldTypeface = Typeface.CustomFallbackBuilder( FontFamily.Builder( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build()) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ).build() ).build()
Java
Typeface oldTypeface = new Typeface.CustomFallbackBuilder( new FontFamily.Builder( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 400") .setWeight(400) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 100") .setWeight(100) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 200") .setWeight(200) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 300") .setWeight(300) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 500") .setWeight(500) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 600") .setWeight(600) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 700") .setWeight(700) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 800") .setWeight(800) .build() ) .addFont( new Font.Builder(assets, "RobotoFlex.ttf") .setFontVariationSettings("'wght' 900") .setWeight(900) .build() ) .build() ).build();
Ecco un esempio di come è stata creata una risorsa Typeface
con sia la vecchia che la nuova API
esegue il rendering:
In questo esempio, il Typeface
creato con l'API precedente non ha il valore
capacità di creare spessori di carattere precisi per i modelli 350, 450, 550 e 650
Font
, quindi il renderer torna al peso più vicino. Quindi
In questo caso, viene eseguito il rendering di 300 anziché 350, di 400 invece di 450 e
così via. Al contrario, l'elemento Typeface
creato con le nuove API crea in modo dinamico
un'istanza Font
per un determinato peso, in modo che le ponderazioni siano accurate per 350,
450, 550 e 650.
Controlli granulari delle interruzioni di riga
Starting in Android 15, a TextView
and the underlying
line breaker can preserve the given portion of text in the same line to improve
readability. You can take advantage of this line break customization by using
the <nobreak>
tag in string resources or
createNoBreakSpan
. Similarly, you can preserve words from
hyphenation by using the <nohyphen>
tag or
createNoHyphenationSpan
.
For example, the following string resource doesn't include a line break, and renders with the text "Pixel 8 Pro." breaking in an undesirable place:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
In contrast, this string resource includes the <nobreak>
tag, which wraps the
phrase "Pixel 8 Pro." and prevents line breaks:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
The difference in how these strings are rendered is shown in the following images:

<nobreak>
tag.
<nobreak>
tag.Archiviazione delle app
L'anno scorso Android e Google Play hanno annunciato il supporto dell'archiviazione delle app, consentendo agli utenti di liberare spazio rimuovendo parzialmente dal dispositivo le app utilizzate di rado che sono state pubblicate utilizzando Android App Bundle su Google Play. Android 15 include il supporto a livello di sistema operativo per l'archiviazione delle app e l'annullamento dell'archiviazione, semplificando l'implementazione da parte di tutti gli store.
Le app con l'autorizzazione REQUEST_DELETE_PACKAGES
possono chiamare il
PackageInstaller
metodo requestArchive
per richiedere l'archiviazione di un
pacchetto di app installato, che rimuove l'APK e gli eventuali file memorizzati nella cache, ma persiste
dati utente. Le app archiviate vengono restituite come app visualizzabili tramite la
API di LauncherApps
; gli utenti vedranno un'interfaccia utente
per evidenziare che tali utenti
vengono archiviate. Se un utente tocca un'app archiviata, l'utente che ha eseguito l'installazione responsabile
riceverà una richiesta di annullamento dell'archiviazione del file e il processo di ripristino può
monitorate dalla trasmissione ACTION_PACKAGE_ADDED
.
Attivare la modalità a 16 kB su un dispositivo utilizzando le opzioni sviluppatore

Attiva l'opzione sviluppatore Avvia con dimensione pagina 16 kB per avviare un dispositivo in modalità a 16 kB.
A partire da Android 15 QPR1, puoi utilizzare l'opzione sviluppatore disponibile su alcuni dispositivi per avviare il dispositivo in modalità 16 KB ed eseguire test sul dispositivo. Prima di utilizzare l'opzione sviluppatore, vai a Impostazioni > Sistema > Aggiornamenti software e applica gli aggiornamenti disponibili.
Questa opzione sviluppatore è disponibile sui seguenti dispositivi:
Pixel 8 e 8 Pro (con Android 15 QPR1 o versioni successive)
Pixel 8a (con Android 15 QPR1 o versioni successive)
Pixel 9, 9 Pro e 9 Pro XL (con Android 15 QPR2 Beta 2 o versioni successive)
Grafica
Android 15 offre i più recenti miglioramenti grafici, tra cui ANGLE e aggiunte al sistema grafico Canvas.
Modernizzazione dell'accesso alla GPU di Android
Android hardware has evolved quite a bit from the early days where the core OS would run on a single CPU and GPUs were accessed using APIs based on fixed-function pipelines. The Vulkan® graphics API has been available in the NDK since Android 7.0 (API level 24) with a lower-level abstraction that better reflects modern GPU hardware, scales better to support multiple CPU cores, and offers reduced CPU driver overhead — leading to improved app performance. Vulkan is supported by all modern game engines.
Vulkan is Android's preferred interface to the GPU. Therefore, Android 15 includes ANGLE as an optional layer for running OpenGL® ES on top of Vulkan. Moving to ANGLE will standardize the Android OpenGL implementation for improved compatibility, and, in some cases, improved performance. You can test out your OpenGL ES app stability and performance with ANGLE by enabling the developer option in Settings -> System -> Developer Options -> Experimental: Enable ANGLE on Android 15.
The Android ANGLE on Vulkan roadmap

As part of streamlining our GPU stack, going forward we will be shipping ANGLE as the GL system driver on more new devices, with the future expectation that OpenGL/ES will be only available through ANGLE. That being said, we plan to continue support for OpenGL ES on all devices.
Recommended next steps
Use the developer options to select the ANGLE driver for OpenGL ES and test your app. For new projects, we strongly encourage using Vulkan for C/C++.
Miglioramenti per Canvas
Android 15 continua la nostra modernizzazione del sistema grafico Canvas di Android con funzionalità aggiuntive:
Matrix44
fornisce una matrice 4x4 per la trasformazione delle coordinate da utilizzare quando vuoi manipolare la tela in 3D.clipShader
interseca il clip corrente con lo shader specificato, mentreclipOutShader
imposta il clip sulla differenza tra il clip corrente e lo shader, trattando ciascuno lo shader come una maschera alfa. Ciò consente di disegnare in modo efficiente forme complesse.
Prestazioni e batteria
Android continua a concentrarsi sull'aiutarti a migliorare il rendimento e la qualità delle tue app. Android 15 introduce API che contribuiscono a rendere più efficienti le attività nella tua app, a ottimizzare le prestazioni dell'app e a raccogliere approfondimenti sulle tue app.
Per le best practice per l'efficienza della batteria, il debug dell'utilizzo di rete ed energia e dettagli su come stiamo migliorando l'efficienza della batteria del lavoro in background in Android 15 e nelle versioni recenti di Android, guarda il talk Migliorare l'efficienza della batteria del lavoro in background su Android di Google I/O.
API ApplicationStartInfo
In previous versions of Android, app startup has been a bit of a mystery. It was
challenging to determine within your app whether it started from a cold, warm,
or hot state. It was also difficult to know how long your app spent during the
various launch phases: forking the process, calling onCreate
, drawing the
first frame, and more. When your Application
class was instantiated, you had no
way of knowing whether the app started from a broadcast, a content provider, a
job, a backup, boot complete, an alarm, or an Activity
.
The ApplicationStartInfo
API on Android 15 provides
all of this and more. You can even choose to add your own timestamps into the
flow to help collect timing data in one place. In addition to collecting
metrics, you can use ApplicationStartInfo
to help directly optimize app
startup; for example, you can eliminate the costly instantiation of UI-related
libraries within your Application
class when your app is starting up due to a
broadcast.
Informazioni dettagliate sulle dimensioni dell'app
Da Android 8.0 (livello API 26), Android include l'API StorageStats.getAppBytes
che riassume le dimensioni installate di un'app come un singolo numero di byte, ovvero la somma delle dimensioni dell'APK, delle dimensioni dei file estratti dall'APK e dei file generati sul dispositivo, come il codice compilato in anticipo (AOT). Questo numero non è molto utile per capire in che modo la tua app utilizza lo spazio di archiviazione.
Android 15 aggiunge l'API StorageStats.getAppBytesByDataType([type])
, che consente di ottenere informazioni su come la tua app utilizza tutto questo spazio, inclusi i raggruppamenti dei file APK, il codice AOT e relativo all'accelerazione, i metadati dex, le librerie e i profili guidati.
Profilazione gestita dalle app
Android 15 include la classe ProfilingManager
,
che ti consente di raccogliere informazioni sul profiling all'interno della tua app, ad esempio dump heap, profili heap, campionamento dello stack e altro ancora. Fornisce un callback alla tua app con un tag fornito per identificare il file di output, che viene inviato alla directory dei file della tua app. L'API limita la frequenza per ridurre al minimo
l'impatto sulle prestazioni.
Per semplificare la creazione di richieste di profilazione nella tua app, ti consigliamo di utilizzare l'Profiling
API AndroidX corrispondente, disponibile in Core 1.15.0-rc01 o versioni successive.
Miglioramenti al database SQLite
Android 15 introduce le API SQLite che espongono funzionalità avanzate motore SQLite sottostante che ha come target specifici problemi di prestazioni che possono manifest nelle app. Queste API sono incluse nell'aggiornamento di SQLite alla versione 3.44.3.
Gli sviluppatori devono consultare le best practice per le prestazioni di SQLite per ottenere il massimo dal proprio database SQLite, in particolare quando si lavora con database di grandi dimensioni o quando si eseguono query sensibili alla latenza.
- Transazioni differite di sola lettura: quando emetti transazioni di sola lettura (non includono istruzioni di scrittura), utilizza
beginTransactionReadOnly()
ebeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
per emettere transazioniDEFERRED
di sola lettura. Queste transazioni possono essere eseguite in contemporanea e, se il database è in modalità WAL, eseguita in concomitanza conIMMEDIATE
oEXCLUSIVE
transazioni. - Conteggi e ID righe: sono state aggiunte API per recuperare il conteggio
righe o l'ultimo ID riga inserito senza inviare un'ulteriore query.
getLastChangedRowCount()
restituisce il numero di righe che sono stati inseriti, aggiornati o eliminati dall'istruzione SQL più recente all'interno la transazione corrente egetTotalChangedRowCount()
restituisce il conteggio della connessione corrente.getLastInsertRowId()
restituiscerowid
dell'ultima riga da inserire nella connessione corrente. - Istruzioni non elaborate: invia un'istruzione SQlite non elaborata, aggirando la convenienza e l'eventuale overhead di elaborazione aggiuntivo che potrebbe subire.
Aggiornamenti di Android Dynamic Performance Framework
Android 15 continua il nostro investimento nell'Android Dynamic Performance Framework (ADPF), un insieme di API che consente a giochi e app ad alte prestazioni di interagire più direttamente con i sistemi di alimentazione e termici dei dispositivi Android. Sui dispositivi supportati, Android 15 aggiunge le funzionalità ADPF:
- Una modalità di risparmio energetico per le sessioni di suggerimenti per indicare che i thread associati devono dare la priorità al risparmio energetico rispetto alle prestazioni, ideale per i carichi di lavoro in background di lunga durata.
- Le durate del lavoro della GPU e della CPU possono essere entrambe registrate nelle sessioni di suggerimenti, consentendo al sistema di regolare le frequenze della CPU e della GPU insieme per soddisfare al meglio le richieste del carico di lavoro.
- Soglie di headroom termico per interpretare il possibile stato di throttling termico in base alla previsione dell'headroom.
Per scoprire di più su come utilizzare ADPF nelle tue app e nei tuoi giochi, consulta la documentazione.
Privacy
Android 15 include una serie di funzionalità che aiutano gli sviluppatori di app a proteggere la privacy degli utenti.
Rilevamento della registrazione dello schermo
Android 15 adds support for apps to detect that they are being recorded. A callback is invoked whenever the app transitions between being visible or invisible within a screen recording. An app is considered visible if activities owned by the registering process's UID are being recorded. This way, if your app is performing a sensitive operation, you can inform the user that they're being recorded.
val mCallback = Consumer<Int> { state ->
if (state == SCREEN_RECORDING_STATE_VISIBLE) {
// We're being recorded
} else {
// We're not being recorded
}
}
override fun onStart() {
super.onStart()
val initialState =
windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
mCallback.accept(initialState)
}
override fun onStop() {
super.onStop()
windowManager.removeScreenRecordingCallback(mCallback)
}
Funzionalità IntentFilter ampliate
Android 15 builds in support for more precise Intent
resolution through
UriRelativeFilterGroup
, which contains a set of
UriRelativeFilter
objects that form a set of Intent
matching rules that must each be satisfied, including URL query parameters, URL
fragments, and blocking or exclusion rules.
These rules can be defined in the AndroidManifest
XML file with the
<uri-relative-filter-group>
tag, which can optionally include an
android:allow
tag. These tags can contain <data>
tags that use existing data
tag attributes as well as the android:query
and android:fragment
attributes.
Here's an example of the AndroidManifest
syntax:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="astore.com" />
<uri-relative-filter-group>
<data android:pathPrefix="/auth" />
<data android:query="region=na" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:query="mobileoptout=true" />
</uri-relative-filter-group>
<uri-relative-filter-group android:allow="false">
<data android:pathPrefix="/auth" />
<data android:fragmentPrefix="faq" />
</uri-relative-filter-group>
</intent-filter>
Spazio privato
Private space lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. The private space uses a separate user profile. The user can choose to use the device lock or a separate lock factor for the private space.
Apps in the private space show up in a separate container in the launcher, and are hidden from the recents view, notifications, settings, and from other apps when the private space is locked. User-generated and downloaded content (such as media or files) and accounts are separated between the private space and the main space. The system sharesheet and the photo picker can be used to give apps access to content across spaces when the private space is unlocked.
Users can't move existing apps and their data into the private space. Instead, users select an install option in the private space to install an app using whichever app store they prefer. Apps in the private space are installed as separate copies from any apps in the main space (new copies of the same app).
When a user locks the private space, the profile is stopped. While the profile is stopped, apps in the private space are no longer active and can't perform foreground or background activities, including showing notifications.
We recommend that you test your app with private space to make sure your app works as expected, especially if your app falls into one of the following categories:
- Apps with logic for work profiles that assumes that any installed copies of their app that aren't in the main profile are in the work profile.
- Medical apps
- Launcher apps
- App store apps
Eseguire query sulla selezione utente più recente per l'accesso alle foto selezionate
Apps can now highlight only the most-recently-selected photos and videos when
partial access to media permissions is granted. This feature can improve
the user experience for apps that frequently request access to photos and
videos. To use this feature in your app, enable the
QUERY_ARG_LATEST_SELECTION_ONLY
argument when querying MediaStore
through ContentResolver
.
Kotlin
val externalContentUri = MediaStore.Files.getContentUri("external") val mediaColumns = arrayOf( FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE, ) val queryArgs = bundleOf( // Return only items from the last selection (selected photos access) QUERY_ARG_LATEST_SELECTION_ONLY to true, // Sort returned items chronologically based on when they were added to the device's storage QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC", QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?", QUERY_ARG_SQL_SELECTION_ARGS to arrayOf( FileColumns.MEDIA_TYPE_IMAGE.toString(), FileColumns.MEDIA_TYPE_VIDEO.toString() ) )
Java
Uri externalContentUri = MediaStore.Files.getContentUri("external"); String[] mediaColumns = { FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE }; Bundle queryArgs = new Bundle(); queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC"); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?"); queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] { String.valueOf(FileColumns.MEDIA_TYPE_IMAGE), String.valueOf(FileColumns.MEDIA_TYPE_VIDEO) });
Privacy Sandbox su Android
Android 15 include le ultime estensioni di Android Ad Services, che incorporano la versione più recente di Privacy Sandbox su Android. Questa aggiunta fa parte del nostro impegno per sviluppare tecnologie che migliorino la privacy degli utenti e consentano esperienze pubblicitarie efficaci e personalizzate per le app mobile. Nella nostra pagina di Privacy Sandbox puoi trovare ulteriori informazioni su Privacy Sandbox su Android, sull'Anteprima per gli sviluppatori e sui programmi beta per iniziare.
Connessione Salute
Android 15 integrates the latest extensions around Health Connect by Android, a secure and centralized platform to manage and share app-collected health and fitness data. This update adds support for additional data types across fitness, nutrition, skin temperature, training plans, and more.
Skin temperature tracking allows users to store and share more accurate temperature data from a wearable or other tracking device.
Training plans are structured workout plans to help a user achieve their fitness goals. Training plans support includes a variety of completion and performance goals:
- Completion goals around calories burned, distance, duration, repetition, and steps.
- Performance goals around as many repetitions as possible (AMRAP), cadence, heart rate, power, perceived rate of exertion, and speed.
Learn more about the latest updates to Health Connect in Android in the Building adaptable experiences with Android Health talk from Google I/O.
Condivisione della schermata dell'app
Android 15 supporta la condivisione dello schermo delle app, quindi gli utenti possono condividere o registrare solo una finestra dell'app anziché l'intero schermo del dispositivo. Questa funzionalità, attivata per la prima volta in Android 14 QPR2, include callback di MediaProjection
che consentono alla tua app di personalizzare l'esperienza di condivisione schermo dell'app. Tieni presente che per le app che hanno come target Android 14 (livello API 34) o versioni successive, il consenso dell'utente è obbligatorio per ogni sessione di acquisizione MediaProjection
.
Esperienza utente e UI di sistema
Android 15 offre a sviluppatori di app e utenti maggiore controllo e flessibilità per configurare il dispositivo in base alle proprie esigenze.
Per scoprire di più su come utilizzare i miglioramenti più recenti di Android 15 per migliorare l'esperienza utente della tua app, guarda la presentazione Migliorare l'esperienza utente della tua app Android di Google I/O.
Anteprime dei widget più ricche con l'API Generated Previews
Prima di Android 15, l'unico modo per fornire anteprime del selettore widget era specificare una risorsa immagine o layout statica. Queste anteprime spesso sono diverse molto dall'aspetto del widget reale quando è posizionato sulla home page schermo. Inoltre, non è possibile creare risorse statiche con Jetpack Glance, quindi Riepilogo uno sviluppatore ha dovuto fare uno screenshot del widget o creare un layout XML l'anteprima del widget.
Android 15 aggiunge il supporto per le anteprime generate. Ciò significa che il widget dell'app
i provider possono generare RemoteViews
da usare come anteprima del selettore,
di una risorsa statica.

API Push
Le app possono fornire anteprime generate tramite un'API push. Le app possono fornire anteprime in qualsiasi momento del loro ciclo di vita e non ricevono una richiesta esplicita dall'host per fornire anteprime. Le anteprime vengono conservate in AppWidgetService
e gli autori possono richiederle on demand. L'esempio seguente carica una risorsa di layout del widget XML e la imposta come anteprima:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
Il flusso previsto è:
- In qualsiasi momento, il fornitore del widget chiama
setWidgetPreview
. Le anteprime fornite vengono conservate inAppWidgetService
insieme ad altre informazioni del fornitore. setWidgetPreview
invia una notifica agli host di un'anteprima aggiornata tramite il callbackAppWidgetHost.onProvidersChanged
. In risposta, l'host del widget ricarica tutte le informazioni del fornitore.- Quando viene visualizzata un'anteprima del widget, l'host controlla
AppWidgetProviderInfo.generatedPreviewCategories
e, se la categoria scelta è disponibile, chiamaAppWidgetManager.getWidgetPreview
per restituire l'anteprima salvata per questo fornitore.
Quando chiamare setWidgetPreview
Poiché non è necessario richiamare le anteprime, le app possono scegliere di inviare vengono visualizzate in qualsiasi momento quando sono in esecuzione. La frequenza con cui aggiornare l'anteprima dipende dal caso d'uso del widget.
L'elenco seguente descrive le due categorie principali di casi d'uso di anteprima:
- Fornitori che mostrano dati reali nelle anteprime dei widget, ad esempio informazioni personalizzate o recenti. Questi fornitori possono impostare l'anteprima dopo che l'utente ha eseguito l'accesso o ha completato la configurazione iniziale nella propria app. Dopodiché, possono configurare un'attività periodica per aggiornare le anteprime con la cadenza scelta. Esempi di questo tipo di widget possono essere foto, calendario, meteo o notizie.
- Fornitori che mostrano informazioni statiche nelle anteprime o nei widget di azioni rapide che non mostrano dati. Questi fornitori possono impostare le anteprime una sola volta, quando viene avviata per la prima volta. Alcuni esempi di questo tipo di widget includono una guida rapida widget azioni o widget scorciatoie di Chrome.
Alcuni fornitori potrebbero mostrare anteprime statiche nel selettore della modalità Hub, ma informazioni reali nel selettore della schermata Home. Questi fornitori devono seguire le indicazioni per entrambi i casi d'uso per impostare le anteprime.
Picture in picture
Android 15 introduces changes in Picture-in-Picture (PiP) ensuring an even smoother transition when entering into PiP mode. This will be beneficial for apps having UI elements overlaid on top of their main UI, which goes into PiP.
Developers use the onPictureInPictureModeChanged
callback to define logic
that toggles the visibility of the overlaid UI elements. This callback is
triggered when the PiP enter or exit animation is completed. Beginning in
Android 15, the PictureInPictureUiState
class includes another state.
With this UI state, apps targeting Android 15 (API level 35) will observe the
Activity#onPictureInPictureUiStateChanged
callback being invoked with
isTransitioningToPip()
as soon as the PiP animation starts. There are
many UI elements that are not relevant for the app when it is in PiP mode, for
example views or layout that include information such as suggestions, upcoming
video, ratings, and titles. When the app goes to PiP mode, use the
onPictureInPictureUiStateChanged
callback to hide these UI elements. When the
app goes to full screen mode from the PiP window, use
onPictureInPictureModeChanged
callback to unhide these elements, as shown in
the following examples:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
This quick visibility toggle of irrelevant UI elements (for a PiP window) helps ensure a smoother and flicker-free PiP enter animation.
Regole Non disturbare migliorate
AutomaticZenRule
consente alle app di personalizzare la funzionalità Attenzione
Gestione delle regole (Non disturbare) e decidere quando attivarle o disattivarle
che li rappresentano. Android 15 migliora notevolmente queste regole con l'obiettivo di migliorare
un'esperienza utente positiva. Sono inclusi i seguenti miglioramenti:
- Aggiunta di tipi a
AutomaticZenRule
, in modo che il sistema possa applicare tipi per alcune regole. - L'aggiunta di un'icona a
AutomaticZenRule
, che contribuisce a rendere le modalità più riconoscibili. - Aggiunta a
AutomaticZenRule
di una stringatriggerDescription
che descriva le condizioni in cui la regola deve diventare attiva per l'utente. - Aggiunta
ZenDeviceEffects
aAutomaticZenRule
, consentendo alle regole di attivare elementi come scala di grigi schermo, modalità notturna o attenuazione dello sfondo.
Impostare VibrationEffect per i canali di notifica
Android 15 supporta l'impostazione di vibrazioni intense per le notifiche in arrivo tramite
canale utilizzando NotificationChannel.setVibrationEffect
,
i tuoi utenti possano distinguere tra diversi tipi di notifiche senza
dover guardare il proprio dispositivo.
Etichetta della barra di stato della proiezione di contenuti multimediali e arresto automatico
La proiezione di contenuti multimediali può esporre informazioni private degli utenti. Un nuovo chip della barra di stato in evidenza informa gli utenti di eventuali proiezioni dello schermo in corso. Gli utenti possono toccare il chip per interrompere la trasmissione, la condivisione o la registrazione dello schermo. Inoltre, per un'esperienza utente più intuitiva, qualsiasi proiezione dello schermo in corso ora si interrompe automaticamente quando lo schermo del dispositivo è bloccato.

Schermi grandi e fattori di forma
Android 15 offre alle tue app il supporto per sfruttare al meglio i fattori di forma di Android, inclusi schermi di grandi dimensioni, smartphone con apertura a libro e pieghevoli.
Multitasking migliore su schermo grande
Android 15 offre agli utenti modi migliori per svolgere più attività contemporaneamente su dispositivi con schermi grandi. Ad esempio, gli utenti possono salvare le combinazioni di app con schermo diviso preferite per accedervi rapidamente e fissare la barra delle app sullo schermo per passare rapidamente da un'app all'altra. Ciò significa rendere l'app adattiva più importante che mai.
Google I/O offre sessioni su Creazione di app Android adattabili e Creazione di UI con la libreria adattabile Material 3 che possono essere utili. La nostra documentazione contiene ulteriori informazioni per aiutarti a creare design per schermi di grandi dimensioni.
Supporto dello schermo della cover
La tua app può dichiarare una proprietà utilizzata da Android 15 per consentire la visualizzazione di Application
o Activity
sulle piccole schermate di copertina dei dispositivi pieghevoli supportati. Questi schermi sono troppo piccoli per essere considerati come target compatibili per l'esecuzione delle app per Android, ma la tua app può attivare il loro supporto, rendendola disponibile in più luoghi.
Connettività
Android 15 aggiorna la piattaforma per consentire alla tua app di accedere agli ultimi progressi nelle tecnologie di comunicazione e wireless.
Supporto satellitare
Android 15 continua a estendere il supporto delle piattaforme per la connettività satellitare e include alcuni elementi dell'interfaccia utente per garantire un'esperienza utente coerente panorama della connettività satellitare.
Le app possono utilizzare ServiceState.isUsingNonTerrestrialNetwork()
per rilevare quando un dispositivo è connesso a un satellite, in modo da avere una maggiore consapevolezza del motivo per cui i servizi di rete completi potrebbero non essere disponibili. Inoltre, Android 15 supporta le app SMS e MMS, nonché le app RCS precaricate, per utilizzare la connettività satellitare per l'invio e la ricezione di messaggi.

Esperienze NFC più fluide
Android 15 is working to make the tap to pay experience more seamless and
reliable while continuing to support Android's robust NFC app ecosystem. On
supported devices, apps can request the NfcAdapter
to enter
observe mode, where the device listens but doesn't respond to NFC
readers, sending the app's NFC service PollingFrame
objects to process. The PollingFrame
objects can be used to auth
ahead of the first communication to the NFC reader, allowing for a one tap
transaction in many cases.
In addition, apps can register a filter on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.
Ruolo del wallet
Android 15 introduce un ruolo Wallet che consente un'integrazione più stretta con l'app Wallet preferita dall'utente. Questo ruolo sostituisce l'impostazione di pagamento contactless predefinita NFC. Gli utenti possono gestire il proprietario del ruolo Wallet andando a Impostazioni > App > App predefinite.
Il ruolo Wallet viene utilizzato per instradare i tocchi NFC per gli AID registrati nella categoria pagamenti. I tocchi vanno sempre al titolare del ruolo Wallet, a meno che un'altra app registrata per lo stesso AID non sia in esecuzione in primo piano.
Questo ruolo viene utilizzato anche per determinare dove deve essere inserito il riquadro di accesso rapido a Wallet quando viene attivato. Quando il ruolo è impostato su "Nessuna", il riquadro Accesso rapido non è disponibile e i tocchi NFC per la categoria di pagamento vengono inviati solo all'app in primo piano.
Sicurezza
Android 15 ti aiuta a migliorare la sicurezza della tua app, proteggere i dati dell'app e offre agli utenti maggiore trasparenza e controllo sui propri dati. Guarda il talk Safeguarding user security on Android di Google I/O per scoprire di più su cosa stiamo facendo per migliorare le misure di salvaguardia degli utenti e proteggere la tua app da nuove minacce.
Integrare Gestore delle credenziali con la compilazione automatica
A partire da Android 15, gli sviluppatori possono collegare viste specifiche, come i campi nome utente o password, alle richieste di Gestore delle credenziali, semplificando la fornitura di un'esperienza utente personalizzata durante la procedura di accesso. Quando l'utente si concentra su una di queste visualizzazioni, viene inviata una richiesta corrispondente a Credential Manager. Le credenziali risultanti vengono aggregate tra i fornitori e visualizzate nelle UI di riserva per la compilazione automatica, come i suggerimenti in linea o i suggerimenti del menu a discesa. La libreria Jetpack androidx.credentials è l'endpoint preferito per gli sviluppatori e sarà presto disponibile per migliorare ulteriormente questa funzionalità in Android 15 e versioni successive.
Integrare la registrazione e l'accesso con un solo tocco con le richieste biometriche
Gestore delle credenziali integra i prompt biometrici nella creazione delle credenziali e i processi di accesso, eliminando così la necessità da parte dei provider di gestire di prompt biometrici. Di conseguenza, i fornitori di credenziali devono concentrarsi solo i risultati dei flussi create e get, aumentati con il risultato del flusso biometrico. Questo processo semplificato crea credenziali più efficienti e semplificate processo di creazione e recupero.
Gestione delle chiavi per la crittografia end-to-end
Stiamo introducendo E2eeContactKeysManager
in Android 15, che facilita la crittografia end-to-end (E2EE) nelle tue app per Android fornendo un'API a livello di sistema operativo per lo stoccaggio delle chiavi pubbliche di crittografia.
E2eeContactKeysManager
è progettato per integrarsi con l'app Contatti della piattaforma per offrire agli utenti un modo centralizzato per gestire e verificare le chiavi pubbliche dei loro contatti.
Controlli delle autorizzazioni sugli URI dei contenuti
Android 15 introduce un insieme di API che eseguono controlli delle autorizzazioni sugli URI dei contenuti:
Context.checkContentUriPermissionFull
: viene eseguito un controllo completo delle autorizzazioni sugli URI dei contenuti.- Attributo manifest
Activity
requireContentUriPermissionFromCaller
: consente di applicare le autorizzazioni specificate agli URI dei contenuti forniti al momento del lancio dell'attività. - Classe
ComponentCaller
per gli utenti che hanno chiamatoActivity
: rappresenta l'app che ha avviato l'attività.
Accessibilità
Android 15 aggiunge funzionalità che migliorano l'accessibilità per gli utenti.
Braille migliore
In Android 15, abbiamo reso possibile per TalkBack supportare i display braille che utilizzano lo standard HID sia tramite USB che tramite Bluetooth sicuro.
Questo standard, molto simile a quello utilizzato da mouse e tastiere, aiuterà Android a supportare nel tempo una gamma più ampia di display braille.
Internazionalizzazione
Android 15 aggiunge funzionalità e capacità che completano l'esperienza utente quando un dispositivo viene utilizzato in lingue diverse.
Carattere variabile CJK
Starting with Android 15, the font file for Chinese, Japanese, and Korean (CJK) languages, NotoSansCJK, is now a variable font. Variable fonts open up possibilities for creative typography in CJK languages. Designers can explore a broader range of styles and create visually striking layouts that were previously difficult or impossible to achieve.

Giustificazione tra caratteri
A partire da Android 15, il testo può essere giustificato utilizzando la spaziatura tra le lettere
utilizzando JUSTIFICATION_MODE_INTER_CHARACTER
. La giustificazione tra parole era
introdotto per la prima volta in Android 8.0 (livello API 26) e
giustificazione offre funzionalità simili per i linguaggi che utilizzano
spazio vuoto per la segmentazione, ad esempio cinese, giapponese e altri.

JUSTIFICATION_MODE_NONE
.
JUSTIFICATION_MODE_NONE
.
JUSTIFICATION_MODE_INTER_WORD
.
JUSTIFICATION_MODE_INTER_WORD
.
JUSTIFICATION_MODE_INTER_CHARACTER
.
JUSTIFICATION_MODE_INTER_CHARACTER
.Configurazione dell'interruzione di riga automatica
Android ha iniziato a supportare le interruzioni di riga basate su frase per il giapponese e il coreano in
Android 13 (livello API 33). Tuttavia, mentre le interruzioni di riga basate su frase migliorano
leggibilità di brevi righe di testo, non sono ideali per righe di testo lunghe.
In Android 15, le app possono applicare interruzioni di riga basate su frase solo per le righe brevi
di testo, utilizzando la classe LINE_BREAK_WORD_STYLE_AUTO
. Questa opzione seleziona lo stile della parola migliore per il testo.
Per brevi righe di testo, vengono utilizzate le interruzioni di riga basate su frase, che funzionano nello stesso modo
come LINE_BREAK_WORD_STYLE_PHRASE
, come mostrato in
immagine seguente:

LINE_BREAK_WORD_STYLE_AUTO
applica interruzioni di riga basate su frase per migliorare la leggibilità del testo.
È come applicare
LINE_BREAK_WORD_STYLE_PHRASE
.Per le righe di testo più lunghe, LINE_BREAK_WORD_STYLE_AUTO
utilizza uno stile di parola senza interruzione di riga, che funziona come LINE_BREAK_WORD_STYLE_NONE
, come mostrato nell'immagine seguente:

LINE_BREAK_WORD_STYLE_AUTO
non applica alcun tipo di interruzione di riga per migliorare la leggibilità del testo.
Equivale ad applicare
LINE_BREAK_WORD_STYLE_NONE
.Carattere Hentaigana giapponese aggiuntivo
In Android 15, un file del carattere per l'hiragana giapponese antico (noto come hentaigana) è incluso per impostazione predefinita. Le forme uniche dei caratteri hentaigana possono aggiungere un tocco distintivo all'artwork o al design, contribuendo al contempo a preservare la trasmissione e la comprensione accurate dei documenti giapponesi antichi.

Cono VideoLAN Copyright (c) 1996-2010 VideoLAN. Questo logo o una versione modificata può essere utilizzato o modificato da chiunque per fare riferimento al progetto VideoLAN o a qualsiasi prodotto sviluppato dal team di VideoLAN, ma non indica l'approvazione del progetto.
Vulkan e il logo Vulkan sono marchi registrati di Khronos Group Inc.
OpenGL è un marchio registrato e il logo OpenGL ES è un marchio di Hewlett Packard Enterprise utilizzato con l'autorizzazione di Khronos.