Android 15, geliştiriciler için harika özellikler ve API'ler sunuyor. Aşağıdaki bölümlerde, ilgili API'leri kullanmaya başlamanıza yardımcı olmak için bu özellikler özetlenmiştir.
Eklenen, değiştirilen ve kaldırılan API'lerin ayrıntılı listesi için API farklılıkları raporunu inceleyin. Eklenen API'lerle ilgili ayrıntılar için Android API referansını ziyaret edin. Android 15 için API düzeyi 35'te eklenen API'leri bulun. Platform değişikliklerinin uygulamalarınızı etkileyebileceği alanlar hakkında bilgi edinmek için Android 15'i hedefleyen uygulamalarda ve tüm uygulamalarda Android 15 davranış değişikliklerini inceleyin.
Kamera ve medya içerikleri
Android 15, kamera ve medya deneyimini iyileştiren çeşitli özelliklerin yanı sıra içerik üreticilerin vizyonlarını Android'de hayata geçirmelerini destekleyen araçlara ve donanımlara erişim imkanı sunar.
Android'deki medya ve kamera için en yeni özellikler ve geliştirici çözümleri hakkında daha fazla bilgi edinmek istiyorsanız Google I/O'daki Modern Android medya ve kamera deneyimleri oluşturma başlıklı konuşmayı izleyin.
Düşük Işık Güçlendirmesi
Android 15, hem Camera 2 hem de gece modu kamera uzantısında kullanılabilen bir otomatik pozlama modu olan düşük ışık güçlendirmesi özelliğini kullanıma sunar. Düşük Işık Güçlendirmesi, düşük ışık koşullarında önizleme akışının pozlamasını ayarlar. Gece modu, tek bir gelişmiş resim oluşturmak için seri çekim fotoğrafları birleştirdiğinden bu, gece modu kamera uzantısının hareketsiz resim oluşturma yönteminden farklıdır. Gece modu, hareketsiz resim oluşturmak için çok iyi çalışır ancak sürekli kare akışı oluşturamaz. Düşük Işık Geliştirme özelliği ise bunu yapabilir. Bu nedenle, Düşük Işıkta Geliştirme özelliği aşağıdaki gibi kamera özelliklerini etkinleştirir:
- Kullanıcıların düşük ışıkta çektiği fotoğrafları daha iyi kadraja alabilmesi için gelişmiş resim önizlemesi sunma
- Düşük ışıkta QR kodu tarama
Düşük ışık güçlendirmesini etkinleştirirseniz bu özellik, ışık seviyesi düşük olduğunda otomatik olarak açılır ve ışık seviyesi arttığında kapanır.
Uygulamalar, düşük ışık koşullarında önizleme akışını kaydederek videoları aydınlatabilir.
Daha fazla bilgi için Düşük Işıkta Güçlendirme başlıklı makaleyi inceleyin.
Uygulama içi kamera kontrolleri
Android 15 adds an extension for more control over the camera hardware and its algorithms on supported devices:
- Advanced flash strength adjustments enabling precise control of flash
intensity in both
SINGLEandTORCHmodes while capturing images.
HDR headroom kontrolü
Android 15, temel cihazın özelliklerine ve panelin bit derinliğine uygun HDR yedek bandını seçer. Tek bir HDR küçük resmi gösteren bir mesajlaşma uygulaması gibi çok fazla SDR içeriği bulunan sayfalarda bu davranış, SDR içeriğinin algılanan parlaklığını olumsuz yönde etkileyebilir. Android 15, SDR ve HDR içerik arasında denge kurmak için setDesiredHdrHeadroom ile HDR marjını kontrol etmenize olanak tanır.
Ses yüksekliği kontrolü

