Android 15, geliştiriciler için muhteşem yeni özellikler ve API'ler sunar. Aşağıdaki bölümlerde, ilgili API'leri kullanmaya başlamanıza yardımcı olmak için bu özellikler özetlenmiştir.
Yeni, değiştirilmiş ve kaldırılmış API'lerin ayrıntılı bir listesi için API fark raporunu okuyun. Yeni API'lerle ilgili ayrıntılar için Android API referansını ziyaret edin. Yeni API'ler görünürlük için vurgulanmaktadır. Ayrıca, platform değişikliklerinin uygulamalarınızı etkileyebileceği alanlar hakkında bilgi edinmek için Android 15'i hedefleyen uygulamaları etkileyen Android 15 davranış değişikliklerini vetargetSdkVersion
'dan bağımsız olarak tüm uygulamaları etkileyen davranış değişikliklerini inceleyin.
Kamera ve medya
Android 15, kamera ve medya deneyimini iyileştiren, içerik üreticileri Android'de vizyonlarını hayata geçirmelerini destekleyen araçlara ve donanıma erişmenizi sağlayan çeşitli özellikler içerir.
Android medyası ve kameraya yönelik en yeni özellikler ve geliştirici çözümleri hakkında daha fazla bilgi edinmek için Google I/O'nun Modern Android medya ve kamera deneyimleri oluşturma konulu konuşmasını inceleyin.
Düşük Işık Artışı
Android 15 introduces Low Light Boost, a new 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 new 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.
Uygulama içi kamera kontrolleri
Android 15, desteklenen cihazlardaki kamera donanımı ve algoritmaları üzerinde daha fazla kontrol sahibi olabilmeniz için yeni bir uzantı ekliyor:
- Gelişmiş flaş gücü ayarlamaları, resim çekerken hem
SINGLE
hem deTORCH
modlarında flaş yoğunluğunu hassas bir şekilde kontrol etmenizi sağlar.
HDR kafa odası kontrolü
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.
Ses düzeyi kontrolü
Android 15, ses yüksekliğindeki tutarsızlıklardan kaçınmanıza ve kullanıcıların içerikler arasında geçiş yaparken ses seviyesini sürekli ayarlamak zorunda kalmamalarına yardımcı olmak için CTA-2075 ses yüksekliği standardı için destek sunar. Sistem, ses yüksekliği ve dinamik aralık sıkıştırma seviyelerini akıllı şekilde ayarlamak için çıkış cihazlarının (kulaklık ve hoparlör) bilinen özelliklerinden ve AAC ses içeriğinde bulunan ses yüksekliği meta verilerinden faydalanır.
Bu özelliği etkinleştirmek için ses yüksekliği meta verilerinin AAC içeriğinizde bulunduğundan emin olmanız ve uygulamanızda platform özelliğini etkinleştirmeniz gerekir. Bunun için, ilişkilendirilen AudioTrack
öğesindeki ses oturum kimliğiyle create fabrika yöntemini çağırarak bir LoudnessCodecController
nesnesini başlatın. Bu işlem otomatik olarak ses güncellemelerini uygulamaya başlar. Ses düzeyi parametrelerini MediaCodec
üzerinde uygulanmadan önce değiştirmek veya filtrelemek için bir OnLoudnessCodecUpdateListener
iletebilirsiniz.
// 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
}
Ayrıca AndroidX media3 ExoPlayer, sorunsuz bir uygulama entegrasyonu için LoudnessCodecController
API'lerini kullanacak şekilde güncellenecektir.
Sanal MIDI 2.0 cihazları
Android 13, Evrensel MIDI Paketlerini (UMP) kullanarak iletişim kuran USB kullanan MIDI 2.0 cihazlarına bağlanma desteğini ekledi. Android 15, UMP desteğini sanal MIDI uygulamalarını da içerecek şekilde genişleterek beste uygulamalarının sentezleyici uygulamalarını bir USB MIDI 2.0 cihazında olduğu gibi sanal bir MIDI 2.0 cihazı olarak kontrol etmesini sağlar.
Daha etkili AV1 yazılım kod çözme
dav1d, the popular AV1 software decoder from VideoLAN is now available for Android devices that don't support AV1 decode in hardware. dav1d is up to 3x more performant than the legacy AV1 software decoder, enabling HD AV1 playback for more users, including some low and mid tier devices.
For now, your app needs to opt-in to using dav1d by invoking it by name
"c2.android.av1-dav1d.decoder"
. dav1d will be made the default AV1 software
decoder in a subsequent update. This support is standardized and backported to
Android 11 devices that receive Google Play system updates.
Geliştirici verimliliği ve araçları
Üretkenliğinizi geliştirmeye yönelik çalışmalarımızın çoğu Android Studio, Jetpack Compose ve Android Jetpack kitaplıkları gibi araçlara odaklanıyor. Bununla birlikte, vizyonunuzu daha kolay şekilde gerçekleştirmenize yardımcı olacak yöntemleri her zaman platformda arıyoruz.
OpenJDK 17 güncellemeleri
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.
PDF iyileştirmeleri
Android 15, PdfRenderer
API'lerinde önemli iyileştirmeler içerir. Uygulamalar; şifre korumalı dosya oluşturma, ek açıklama oluşturma, form düzenleme, arama ve metinle seçim gibi gelişmiş özellikler içerebilir. Doğrusal PDF optimizasyonları, yerel PDF'lerin daha hızlı görüntülenmesini sağlamak ve kaynak kullanımını azaltmak için desteklenir.
PdfRenderer
, platform sürümünden bağımsız olarak Google Play sistem güncellemeleri kullanılarak güncellenebilen bir modüle taşındı. Android 11'e (API düzeyi 30) geri dönmek için bu değişiklikleri, API yüzeyinin PdfRendererPreV
adı verilen uyumlu bir Android 15 öncesi sürümünü oluşturarak destekliyoruz.
PdfRenderer
API yüzeyinde yaptığımız iyileştirmelerle ilgili geri bildirimleriniz bizim için önemlidir. Yakında çıkacak olan Android Jetpack kitaplığıyla bu API'leri uygulamanıza da dahil etmeyi daha da kolaylaştırmayı planlıyoruz.
Otomatik dil geçişinde yapılan ayrıntılandırmalar
Android 14 added on-device, multi-language recognition in audio with automatic
switching between languages, but this can cause words to get dropped,
especially when languages switch with less of a pause between the two
utterances. Android 15 adds additional controls to help apps tune this switching
to their use case.
EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
confines the automatic switching to the beginning of the audio session, while
EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES
deactivates the
language switching after a defined number of switches. These options are
particularly useful if you expect that there will be a single language spoken
during the session that should be autodetected.
Geliştirilmiş OpenType Değişken Yazı Tipi API'si
Android 15, OpenType değişken yazı tipinin kullanılabilirliğini iyileştirir. Artık buildVariableFamily
API ile ağırlık eksenleri belirtmeden değişken yazı tipinden FontFamily
örneği oluşturabilirsiniz. Metin oluşturucu, görüntülenen metinle eşleşmek için wght
ekseninin değerini geçersiz kılar.
Bu işlem, yeni API'nin kullanılmasıyla Typeface
oluşturmak için gereken kodu önemli ölçüde basitleştirir:
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();
Önceden, aynı Typeface
öğesini oluşturmak için çok daha fazla koda ihtiyacınız vardı:
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();
Hem eski hem de yeni API'lerle oluşturulan bir Typeface
örneğini aşağıda bulabilirsiniz:
Bu örnekte, eski API ile oluşturulan Typeface
350, 450, 550 ve 650 Font
örnekleri için doğru yazı tipi ağırlıkları oluşturamadığından oluşturucu en yakın ağırlığa geri döner. Dolayısıyla bu örnekte, 350 yerine 300, 450 yerine 400 oluşturulur ve bu şekilde devam eder. Buna karşılık, yeni API'lerle oluşturulan Typeface
belirli bir ağırlık için dinamik olarak bir Font
örneği oluşturur. Böylece 350, 450, 550 ve 650 için de doğru ağırlıklar oluşturulur.
Ayrıntılı satır sonu kontrolleri
Android 15'ten itibaren TextView
ve temel satır kesici, okunabilirliği artırmak için metnin belirli bir bölümünü aynı satırda koruyabilir. Dize kaynaklarında <nobreak>
etiketini veya createNoBreakSpan
etiketini kullanarak bu satır sonu özelleştirmesinden yararlanabilirsiniz. Benzer şekilde, <nohyphen>
etiketini veya createNoHyphenationSpan
etiketini kullanarak kelimeleri tirelemeden koruyabilirsiniz.
Örneğin, aşağıdaki dize kaynağı satır sonu içermez ve istenmeyen bir yerde kırılarak "Pixel 8 Pro" metniyle oluşturulur:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
Buna karşılık bu dize kaynağı, "Pixel 8 Pro" ifadesini saran ve satır sonlarını engelleyen <nobreak>
etiketini içerir:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
Bu dizelerin oluşturulma biçimlerindeki fark aşağıdaki resimlerde gösterilmektedir:
Uygulama arşivleme
Android and Google Play announced support for app archiving last year, allowing users to free up space by partially removing infrequently used apps from the device that were published using Android App Bundle on Google Play. Android 15 now includes OS level support for app archiving and unarchiving, making it easier for all app stores to implement it.
Apps with the REQUEST_DELETE_PACKAGES
permission can call the
PackageInstaller
requestArchive
method to request archiving an
installed app package, which removes the APK and any cached files, but persists
user data. Archived apps are returned as displayable apps through the
LauncherApps
APIs; users will see a UI treatment to highlight that those
apps are archived. If a user taps on an archived app, the responsible installer
will get a request to unarchive it, and the restoration process can be
monitored by the ACTION_PACKAGE_ADDED
broadcast.
Grafik
Android 15, ANGLE ve Canvas grafik sistemine yapılan eklemeler de dahil en son grafik iyileştirmelerini sunar.
Android'in GPU erişimini modernleştirme
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++.
Canvas ile ilgili iyileştirmeler
Android 15, Android'in Canvas grafik sistemini yeni özelliklerle modernleştirmemize devam ediyor:
Matrix44
, tuvali 3D olarak işlemek istediğinizde kullanılması gereken koordinatların dönüştürülmesi için bir 4x4 matrisi sağlar.clipShader
, geçerli klibi, belirtilen gölgelendiriciyle kesiştirir.clipOutShader
ise klibi, geçerli klibin ve gölgelendiricinin farkına ayarlar. Her biri, gölgelendiriciyi bir alfa maskesi olarak değerlendirir. Bu, karmaşık şekillerin etkili bir şekilde çizilmesini destekler.
Performans ve pil
Android, uygulamalarınızın performansını ve kalitesini artırmanıza yardımcı olma odağını sürdürür. Android 15, uygulamanızdaki görevlerin daha verimli şekilde yürütülmesine, uygulama performansını optimize etmesine ve uygulamalarınız hakkında bilgi toplanmasına yardımcı olan yeni API'ler sunar.
Pil tasarrufu sağlayan en iyi uygulamalar, ağ ve güç kullanımında hata ayıklama, Android 15 ve Android'in son sürümlerinde arka plan çalışmasının pil verimliliğini nasıl iyileştirdiğimizle ilgili ayrıntılar için Google I/O'da Android'de arka plan çalışmasının pil verimliliğini artırma konulu konuşmayı inceleyin.
ApplicationStartInfo API'sı
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.
Uygulama boyutuyla ilgili ayrıntılı bilgiler
Since Android 8.0 (API level 26), Android has included the
StorageStats.getAppBytes
API that summarizes the installed
size of an app as a single number of bytes, which is a sum of the APK size, the
size of files extracted from the APK, and files that were generated on the
device such as ahead-of-time (AOT) compiled code. This number is not very
insightful in terms of how your app is using storage.
Android 15 adds the
StorageStats.getAppBytesByDataType([type])
API, which lets
you get insight into how your app is using up all that space, including APK file
splits, AOT and speedup related code, dex metadata, libraries, and guided
profiles.
Uygulama tarafından yönetilen profil oluşturma
Android 15, uygulamanızın içinden profil oluşturma bilgilerini toplamanızı sağlayan yepyeni ProfilingManager
sınıfını içerir. Bunu, profil oluşturma isteklerinin oluşturulmasını kolaylaştıracak bir Android Jetpack API ile sarmayı planlıyoruz. Ancak temel API; yığın dökümlerinin, yığın profillerinin, yığın örneklemenin ve daha fazlasının toplanmasına olanak tanıyacak. Uygulamanızın dosyalar dizinine yayınlanan çıkış dosyasını tanımlamak için sağlanan bir etiketle uygulamanıza bir geri çağırma sağlar. API, performans üzerindeki etkiyi en aza indirmek için hız sınırlaması uygular.
SQLite veritabanı iyileştirmeleri
Android 15, temel SQLite motorunun, uygulamalarda bildirilebilecek belirli performans sorunlarını hedefleyen gelişmiş özelliklerini sunan yeni SQLite API'lerini kullanıma sunuyor.
Geliştiriciler, özellikle büyük veritabanlarıyla çalışırken veya gecikmeye duyarlı sorgular çalıştırırken SQLite veritabanlarından en iyi şekilde yararlanmak için SQLite performansı ile ilgili en iyi uygulamalara başvurmalıdır.
- Salt okunur ertelenmiş işlemler: Salt okunur (yazma ifadeleri eklemeyin) işlemleri yayınlarken salt okunur
DEFERRED
işlemleri yayınlamak içinbeginTransactionReadOnly()
vebeginTransactionWithListenerReadOnly(SQLiteTransactionListener)
özelliklerini kullanın. Bu tür işlemler birbirleriyle eşzamanlı olarak çalışabilir ve veritabanı WAL modundaysaIMMEDIATE
veyaEXCLUSIVE
işlemleriyle eş zamanlı olarak çalıştırılabilir. - Satır sayıları ve kimlikleri: Değiştirilen satır sayısını veya ek sorgu yayınlamadan son eklenen satır kimliğini almak için yeni API'ler eklenmiştir.
getLastChangedRowCount()
geçerli işlemdeki en son SQL ifadesi tarafından eklenen, güncellenen veya silinen satır sayısını,getTotalChangedRowCount()
ise geçerli bağlantıdaki sayıyı döndürür.getLastInsertRowId()
, mevcut bağlantıda eklenecek son satırınrowid
değerini döndürür. - Ham ifadeler: Kolay sarmalayıcıları ve karşılaşabilecekleri ek işlem ek yükünü atlayarak bir ham SQlite ifadesi yayınlayın.
Android Dinamik Performans Çerçevesi güncellemeleri
Android 15 continues our investment in the Android Dynamic Performance Framework (ADPF), a set of APIs that allow games and performance intensive apps to interact more directly with power and thermal systems of Android devices. On supported devices, Android 15 will add new ADPF capabilities:
- A power-efficiency mode for hint sessions to indicate that their associated threads should prefer power saving over performance, great for long-running background workloads.
- GPU and CPU work durations can both be reported in hint sessions, allowing the system to adjust CPU and GPU frequencies together to best meet workload demands.
- Thermal headroom thresholds to interpret possible thermal throttling status based on headroom prediction.
To learn more about how to use ADPF in your apps and games, head over to the documentation.
Gizlilik
Android 15, uygulama geliştiricilerin kullanıcı gizliliğini korumasına yardımcı olan çeşitli özellikler içerir.
Ekran kaydı algılama
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)
}
Genişletilmiş IntentFilter özellikleri
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 new
<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 new android:query
and android:fragment
attributes.
Here's an example of the AndroidManifest
syntax:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:domain="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>
Özel alan
Özel alan, kullanıcıların cihazlarında ek bir kimlik doğrulama katmanıyla hassas uygulamaları meraklı gözlerden uzak tutabilecekleri ayrı bir alan oluşturmasına olanak tanır. Özel alanda ayrı bir kullanıcı profili kullanılır. Kullanıcı, özel alan için cihaz kilidini veya ayrı bir kilit faktörünü kullanmayı seçebilir.
Özel alandaki uygulamalar, başlatıcıda ayrı bir kapsayıcıda görünür ve özel alan kilitliyken son kullanılanlar görünümünden, bildirimlerden, ayarlardan ve diğer uygulamalardan gizlenir. Kullanıcı tarafından oluşturulan ve indirilen içerik (medya veya dosyalar gibi) ve hesaplar, özel alan ile ana alan arasında ayrı tutulur. Özel alanın kilidi açıldığında uygulamaların alanlardaki içeriklere erişmesine izin vermek için sistem paylaşım sayfası ve fotoğraf seçici kullanılabilir.
Kullanıcılar mevcut uygulamaları ve verilerini özel alana taşıyamaz. Bunun yerine, kullanıcılar istedikleri uygulama mağazasını kullanarak uygulama yüklemek için özel alanda bir yükleme seçeneği belirler. Özel alandaki uygulamalar, ana alandaki tüm uygulamalardan ayrı kopyalar (aynı uygulamanın yeni kopyaları) olarak yüklenir.
Kullanıcı özel alanı kilitlediğinde profil durdurulur. Profil durdurulduğunda özel alandaki uygulamalar artık etkin olmaz ve bildirimlerin gösterilmesi de dahil olmak üzere ön plandaki veya arka plandaki etkinlikleri gerçekleştiremez.
Özellikle uygulamanız aşağıdaki kategorilerden birine giriyorsa beklendiği gibi çalıştığından emin olmak için uygulamanızı özel alanla test etmenizi öneririz:
- Uygulamanın ana profilde bulunmayan yüklenmiş kopyalarının iş profilinde olduğunu varsayan, iş profilleri için mantığı olan uygulamalar.
- Başlatıcı uygulamaları
- Uygulama mağazası uygulamaları
Seçili Fotoğraflar Erişimi için en son kullanıcı seçimini sorgula
Medya izinleri için kısmi erişim verildiğinde uygulamalar artık yalnızca en son seçilen fotoğrafları ve videoları vurgulayabilir. Bu özellik, fotoğraf ve videolara sıklıkla erişim isteğinde bulunan uygulamalar için kullanıcı deneyimini iyileştirebilir. Uygulamanızda bu özelliği kullanmak için ContentResolver
üzerinden MediaStore
sorgusu yapılırken QUERY_ARG_LATEST_SELECTION_ONLY
bağımsız değişkenini etkinleştirin.
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) });
Android üzerinde Özel Korumalı Alan
Android 15, Android'deki Özel Korumalı Alan'ın en son sürümünü içeren en yeni Android Reklam Hizmetleri uzantılarını içerir. Bu ekleme, kullanıcı gizliliğini iyileştiren ve mobil uygulamalar için etkili, kişiselleştirilmiş reklam deneyimleri sağlayan yeni teknolojiler geliştirme çalışmalarımızın bir parçasıdır. Başlamanıza yardımcı olacak Android geliştirici önizlemesi ve beta programları hakkında daha fazla bilgiyi özel korumalı alan sayfamızda bulabilirsiniz.
Health Connect
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 new 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.
Kısmi ekran paylaşımı
Android 15 supports partial screen sharing so users can share or record just an
app window rather than the entire device screen. This feature, first enabled in
Android 14 QPR2, includes
MediaProjection
callbacks that allow your app
to customize the partial screen sharing experience. Note that for apps targeting
Android 14 (API level 34) or higher,
user consent is now required for each
MediaProjection
capture session.
Kullanıcı deneyimi ve sistem arayüzü
Android 15, uygulama geliştiricilere ve kullanıcılara cihazlarını ihtiyaçlarına göre yapılandırmaları için daha fazla kontrol ve esneklik sunar.
Uygulamanızın kullanıcı deneyimini iyileştirmek üzere Android 15'teki son iyileştirmeleri nasıl kullanacağınız hakkında daha fazla bilgi edinmek için Google I/O'daki Android uygulamanızın kullanıcı deneyimini iyileştirme konulu makaleye göz atın.
Generated Previews API ile daha zengin widget önizlemeleri
Android 15'ten önce widget seçici önizlemeleri sağlamanın tek yolu statik bir resim veya düzen kaynağı belirtmekti. Bu önizlemeler, genellikle ana ekrana yerleştirildiklerinde gerçek widget'ın görünümünden önemli ölçüde farklıdır. Ayrıca, Jetpack Glance ile statik kaynaklar oluşturulamaz. Bu nedenle, bir Glance geliştiricisinin widget önizlemesi için widget'ının ekran görüntüsünü alması veya bir XML düzeni oluşturması gerekiyordu.
Android 15'te, oluşturulan önizlemeler için destek eklenir. Yani uygulama widget'ı sağlayıcıları, statik bir kaynak yerine seçici önizlemesi olarak kullanmak üzere RemoteViews
oluşturabilir.
Push API'sı
Uygulamalar, oluşturulan önizlemeleri bir push API'sı aracılığıyla sağlayabilir. Uygulamalar yaşam döngülerinin herhangi bir noktasında önizleme sağlayabilir ve önizleme sağlaması için ana makineden açık bir istek almaz. Önizlemeler AppWidgetService
ürününde kalıcıdır ve ana makineler isteğe bağlı olarak bunları isteyebilir. Aşağıdaki örnek, bir XML widget düzeni kaynağı yükler ve bunu önizleme olarak ayarlar:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
Beklenen akış:
- Widget sağlayıcı herhangi bir zamanda
setWidgetPreview
numaralı telefonu çağırır. Sağlanan önizlemeler, diğer sağlayıcı bilgileriyle birlikteAppWidgetService
üzerinde kalıcı olarak saklanır. setWidgetPreview
,AppWidgetHost.onProvidersChanged
geri çağırması yoluyla ana makineleri güncellenmiş önizleme hakkında bilgilendirir. Buna karşılık, widget ana makinesi tüm sağlayıcı bilgilerini yeniden yükler.- Bir widget önizlemesi görüntülerken toplantı sahibi
AppWidgetProviderInfo.generatedPreviewCategories
seçeneğini kontrol eder ve seçilen kategori mevcutsa bu sağlayıcının kaydedilmiş önizlemesini döndürmek içinAppWidgetManager.getWidgetPreview
aracını çağırır.
setWidgetPreview
ne zaman aranacak?
Önizleme sağlamak için geri çağırma olmadığından uygulamalar çalışırken herhangi bir noktada önizleme göndermeyi seçebilir. Önizlemenin güncellenme sıklığı, widget'ın kullanım alanına bağlıdır.
Aşağıdaki listede, önizleme kullanım alanlarının iki ana kategorisi açıklanmaktadır:
- Widget önizlemelerinde kişiselleştirilmiş veya son bilgiler gibi gerçek veriler gösteren sağlayıcılar. Bu sağlayıcılar, kullanıcı oturum açtığında veya uygulamasında ilk yapılandırmayı tamamladıktan sonra önizlemeyi ayarlayabilir. Bunun ardından, önizlemeleri istedikleri sıklıkta güncellemek için periyodik bir görev oluşturabilirler. Bu tür widget'lara örnek olarak fotoğraf, takvim, hava durumu veya haber widget'ı verilebilir.
- Önizlemelerde veya hızlı işlem widget'larında statik bilgiler gösteren ve veri göstermeyen sağlayıcılardır. Bu sağlayıcılar önizlemeleri bir kez, uygulama ilk kez başlatıldığında ayarlayabilirler. Bu tür widget'lara örnek olarak, harekete geçirme widget'ı veya Chrome kısayolları widget'ı verilebilir.
Bazı sağlayıcılar, hub modu seçicide statik önizlemeler, ana ekran seçicide ise gerçek bilgiler gösterebilir. Bu sağlayıcılar, önizlemeleri ayarlamak için bu kullanım alanlarının her ikisiyle ilgili yönergeleri izlemelidir.
Pencere İçinde Pencere
Android 15, Pencere İçinde Pencere (PiP) özelliğinde yapılan yeni değişikliklerle birlikte PiP moduna girerken daha akıcı bir geçiş sağlıyor. Bu, PiP'ye giden ana kullanıcı arayüzünün üzerine kullanıcı arayüzü öğeleri yerleştirilen uygulamalar için faydalı olacaktır.
Geliştiriciler, yer paylaşımlı kullanıcı arayüzü öğelerinin görünürlüğünü değiştiren mantığı tanımlamak için onPictureInPictureModeChanged
geri çağırmasını kullanır. Bu geri çağırma, PiP giriş veya çıkış animasyonu tamamlandığında tetiklenir. Android 15'ten itibaren PictureInPictureUiState
sınıfı yeni bir duruma sahiptir.
Bu yeni kullanıcı arayüzü durumuyla Android 15'i hedefleyen uygulamalar, PiP animasyonu başlar başlamaz isTransitioningToPip()
ile çağrılan Activity#onPictureInPictureUiStateChanged
geri çağırma işlemini gözlemler. PiP modundayken uygulama ile alakalı olmayan birçok kullanıcı arayüzü öğesi vardır. Örneğin; öneriler, yakında sunulacak video, puanlar ve başlıklar gibi bilgileri içeren görünümler veya düzen. Uygulama, PiP moduna geçtiğinde bu kullanıcı arayüzü öğelerini gizlemek için onPictureInPictureUiStateChanged
geri çağırma işlevini kullanın. Uygulama, PiP penceresinden tam ekran moduna geçtiğinde bu öğeleri göstermek için aşağıdaki örneklerde gösterildiği gibi onPictureInPictureModeChanged
geri çağırmasını kullanın:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
Alakasız kullanıcı arayüzü öğelerinin bu hızlı görünürlük ayarı (PIP penceresi için) sayesinde PiP'nin animasyona daha sorunsuz ve titremesiz bir şekilde girer.
İyileştirilmiş Rahatsız Etmeyin kuralları
AutomaticZenRule
lets apps customize Attention
Management (Do Not Disturb) rules and decide when to activate or deactivate
them. Android 15 greatly enhances these rules with the goal of improving the
user experience. The following enhancements are included:
- Adding types to
AutomaticZenRule
, allowing the system to apply special treatment to some rules. - Adding an icon to
AutomaticZenRule
, helping to make the modes be more recognizable. - Adding a
triggerDescription
string toAutomaticZenRule
that describes the conditions on which the rule should become active for the user. - Added
ZenDeviceEffects
toAutomaticZenRule
, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.
Bildirim kanalları için TitreşimEfekti'ni ayarlama
Android 15, NotificationChannel.setVibrationEffect
aracılığıyla gelen bildirimler için kanala göre zengin titreşimlerin ayarlanmasını destekler. Böylece kullanıcılarınız, cihazlarına bakmadan farklı bildirim türlerini birbirinden ayırt edebilir.
Büyük ekranlar ve form faktörleri
Android 15, uygulamalarınıza Android'in büyük ekranlar, çevrilebilir ve katlanabilirler gibi form faktörlerinden en iyi şekilde yararlanma desteği sunar.
Büyük ekranda gelişmiş çoklu görev
Android 15 gives users better ways to multitask on large screen devices. For example, users can save their favorite split-screen app combinations for quick access and pin the taskbar on screen to quickly switch between apps. This means that making sure your app is adaptive is more important than ever.
Google I/O has sessions on Building adaptive Android apps and Building UI with the Material 3 adaptive library that can help, and our documentation has more to help you Design for large screens.
Kapak ekranı desteği
Uygulamanız, Android 15'in Application
veya Activity
cihazınızın desteklenen çevrilebilir cihazların küçük kapak ekranlarında gösterilmesine izin vermek için kullandığı bir özelliği beyan edebilir. Bu ekranlar, Android uygulamalarının çalışması için uyumlu hedefler olarak kabul edilemeyecek kadar küçük olsa da uygulamanız bu ekranları desteklemeyi tercih edebilir. Böylece uygulamanız daha fazla yerde kullanılabilir.
Bağlantı
Android 15, uygulamanızın iletişim ve kablosuz teknolojilerdeki en son gelişmelere erişebilmesi için platformu günceller.
Uydu desteği
Android 15 continues to extend platform support for satellite connectivity and includes some UI elements to ensure a consistent user experience across the satellite connectivity landscape.
Apps can use ServiceState.isUsingNonTerrestrialNetwork()
to
detect when a device is connected to a satellite, giving them more awareness of
why full network services might be unavailable. Additionally, Android 15
provides support for SMS and MMS apps as well as preloaded RCS apps to use
satellite connectivity for sending and receiving messages.
Daha akıcı NFC deneyimleri
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 now 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.
Cüzdan rolü
Android 15 introduces a new Wallet role that allows tighter integration with the user's preferred wallet app. This role replaces the NFC default contactless payment setting. Users can manage the Wallet role holder by navigating to Settings > Apps > Default Apps.
The Wallet role is used when routing NFC taps for AIDs registered in the payment category. Taps always go to the Wallet role holder unless another app that is registered for the same AID is running in the foreground.
This role is also used to determine where the Wallet QuickAccess tile should go when activated. When the role is set to "None", the QuickAccess tile isn't available and payment category NFC taps are only delivered to the foreground app.
Güvenlik
Android 15, uygulamanızın güvenliğini artırmanıza ve uygulamanızın verilerini korumanıza yardımcı olur. Ayrıca, kullanıcılara verileri üzerinde daha fazla şeffaflık ve kontrol sunar. Kullanıcı teminatlarını iyileştirmek ve uygulamanızı yeni tehditlere karşı korumak için yaptıklarımızla ilgili daha fazla bilgiyi Google I/O'da Android'de kullanıcı güvenliğini koruma konulu konuşmada bulabilirsiniz.
Kimlik Bilgisi Yöneticisi'ni otomatik doldurma özelliğiyle entegre etme
Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.
Tek dokunuşla kaydolma ve oturum açma işlemlerini biyometrik istemlerle entegre etme
Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.
Uçtan uca şifreleme için anahtar yönetimi
Şifreleme ortak anahtarlarının depolanması için işletim sistemi düzeyinde bir API sağlayarak Android uygulamalarınızda uçtan uca şifrelemeyi (E2EE) kolaylaştıran E2eeContactKeysManager
'i Android 15'te kullanıma sunuyoruz.
E2eeContactKeysManager
, kullanıcılara kişilerinin ortak anahtarlarını yönetmeleri ve doğrulamaları için merkezi bir yol sunmak amacıyla, platform kişileri uygulamasıyla entegre olacak şekilde tasarlanmıştır.
İçerik URI'lerindeki izin kontrolleri
Android 15 introduces a new set of APIs that perform permission checks on content URIs:
Context.checkContentUriPermissionFull
: This performs a full permission check on content URIs.Activity
manifest attributerequireContentUriPermissionFromCaller
: This enforces specified permissions on the provided content URIs at activity launch.ComponentCaller
class forActivity
callers: This represents the app that launched the activity.
Erişilebilirlik
Android 15, kullanıcılar için erişilebilirliği iyileştiren özellikler ekler.
Daha iyi Braille
Android 15'te, TalkBack'in hem USB hem de güvenli Bluetooth üzerinden HID standardını kullanan Braille ekranları desteklemesini mümkün hale getirdik.
Fareler ve klavyeler tarafından kullanılana çok benzeyen bu standart, Android'in zaman içinde daha geniş bir Braille ekran aralığını desteklemesine yardımcı olacaktır.
Uluslararası hale getirme
Android 15, cihazlar farklı dillerde kullanıldığında kullanıcı deneyimini tamamlayan özellikler ve işlevler ekler.
CJK değişken yazı tipi
Starting with Android 15, the font file for Chinese, Japanese, and Korean (CJK) languages, NotoSansCJK, is now a variable font. Variable fonts open up new 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.
Karakterler arası iki yana yaslama
Android 15'ten itibaren metinler, JUSTIFICATION_MODE_INTER_CHARACTER
aracılığıyla harfler arasında boşluk bırakılarak hizalanabilir. Kelimeler arası gerekçelendirme ilk olarak Android 8.0'da (API düzeyi 26) kullanıma sunulmuştur ve karakterler arası iki yana yaslama, segmentasyon için boşluk karakterini kullanan diller için de (ör. Çince, Japonca ve diğer diller) benzer özellikler sağlar.
Otomatik satır sonu yapılandırması
Android started supporting phrase-based line breaks for Japanese and Korean in
Android 13 (API level 33). However, while phrase-based line breaks improve the
readability of short lines of text, they don't work well for long lines of text.
In Android 15, apps can now apply phrase-based line breaks only for short lines
of text, using the LINE_BREAK_WORD_STYLE_AUTO
option. This option selects the best word style option for the text.
For short lines of text, phrase-based line breaks are used, functioning the same
as LINE_BREAK_WORD_STYLE_PHRASE
, as shown in the
following image:
For longer lines of text, LINE_BREAK_WORD_STYLE_AUTO
uses a no
line-break word style, functioning the same as
LINE_BREAK_WORD_STYLE_NONE
, as shown in the
following image:
Yeni Japon Hentaigana Yazı Tipi
Android 15'te, eski Japon Hiragana'sı (Hentaigana olarak bilinir) için yeni bir yazı tipi dosyası varsayılan olarak paket hâline getirilir. Hentaigana karakterlerinin benzersiz şekilleri, sanat eseri veya tasarıma ayırt edici bir görünüm katarken, antik Japon belgelerinin doğru iletilmeye ve anlaşılmasına da yardımcı olmaktadır.
VideoLAN cone Copyright (c) 1996-2010 VideoLAN. This logo or a modified version may be used or modified by anyone to refer to the VideoLAN project or any product developed by the VideoLAN team, but does not indicate endorsement by the project.
Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc.
OpenGL is a registered trademark and the OpenGL ES logo is a trademark of Hewlett Packard Enterprise used by permission by Khronos.