Android 15, ses yüksekliği tutarsızlıklarını önlemenize ve kullanıcıların içerikler arasında geçiş yaparken sürekli olarak ses düzeyini ayarlamak zorunda kalmamasını sağlamanıza yardımcı olmak için CTA-2075 ses yüksekliği standardını destekler. Sistem, sesin ses düzeyini ve dinamik aralık sıkıştırma seviyelerini akıllıca ayarlamak için çıkış cihazlarının (kulaklık ve hoparlör) bilinen özelliklerinden ve AAC ses içeriğindeki ses düzeyi meta verilerinden yararlanır.
Bu özelliği etkinleştirmek için ses yüksekliği meta verilerinin şurada bulunduğundan emin olmanız gerekir:
AAC içeriğinizi ve uygulamanızda platform özelliğini etkinleştirin. Bunun için
LoudnessCodecController nesnesini şu şekilde örneklendir:
cihazın sesiyle birlikte create fabrika yöntemini çağırıyor.
ilişkili AudioTrack oturum kimliği; bu
otomatik olarak ses güncellemelerini uygulamaya başlar. MediaCodec'e uygulanmadan önce ses seviyesi parametrelerini 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
}
AndroidX media3 ExoPlayer da sorunsuz bir uygulama entegrasyonu için LoudnessCodecController API'lerini kullanacak şekilde güncellenecek.
Sanal MIDI 2.0 cihazları
Android 13'e, Universal MIDI Paketleri (UMP) kullanarak iletişim kuran USB üzerinden MIDI 2.0 cihazlarına bağlanma desteği eklendi. Android 15, UMP desteğini sanal MIDI uygulamalarına genişleterek beste uygulamalarının sentezleyici uygulamalarını USB MIDI 2.0 cihazı gibi sanal MIDI 2.0 cihazı olarak kontrol etmesine olanak tanır.
Daha verimli AV1 yazılım kod çözme
VideoLAN'ın popüler AV1 yazılım kod çözücüsü dav1d, donanımda AV1 kod çözmeyi desteklemeyen Android cihazlarda kullanılabilir. Eski AV1 yazılım kod çözücüsüne kıyasla 3 kata kadar daha yüksek performans gösteren dav1d, bazı düşük ve orta sınıf cihazlar da dahil olmak üzere daha fazla kullanıcının HD AV1 oynatmasını sağlar.
Uygulamanızın, dav1d'yi adıyla çağırarak "c2.android.av1-dav1d.decoder" kullanmayı etkinleştirmesi gerekir. dav1d, sonraki bir güncellemede varsayılan AV1 yazılım kod çözücüsü olacak. Bu destek standartlaştırılır ve Google Play sistem güncellemeleri alan Android 11 cihazlara geri bağlanır.
Geliştirici üretkenliği ve araçları
Üretkenliğinizi artırmaya yönelik çalışmalarımızın çoğu Android Studio, Jetpack Compose ve Android Jetpack kitaplıkları gibi araçlara odaklanırken platformda vizyonunuzu daha kolay gerçekleştirmenize yardımcı olacak yollar aramaya devam ediyoruz.
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
mathandstrictmathmethods utilpackage updates including sequencedcollection,map, andsetByteBuffersupport inDeflater- Security updates such as
X500PrivateCredentialand 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 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.
Otomatik dil geçişiyle ilgili iyileştirmeler
Android 14, diller arasında otomatik geçişle birlikte cihaz üzerinde sesli olarak çok dilli tanıma özelliğini ekledi. Ancak bu özellik, özellikle iki ifade arasında daha az duraksama olduğunda kelimelerin atlanmasına neden olabilir. Android 15, uygulamaların bu geçişi kullanım alanlarına göre ayarlamalarına yardımcı olmak için ek kontroller ekler.
EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS, otomatik geçişi ses oturumunun başına sınırlar. EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES ise belirli sayıda geçişten sonra dil geçişini devre dışı bırakır. Bu seçenekler, oturum sırasında otomatik olarak algılanması gereken tek bir dilin konuşulacağını düşünüyorsanız özellikle kullanışlıdır.
Geliştirilmiş OpenType Variable Font API
Android 15 improves the usability of the OpenType variable font. You can create
a FontFamily instance from a variable font without specifying weight axes
with the buildVariableFamily API. The text renderer overrides the value
of wght axis to match the displaying text.
Using the API simplifies the code for creating a Typeface considerably:
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();
Previously, to create the same Typeface, you would need much more code:
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();
Here's an example of how a Typeface created with both the old and new APIs
renders:
In this example, the Typeface created with the old API doesn't have the
capability to create accurate font weights for the 350, 450, 550 and 650
Font instances, so the renderer falls back to the closest weight. So in
this case, 300 is rendered instead of 350, 400 is rendered instead of 450, and
so on. By contrast, the Typeface created with the new APIs dynamically creates
a Font instance for a given weight, so accurate weights are rendered for 350,
450, 550, and 650 as well.
Ayrıntılı satır sonu kontrolleri
Android 15'ten itibaren, TextView ve temel satır ayırıcı, okunabilirliği artırmak için metnin belirli bir bölümünü aynı satırda koruyabilir. Dize kaynaklarında <nobreak> etiketini veya createNoBreakSpan kullanarak bu satır sonu özelleştirmesinden yararlanabilirsiniz. Benzer şekilde, <nohyphen> etiketini veya createNoHyphenationSpan kullanarak kelimeleri kısaltmalardan koruyabilirsiniz.
Örneğin, aşağıdaki dize kaynağı satır sonu içermez ve "Pixel 8 Pro" metninin istenmeyen bir yerde kesildiği şekilde 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 sarmalayan ve satır aralarını önleyen <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çimleri arasındaki fark aşağıdaki resimlerde gösterilmektedir:
<nobreak> etiketi kullanılarak sarmalandığı bir metin satırı için düzen.
<nobreak> etiketi kullanılarak sarıldığı aynı metin satırının düzeni.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 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.
Geliştirici seçeneklerini kullanarak bir cihazda 16 KB modunu etkinleştirme
Cihazı 16 KB modunda başlatmak için 16 KB sayfa boyutuyla başlat geliştirici seçeneğini etkinleştirin.
Android 15'in QPR sürümlerinde, cihazı 16 KB modunda başlatmak ve cihaz üzerinde test yapmak için belirli cihazlarda bulunan geliştirici seçeneğini kullanabilirsiniz. Geliştirici seçeneğini kullanmadan önce Ayarlar > Sistem > Yazılım güncellemeleri'ne gidip varsa güncellemeleri uygulayın.
Bu geliştirici seçeneği aşağıdaki cihazlarda kullanılabilir:
Pixel 8 ve 8 Pro (Android 15 QPR1 veya sonraki sürümlerle)
Pixel 8a (Android 15 QPR1 veya sonraki sürümler)
Pixel 9, 9 Pro ve 9 Pro XL (Android 15 QPR2 veya sonraki bir sürüm yüklü)
Pixel 9a (Android 16 veya sonraki sürümler)
Grafik
Android 15, ANGLE ve Canvas grafik sistemine eklemeler de dahil olmak üzere en yeni grafik iyileştirmelerini sunar.
Android'in GPU erişimini modernleştirme
Android donanımı, çekirdek işletim sisteminin tek bir CPU'da çalıştığı ve GPU'lara sabit işlevli ardışık düzenlere dayalı API'ler kullanılarak erişildiği ilk günlerden bu yana oldukça gelişti. Vulkan® grafik API'si, Android 7.0 (API seviyesi 24) sürümünden beri NDK'da mevcuttur. Modern GPU donanımlarını daha iyi yansıtan, birden fazla CPU çekirdeğini desteklemek için daha iyi ölçeklendirilen ve CPU sürücüsünün ek yükünü azaltan bu API, uygulama performansını iyileştirir. Vulkan, tüm modern oyun motorları tarafından desteklenir.
Vulkan, Android'in GPU için tercih ettiği arayüzdür. Bu nedenle Android 15, Vulkan'ın üzerinde OpenGL® ES çalıştırmak için isteğe bağlı bir katman olarak ANGLE'ı içerir. ANGLE'a geçiş, Android OpenGL uygulamasını standartlaştırarak daha iyi uyumluluk ve bazı durumlarda daha iyi performans sağlar. Android 15'te Ayarlar -> Sistem -> Geliştirici Seçenekleri -> Deneysel: ANGLE'ı etkinleştir geliştirici seçeneğini etkinleştirerek OpenGL ES uygulamanızın kararlılığını ve performansını ANGLE ile test edebilirsiniz.
Vulkan'da Android ANGLE yol haritası
GPU yığınımızı basitleştirme kapsamında, bundan sonra daha fazla yeni cihazda GL sistem sürücüsü olarak ANGLE'ı kullanıma sunacağız. OpenGL/ES'in gelecekte yalnızca ANGLE üzerinden kullanılmasını bekliyoruz. Bununla birlikte, tüm cihazlarda OpenGL ES desteğini sürdürmeyi planlıyoruz.
Sıradaki önerilen adımlar
OpenGL ES için ANGLE sürücüsünü seçmek ve uygulamanızı test etmek üzere geliştirici seçeneklerini kullanın. Yeni projelerde C/C++ için Vulkan'ı kullanmanızı önemle tavsiye ederiz.
Canvas'ta yapılan iyileştirmeler
Android 15, Android'in Canvas grafik sistemini modernleştirme çalışmalarımıza ek özellikler ekliyor:
Matrix44, tuvali 3D olarak değiştirmek istediğinizde kullanılması gereken koordinatları dönüştürmek için 4x4 matris sağlar.clipShader, mevcut klibi belirtilen gölgelendiriciyle kesiştirirkenclipOutShader, klibi mevcut klip ile gölgelendiricinin farkına ayarlar. Her ikisi de gölgelendiriciyi bir alfa maskesi olarak işler. Bu, karmaşık şekillerin verimli bir şekilde çizilmesini destekler.
Performans ve pil
Android, uygulamalarınızın performansını ve kalitesini artırmanıza yardımcı olmaya odaklanmaya devam ediyor. Android 15, uygulamanızdaki görevlerin daha verimli bir şekilde yürütülmesine, uygulama performansının optimize edilmesine ve uygulamalarınızla ilgili analizler toplanmasına yardımcı olan API'ler sunar.
Pil verimliliğiyle ilgili en iyi uygulamalar, ağ ve güç kullanımında hata ayıklama ve Android 15 ile Android'in son sürümlerinde arka plan çalışmalarının pil verimliliğini nasıl artırdığımız hakkında ayrıntılı bilgi için Google I/O'daki Android'de arka plan çalışmalarının pil verimliliğini artırma başlıklı konuşmayı izleyin.
ApplicationStartInfo API
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.
Ayrıntılı uygulama boyutu bilgileri
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 profilleme
Android 15 includes the ProfilingManager class,
which lets you collect profiling information from within your app such as heap
dumps, heap profiles, stack sampling, and more. It provides a callback to your
app with a supplied tag to identify the output file, which is delivered to your
app's files directory. The API does rate limiting to minimize the performance
impact.
To simplify constructing profiling requests in your app, we recommend using the
corresponding Profiling AndroidX API, available
in Core 1.15.0-rc01 or higher.
SQLite veritabanı iyileştirmeleri
Android 15 introduces SQLite APIs that expose advanced features from the underlying SQLite engine that target specific performance issues that can manifest in apps. These APIs are included with the update of SQLite to version 3.44.3.
Developers should consult best practices for SQLite performance to get the most out of their SQLite database, especially when working with large databases or when running latency-sensitive queries.
- Read-only deferred transactions: when issuing transactions that are
read-only (don't include write statements), use
beginTransactionReadOnly()andbeginTransactionWithListenerReadOnly(SQLiteTransactionListener)to issue read-onlyDEFERREDtransactions. Such transactions can run concurrently with each other, and if the database is in WAL mode, they can run concurrently withIMMEDIATEorEXCLUSIVEtransactions. - Row counts and IDs: APIs were added to retrieve the count of changed
rows or the last inserted row ID without issuing an additional query.
getLastChangedRowCount()returns the number of rows that were inserted, updated, or deleted by the most recent SQL statement within the current transaction, whilegetTotalChangedRowCount()returns the count on the current connection.getLastInsertRowId()returns therowidof the last row to be inserted on the current connection. - Raw statements: issue a raw SQlite statement, bypassing convenience wrappers and any additional processing overhead that they may incur.
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 adds 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, bunları algılamak için uygulamalar için destek sunmaya başladı. kaydedilmektedir. Uygulama geçişinde her zaman geri çağırma çağrılır arasında bir ekran kaydında görünür veya görünmez olma arasındaki farka bağlıdır. Kayıt işleminin UID'sine ait etkinlikler kaydediliyorsa uygulama görünür olarak kabul edilir. Bu sayede, uygulamanız hassas bir işlem gerçekleştiriyorsa kullanıcıyı kaydedildiğini bildirebilirsiniz.
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, URL sorgu parametreleri, URL parçaları ve engelleme veya hariç tutma kuralları dahil olmak üzere her biri karşılanması gereken bir Intent eşleme kuralı grubu oluşturan bir UriRelativeFilter nesnesi grubu içeren UriRelativeFilterGroup aracılığıyla daha hassas Intent çözümü destekler.
Bu kurallar, AndroidManifest XML dosyasında <uri-relative-filter-group> etiketiyle tanımlanabilir. Bu etiket isteğe bağlı olarak android:allow etiketi içerebilir. Bu etiketler, mevcut veri etiketi özelliklerinin yanı sıra android:query ve android:fragment özelliklerini kullanan <data> etiketleri içerebilir.
AndroidManifest söz dizimi örneğini aşağıda bulabilirsiniz:
<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>
Özel alan
Özel alan, kullanıcıların cihazda ayrı bir alan oluşturmalarını sağlayarak hassas uygulamaları, ek bir kimlik doğrulama katmanıyla meraklı gözlerden korur. Özel alan ayrı bir kullanıcı profili kullanır. Kullanıcı, özel alan için cihaz kilidi veya ayrı bir kilit faktörü kullanmayı seçebilir.
Özel alandaki uygulamalar, Launcher'daki ayrı bir kapsayıcıda gösterilir ve özel alan kilitlendiğinde son kullanılanlar görünümü, bildirimler, ayarlar ve diğer uygulamalardan gizlenir. Kullanıcı tarafından oluşturulup indirilen içerikler (ör. medya veya dosyalar) ve hesaplar, özel alan ile ana alan arasında ayrılır. Özel alanın kilidi açıldığında, sistem paylaşım sayfası ve fotoğraf seçici, uygulamalara alanlar arasındaki içeriklere erişim izni vermek için kullanılabilir.
Kullanıcılar mevcut uygulamaları ve verilerini özel alana taşıyamaz. Bunun yerine, kullanıcılar tercih ettikleri uygulama mağazasını kullanarak uygulama yüklemek için özel alanda bir yükleme seçeneği belirler. Özel alandaki uygulamalar, ana alandaki uygulamalardan ayrı kopyalar olarak yüklenir (aynı uygulamanın yeni kopyaları).
Kullanıcı özel alanı kilitlediğinde profil durdurulur. Profil durdurulduğunda özel alandaki uygulamalar artık etkin olmaz ve bildirim gösterme dahil olmak üzere ön plan veya arka plan etkinlikleri gerçekleştiremez.
Uygulamanızın beklendiği gibi çalıştığından emin olmak için uygulamanızı özel alanla test etmenizi öneririz. Özellikle uygulamanız aşağıdaki kategorilerden birine giriyorsa:
- Uygulamalarının ana profilde olmayan yüklü kopyalarının iş profilinde olduğunu varsaymaya çalışan iş profilleri için mantığı olan uygulamalar.
- Tıbbi uygulamalar
- Başlatıcı uygulamaları
- Uygulama mağazası uygulamaları
Seçilen Fotoğraflara Erişim için en son kullanıcı seçimini sorgulama
Artık medya izinlerine kısmi erişim verildiğinde uygulamalar yalnızca en son seçilen fotoğraf ve videoları vurgulayabilir. Bu özellik, sık sık fotoğraflara ve videolara erişim isteyen uygulamalar için kullanıcı deneyimini iyileştirebilir. Bu özelliği uygulamanızda kullanmak için ContentResolver üzerinden MediaStore sorgularken 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'de Özel Korumalı Alan
Android 15 includes the latest Android Ad Services extensions, incorporating the latest version of the Privacy Sandbox on Android. This addition is part of our work to develop technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Our privacy sandbox page has more information about the Privacy Sandbox on Android developer preview and beta programs to help you get started.
Health Connect
Android 15, uygulamalar tarafından toplanan sağlık ve fitness verilerini yönetmek ve paylaşmak için güvenli ve merkezi bir platform olan Android'den Health Connect ile ilgili en son uzantıları entegre eder. Bu güncellemeyle fitness, beslenme, deri sıcaklığı, antrenman planları ve daha birçok alanda ek veri türleri için destek eklendi.
Cilt sıcaklığı takibi, kullanıcıların giyilebilir cihazlardan veya diğer izleme cihazlarından daha doğru sıcaklık verileri depolayıp paylaşmasına olanak tanır.
Antrenman planları, kullanıcıların fitness hedeflerine ulaşmasına yardımcı olmak için hazırlanmış yapılandırılmış antrenman planlarıdır hedefler. Eğitim planları desteği, tamamlama ve performans açısından farklılık gösterir hedefler:
- Harcanan kalori, mesafe, süre, tekrar ve adım sayısıyla ilgili tamamlama hedefleri
- Mümkün olduğunca çok tekrar (AMRAP), ritim, kalp atış hızı, güç, algılanan efor oranı ve hız ile ilgili performans hedefleri.
Android'deki Health Connect ile ilgili son güncellemeler hakkında daha fazla bilgiyi şurada bulabilirsiniz: Android'de uyarlanabilir deneyimler geliştirme Google I/O'da sağlık konuşması.
Uygulama ekran paylaşımı
Android 15, uygulama ekranı paylaşımını destekler. Böylece kullanıcılar cihaz ekranının tamamını değil, yalnızca bir uygulama penceresini paylaşabilir veya kaydedebilir. İlk olarak Android 14 QPR2'de etkinleştirilen bu özellik, uygulamanızın uygulama ekranı paylaşımı deneyimini özelleştirmesine olanak tanıyan MediaProjection geri çağırma işlevlerini içerir. Android 14 (API düzeyi 34) veya sonraki sürümleri hedefleyen uygulamalarda her MediaProjection yakalama oturumu için kullanıcı izninin gerekli olduğunu unutmayın.
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ırma konusunda daha fazla kontrol ve esneklik sunar.
Android 15'teki en son iyileştirmeleri kullanarak uygulamanızın kullanıcı deneyimini nasıl iyileştireceğiniz hakkında daha fazla bilgi edinmek için Google I/O'daki Android uygulamanızın kullanıcı deneyimini iyileştirme başlıklı konuşmayı izleyin.
Generated Previews API ile daha zengin widget önizlemeleri
Before Android 15, the only way to provide widget picker previews was to specify a static image or layout resource. These previews often differ significantly from the look of the actual widget when it is placed on the home screen. Also, static resources can't be created with Jetpack Glance, so a Glance developer had to screenshot their widget or create an XML layout to have a widget preview.
Android 15 adds support for generated previews. This means that app widget
providers can generate RemoteViews to use as the picker preview, instead
of a static resource.
Push API
Apps can provide generated previews through a push API. Apps can provide
previews at any point in their lifecycle, and don't receive an explicit request
from the host to provide previews. Previews are persisted in AppWidgetService,
and hosts can request them on-demand. The following example loads an XML widget
layout resource and sets it as the preview:
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
The expected flow is:
- At any time, the widget provider calls
setWidgetPreview. The provided previews are persisted inAppWidgetServicewith other provider info. setWidgetPreviewnotifies hosts of an updated preview through theAppWidgetHost.onProvidersChangedcallback. In response, the widget host reloads all of its provider information.- When displaying a widget preview, the host checks
AppWidgetProviderInfo.generatedPreviewCategories, and if the chosen category is available, callsAppWidgetManager.getWidgetPreviewto return the saved preview for this provider.
When to call setWidgetPreview
Because there is no callback to provide previews, apps can choose to send previews at any point when they are running. How often to update the preview depends on the widget's use case.
The following list describes the two main categories of preview use cases:
- Providers that show real data in their widget previews, such as personalized or recent information. These providers can set the preview once the user has signed in or has done initial configuration in their app. After this, they can set up a periodic task to update the previews at their chosen cadence. Examples of this type of widget could be a photo, calendar, weather or news widget.
- Providers that show static information in previews or quick-action widgets that don't display any data. These providers can set previews once, when the app first launches. Examples of this type of widget include a drive quick actions widget or chrome shortcuts widget.
Some providers might show static previews on the hub mode picker, but real information on the homescreen picker. These providers should follow the guidance for both of these use cases to set previews.
Pencere İçinde Pencere
Android 15, PIP moduna geçerken daha da sorunsuz bir geçiş sağlayan Pencere İçinde Pencere (PIP) özelliğinde değişiklikler sunar. Bu işlem, ana kullanıcı arayüzünün üzerine yerleştirilmiş kullanıcı arayüzü öğeleri içeren uygulamalar.
Geliştiriciler, üste binen kullanıcı arayüzü öğelerinin görünürlüğünü değiştiren mantığı tanımlamak için onPictureInPictureModeChanged geri çağırma işlevini kullanır. Bu geri arama
PiP giriş veya çıkış animasyonu tamamlandığında tetiklenir. Şu tarihte başlıyor:
Android 15, PictureInPictureUiState sınıfı başka bir eyalet içerir.
Bu kullanıcı arayüzü durumunda, Android 15'i (API düzeyi 35) hedefleyen uygulamalar
Activity#onPictureInPictureUiStateChanged geri çağırma özelliği şununla çağrılıyor:
PiP animasyonu başlar başlamaz isTransitioningToPip(). Her biri 100'den az gösterim alan
PiP modundayken uygulamayla alakalı olmayan birçok kullanıcı arayüzü öğesi
öneriler, yaklaşan görüntüleme sayısı gibi bilgiler içeren örnek görünümler veya
videolar, derecelendirmeler ve başlıklar. Uygulama PiP moduna geçtiğinde
Bu kullanıcı arayüzü öğelerini gizlemek için onPictureInPictureUiStateChanged geri çağırma işlemini gerçekleştirin.
PiP penceresinden tam ekran moduna geçerse
Bu öğeleri göstermek için onPictureInPictureModeChanged geri çağırması (aşağıda gösterildiği gibi)
aşağıdaki örnekler:
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 açma/kapatma düğmesi (PIP penceresi için) daha akıcı ve titreyen bir PiP giriş animasyonu olduğundan emin olun.
İyileştirilmiş Rahatsız Etmeyin kuralları
AutomaticZenRule, uygulamaların Dikkat'i özelleştirmesine olanak tanır
Yönetim (Rahatsız Etmeyin) kuralları ve ne zaman etkinleştirileceğine veya devre dışı bırakılacağına karar verme
oluşturabilirsiniz. Android 15,
en iyi uygulamaları paylaşacağız. Aşağıdaki iyileştirmeler dahildir:
AutomaticZenRuleöğesine türler ekleniyor ve sistemin özel uygulama yapmasına olanak tanıyor bazı kurallara uyması gerekir.AutomaticZenRuleuygulamasına simge eklenerek modların daha kullanışlı hale getirilmesine yardımcı olun fark edebilirsiniz.AutomaticZenRuleöğesine aşağıdakileri açıklayan birtriggerDescriptiondizesi ekleniyor kuralın kullanıcı için etkin olması gereken koşullar.- Eklenme zamanı
ZenDeviceEffectsAutomaticZenRuledeğerine ayarlayarak kuralların gri tonlama gibi öğeleri tetiklemesine izin verir gece moduna girebilir veya duvar kağıdını karartabilirsiniz.
Bildirim kanalları için VibrationEffect ayarlama
Android 15, gelen bildirimler için zengin titreşimlerin ayarlanmasını
NotificationChannel.setVibrationEffect kullanıyor. Bu nedenle,
Kullanıcılarınız farklı bildirim türlerini birbirinden
cihazlarına bakması gerekmez.
Medya projeksiyonu durum çubuğu çipi ve otomatik durdurma
Medya yansıtma, kullanıcıların gizli bilgilerini açığa çıkarabilir. Yeni ve belirgin bir durum çubuğu çipi, devam eden ekran projeksiyonlarından kullanıcıları haberdar eder. Kullanıcılar ekran aktarmayı, paylaşımı veya kaydı durdurmak için çipe dokunabilir. Ayrıca, daha sezgisel bir kullanıcı deneyimi için devam eden ekran projeksiyonları artık cihaz ekranı kilitlendiğinde otomatik olarak durdurulur.
Büyük ekranlar ve form faktörleri
Android 15, uygulamalarınızın büyük ekranlar, çevrilebilir ve katlanabilir cihazlar gibi Android'in form faktörlerinden en iyi şekilde yararlanmasını sağlar.
Büyük ekranda çoklu görev deneyimi artık daha iyi
Android 15, kullanıcıların büyük ekranlı cihazlarda çoklu görev gerçekleştirmeleri için daha iyi yöntemler sunar. Örneğin, Örneğin, kullanıcılar en sevdikleri bölünmüş ekran uygulama kombinasyonlarını hızlı bir şekilde görev çubuğuna dokunup sabitleyerek uygulamalar arasında kolayca geçiş yapabilirsiniz. Bunun anlamı şudur: uygulamanızın uyarlanabilir olmasını sağlamanın hiç olmadığı kadar önemli olduğunu unutmayın.
Google I/O, Uyarlanabilir Android'i Geliştirme uygulamalar ve Material 3 ile Kullanıcı Arayüzü Oluşturma uyarlanabilir kitaplık yardımcı olabilir ve dokümanlarımızda büyük müşteri memnuniyeti için ekranları için de geçerlidir.
Kapak ekranı desteği
Uygulamanız, Application veya Activity'inizin desteklenen katlanabilir cihazların küçük kapak ekranlarında gösterilmesine izin vermek için Android 15'in kullandığı bir mülkü tanımlayabilir. Bu ekranlar, Android uygulamalarının çalışabileceği uyumlu hedefler olarak kabul edilemeyecek kadar küçüktür ancak uygulamanız bunları desteklemeyi etkinleştirerek daha fazla yerde kullanılabilir hale gelebilir.
Bağlantı
Android 15, platformu güncelleyerek uygulamanızın iletişim ve kablosuz teknolojilerdeki en son gelişmelere erişmesini sağlar.
Uydu desteği
Android 15, uydu bağlantısı için platform desteğini genişletmeye ve Kullanıcı deneyiminin tutarlı bir uydu bağlantısı durumu.
Uygulamalar, bir cihazın uyduya ne zaman bağlandığını algılamak için ServiceState.isUsingNonTerrestrialNetwork() kullanabilir. Bu sayede, tam ağ hizmetlerinin neden kullanılamayabileceği konusunda daha fazla bilgi sahibi olabilirler. Ayrıca Android 15, mesaj göndermek ve almak için uydu bağlantısını kullanmak üzere SMS ve MMS uygulamalarının yanı sıra önceden yüklenmiş RCS uygulamaları için destek sunar.
Daha sorunsuz NFC deneyimleri
Android 15, Android'in güçlü NFC uygulama ekosistemini desteklemeye devam ederken temassız ödeme deneyimini daha akıcı ve güvenilir hale getirmek için çalışıyor. Desteklenen cihazlarda uygulamalar, NfcAdapter'den gözlem moduna girmesini isteyebilir. Bu modda cihaz, NFC okuyucuları dinler ancak yanıt vermez. Uygulamanın NFC hizmeti, işleme alınacak PollingFrame
nesneleri gönderir. PollingFrame nesneleri, NFC okuyucuyla ilk iletişimden önce kimlik doğrulama yapmak için kullanılabilir. Bu sayede, birçok durumda tek dokunuşla işlem yapılabilir.
Ayrıca uygulamalar, desteklenen cihazlarda bir filtre kaydedebilir. Böylece, anket döngüsü etkinliği hakkında bildirim alabilir ve NFC'den haberdar olan birden fazla uygulamayla sorunsuz şekilde çalışabilir.
Cüzdan rolü
Android 15 introduces a 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 Quick Access tile should go when activated. When the role is set to "None", the Quick Access 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, uygulamanızın verilerini korumanıza ve kullanıcılara verileri üzerinde daha fazla şeffaflık ve kontrol olanağı sunmanıza yardımcı olur. Kullanıcı korumalarını iyileştirmek ve uygulamanızı yeni tehditlere karşı korumak için yaptığımız diğer çalışmalar hakkında daha fazla bilgi edinmek isterseniz Google I/O'daki Android'de kullanıcı güvenliğini sağlama konuşmasına göz atın.
Kimlik Bilgisi Yöneticisi'ni otomatik doldurma ile 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 özelliğini 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
We are introducing the E2eeContactKeysManager in Android 15, which
facilitates end-to-end encryption (E2EE) in your Android apps by providing an
OS-level API for the storage of cryptographic public keys.
The E2eeContactKeysManager is designed to integrate with the platform
contacts app to give users a centralized way to manage and verify their
contacts' public keys.
İçerik URI'lerinde izin denetimleri
Android 15, içerik URI'lerinde izin kontrolleri gerçekleştiren bir dizi API'yi kullanıma sunar:
Context.checkContentUriPermissionFull: Bu seçenek, içerik URI'lerinde tam izin kontrolü gerçekleştirir.Activitymanifest özelliğirequireContentUriPermissionFromCaller: Bu özellik, etkinlik başlatıldığında sağlanan içerik URI'lerinde belirtilen izinleri zorunlu kılar.Activityçağırıcıları içinComponentCallersınıfı: Bu, etkinliği başlatan uygulamayı temsil eder.
Erişilebilirlik
Android 15, kullanıcılar için erişilebilirliği artıran özellikler ekler.
Daha iyi Braille
In Android 15, we've made it possible for TalkBack to support Braille displays that are using the HID standard over both USB and secure Bluetooth.
This standard, much like the one used by mice and keyboards, will help Android support a wider range of Braille displays over time.
Uluslararası hale getirme
Android 15, bir cihaz 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 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ı gerekçe
Android 15'ten itibaren metin, harf aralığı kullanılarak ikiye yaslanabilir ve
JUSTIFICATION_MODE_INTER_CHARACTER kullanılıyor. Kelimeler arası iki yana yaslama (önceki değeri)
İlk olarak Android 8.0'da (API düzeyi 26) kullanıma sunulduktan sonra
iki yana yaslama,
Segmentasyon için bir boşluk karakteri (ör. Çince, Japonca vb.).
JUSTIFICATION_MODE_NONE kullanılarak Japonca metin düzeni.
JUSTIFICATION_MODE_NONE kullanılarak İngilizce metin düzeni.
JUSTIFICATION_MODE_INTER_WORD kullanan Japonca metin için düzen.
JUSTIFICATION_MODE_INTER_WORD kullanılarak İngilizce metin düzeni.
JUSTIFICATION_MODE_INTER_CHARACTER kullanılarak Japonca metin düzeni.
JUSTIFICATION_MODE_INTER_CHARACTER kullanılarak oluşturulan İngilizce metin için düzen.Otomatik satır sonu yapılandırması
Android, İngilizcede Japonca ve Korece için sıralı tabanlı satır sonlarını desteklemeye başladı.
Android 13 (API düzeyi 33). Ancak sıralı tabanlı satır sonları,
metinler okunaklı olduğundan, uzun metin satırlarında iyi performans göstermez.
Android 15'te uygulamalar, LINE_BREAK_WORD_STYLE_AUTO seçeneğini kullanarak ifade tabanlı satır aralarını yalnızca kısa metin satırları için uygulayabilir. Bu seçenek, metin için en iyi kelime stili seçeneğini belirler.
Kısa metin satırları için, aynı işlevi gören kelime öbeğine dayalı satır sonları kullanılır.
aşağıda gösterildiği gibi LINE_BREAK_WORD_STYLE_PHRASE olarak
şu resim:
LINE_BREAK_WORD_STYLE_AUTO
Metnin okunabilirliğini artırmak için sıralı satır sonları uygular.
Bu,
LINE_BREAK_WORD_STYLE_PHRASE.Daha uzun metin satırları için LINE_BREAK_WORD_STYLE_AUTO, hayır kullanır
aynı şekilde çalışan satır sonu kelime stili
LINE_BREAK_WORD_STYLE_NONE,
şu resim:
LINE_BREAK_WORD_STYLE_AUTO
Metnin okunabilirliğini artırmak için satır sonu kelime stili uygulamaz.
Bu,
LINE_BREAK_WORD_STYLE_NONE.Ek Japonca Hentaigana Yazı Tipi
In Android 15, a font file for old Japanese Hiragana (known as Hentaigana) is bundled by default. The unique shapes of Hentaigana characters can add a distinctive flair to artwork or design while also helping to preserve accurate transmission and understanding of ancient Japanese documents.
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.