Özelliklere ve API'lere Genel Bakış

Android 15, geliştiriciler için harika ö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.

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 özellikler içerir. Ayrıca içerik üreticilerin vizyonlarını Android'de hayata geçirmelerini destekleyen araçlara ve donanımlara erişim sağlar.

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, desteklenen cihazlarda kamera donanımı ve algoritmaları üzerinde daha fazla kontrol için bir uzantı ekler:

  • Görüntü çekerken hem SINGLE hem de TORCH modlarında flaşın yoğunluğunu hassas bir şekilde kontrol etmenizi sağlayan gelişmiş flaş gücü ayarları.

HDR tavan boşluğu kontrolü

Android 15 会选择适合底层设备功能和面板位深的 HDR 余量。对于包含大量 SDR 内容的网页(例如显示单个 HDR 缩略图的消息应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。在 Android 15 中,您可以使用 setDesiredHdrHeadroom 控制 HDR 余量,以便在 SDR 内容和 HDR 内容之间取得平衡。

左侧屏幕上的 SDR 界面元素的亮度似乎比右侧屏幕上的亮度更均匀,这模拟了混合 HDR 和 SDR 内容时可能出现的余量问题。通过调整 HDR 余量,您可以在 SDR 和 HDR 内容之间实现更好的平衡。

Ses yüksekliği kontrolü

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.

Sanal MIDI 2.0 cihazları

Android 13 添加了对使用 USB 连接 MIDI 2.0 设备的支持,这些设备使用通用 MIDI 数据包 (UMP) 进行通信。Android 15 将 UMP 支持扩展到了虚拟 MIDI 应用,使作曲应用能够像使用 USB MIDI 2.0 设备一样,将虚拟 MIDI 2.0 设备用作控制合成器应用的设备。

Daha verimli AV1 yazılım kod çözme

dav1d logosu

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ırmak için yaptığımız çalışmaların çoğu Android Studio, Jetpack Compose ve Android Jetpack kitaplıkları gibi araçlara odaklansa da 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:

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 进行了重大改进。应用可以整合呈现等高级功能 受密码保护的文件、注释、表单编辑、 searching,而 selection 则包含副本。支持线性化 PDF 优化,此功能可加快本地 PDF 查看速度并减少资源使用量。Jetpack PDF 库使用这些 API 来简化 PDF 的添加 查看功能。

<ph type="x-smartling-placeholder">
</ph>
PDF 渲染的最新更新包括 搜索嵌入式 PDF 文件中的内容。

PdfRenderer 已移至一个可使用 Google Play 系统更新独立于平台版本,并且我们支持 将这些变更还原到 Android 11(API 级别 30),方法是创建兼容的 Android 15 之前版本的 API Surface,称为 PdfRendererPreV。

Otomatik dil değiştirme iyileştirmeleri

Android 14 在音频中添加了设备端多语言识别功能,并支持在语言之间自动切换,但这可能会导致丢失字词,尤其是当两次语音之间语言切换的间隔时间较短时。Android 15 添加了其他控件,以帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS 会将自动切换限制在音频会话开始时,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES 会在发生指定次数的切换后停用语言切换。如果您预计会话期间只会使用一种语言,并且该语言应被自动检测到,这些选项会特别有用。

Geliştirilmiş OpenType Değişken Yazı Tipi API'si

Android 15 提高了 OpenType 可变字体的易用性。您可以创建 来自可变字体的 FontFamily 实例,而不指定粗细轴 使用 buildVariableFamily API。文本渲染程序会替换 wght 轴的值,以匹配显示的文本。

使用该 API 可以大大简化创建 Typeface 的代码:

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();

以前,如需创建相同的 Typeface,您需要更多代码:

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();

以下示例展示了同时使用旧版和新版 API 创建的 Typeface 的呈现方式:

使用新旧 API 渲染字体时出现差异的示例

在此示例中,使用旧 API 创建的 Typeface 不包含 为 350、450、550 和 650 创建准确的字体粗细 Font 实例,因此渲染程序会回退到最接近的权重。在 在此示例中,系统会渲染 300 而不是 350,渲染 400 而不是 450, 依此类推。相比之下,使用新 API 创建的 Typeface 会为给定重量动态创建 Font 实例,因此系统也会为 350、450、550 和 650 呈现准确的重量。

Ayrıntılı satır sonu kontrolleri

从 Android 15 开始,TextView 和底层行断开符可以将给定部分文本保留在同一行中,以提高可读性。您可以通过在字符串资源或 createNoBreakSpan 中使用 <nobreak> 标记来充分利用此换行符自定义功能。同样,您可以使用 <nohyphen> 标记或 createNoHyphenationSpan 来防止对字词进行分词。

例如,以下字符串资源不包含换行符,在呈现时,文本“Pixel 8 Pro”会在不合适的位置换行:

<resources>
    <string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>

相比之下,此字符串资源包含 <nobreak> 标记,该标记会将字词“Pixel 8 Pro”换行,并防止换行:

<resources>
    <string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>

以下图片展示了这些字符串呈现方式的差异:

一行文本的布局,其中显示短语“Pixel 8 Pro.”未使用 <nobreak> 标记换行。
使用 <nobreak> 标记封装“Pixel 8 Pro.”短语的同一行文本的布局。

Uygulama arşivleme

Android ve Google Play son olarak uygulama arşivleme desteğini duyurdu yıl, kullanıcıların belirli bir süre içinde Cihazda Android Uygulaması kullanılarak yayınlanan, sık kullanılmayan uygulamalar Google Play'deki paket. Android 15, uygulama arşivleme ve arşivden çıkarma için OS düzeyinde destek içerir. Bu sayede tüm uygulama mağazalarının bu özelliği uygulamasını kolaylaştırır.

REQUEST_DELETE_PACKAGES iznine sahip uygulamalar, yüklü bir uygulama paketinin arşivlenmesini istemek için PackageInstaller requestArchive yöntemini çağırabilir. Bu yöntem, APK'yı ve önbelleğe alınmış dosyaları kaldırır ancak kullanıcı verilerini korur. Arşivlenen uygulamalar, LauncherApps API'leri aracılığıyla görüntülenebilir uygulamalar olarak döndürülür. Kullanıcılar, bu uygulamaların arşivlendiğini vurgulayan bir kullanıcı arayüzü işlemi görür. Kullanıcı arşivlenmiş bir uygulamaya dokunursa sorumlu yükleyici arşivden çıkarma isteği alır ve geri yükleme işlemi ACTION_PACKAGE_ADDED yayını tarafından izlenmektedir.

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 yapılan eklemeler de dahil olmak üzere en yeni grafik iyileştirmelerini sunar.

Android'in GPU erişimini modernize etme

Vulkan logo

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

Roadmap of upcoming changes to the Android GPU APIs.

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'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ştirirken clipOutShader, 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örevleri daha verimli bir şekilde yürütmenize, uygulama performansını optimize etmenize ve uygulamalarınız hakkında analizler toplamanıza yardımcı olan API'ler sunar.

Pil verimliliğiyle ilgili en iyi uygulamalar, ağ ve güç kullanımıyla ilgili hata ayıklama ve Android 15 ile son Android 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

在以前的 Android 版本中,应用启动一直是个谜。在应用中确定应用是从冷启动、温启动还是热启动状态启动很困难。您还很难了解应用在各种启动阶段(分叉进程、调用 onCreate、绘制第一个帧等)所花的时间。在 Application 类被实例化时,您无法知道应用是通过广播、content provider、作业、备份、启动完成、闹钟还是 Activity 启动的。

Android 15 上的 ApplicationStartInfo API 提供了所有这些功能,以及更多功能。您甚至可以选择在流程中添加自己的时间戳,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo 直接优化应用启动;例如,您可以消除在应用因广播而启动时在 Application 类中实例化与界面相关的库所带来的高昂开销。

Ayrıntılı uygulama boyutu bilgileri

Android 8.0 (API seviyesi 26) sürümünden itibaren Android, bir uygulamanın yüklü boyutunu tek bir bayt sayısı olarak özetleyen StorageStats.getAppBytes API'yi içermektedir. Bu sayı, APK boyutunun, APK'dan ayıklanan dosyaların boyutunun ve cihazda oluşturulan dosyaların (ör. önceden derlenmiş kod) toplamıdır. Bu sayı, uygulamanızın depolama alanını nasıl kullandığı konusunda çok yararlı değildir.

Android 15'te, APK dosya bölme işlemleri, AOT ve hızlandırmayla ilgili kod, dex meta verileri, kitaplıklar ve rehberli profiller dahil olmak üzere uygulamanızın tüm bu alanı nasıl kullandığı hakkında bilgi edinmenizi sağlayan StorageStats.getAppBytesByDataType([type]) API eklendi.

Uygulama tarafından yönetilen profil oluşturma

Android 15 包含 ProfilingManager 类,可让您从应用内部收集性能分析信息,例如堆转储、堆分析报告、堆栈采样等。它使用提供的标记为您的应用提供回调,以标识输出文件,该文件将传递给应用的文件目录。该 API 会进行速率限制,以尽可能降低对性能的影响。

为了简化在应用中构建性能分析请求的过程,我们建议您使用 Core 1.15.0-rc01 或更高版本中的相应 Profiling AndroidX API。

SQLite veritabanı iyileştirmeleri

Android 15, temel SQLite motorundaki gelişmiş özellikleri sunan ve uygulamalarda ortaya çıkabilecek belirli performans sorunlarını hedefleyen SQLite API'lerini kullanıma sunar. Bu API'ler, SQLite'ın sürüm güncellemesine dahil edilir 3.44.3 belgesini inceleyin.

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ıyla ilgili en iyi uygulamalara göz atmalıdır.

  • Salt okunur ertelenen işlemler: Salt okunur (yazma ifadeleri içermeyen) işlemler gönderirken salt okunur DEFERRED işlemleri göndermek için beginTransactionReadOnly() ve beginTransactionWithListenerReadOnly(SQLiteTransactionListener) kullanın. Bu tür işlemler, olarak ayarlayabilir ve veritabanı WAL modundaysa birbirlerine IMMEDIATE veya EXCLUSIVE işlemiyle eş zamanlı olarak çalışır.
  • Satır sayıları ve kimlikler: Değiştirilen öğelerin sayısını almak için API'ler eklenmiştir satır kimliğini veya son eklenen satır kimliğini girin. getLastChangedRowCount(), geçerli işlemdeki en son SQL ifadesi tarafından eklenen, güncellenen veya silinen satır sayısını döndürür. getTotalChangedRowCount() ise geçerli bağlantıdaki sayıyı döndürür. getLastInsertRowId(), son satırın rowid değerini döndürür yeni bir bağlantı eklemeniz gerekir.
  • Ham ifadeler: Kolaylık sağlayan sarmalayıcıları ve bunların neden olabileceği ek işlem maliyetlerini atlayarak ham SQlite ifadesi gönderin.

Android Dynamic Performance Framework güncellemeleri

Android 15, oyunların ve performans açısından yoğun uygulamaların Android cihazların güç ve termal sistemleriyle daha doğrudan etkileşim kurmasına olanak tanıyan bir API grubu olan Android Dinamik Performans Çerçevesi'ne (ADPF) yaptığımız yatırımı sürdürüyor. Android 15, desteklenen cihazlarda ADPF özelliklerini ekler:

  • İpucu oturumları için güç verimliliği modu. Bu mod, ilişkili ileti dizilerinin performans yerine güç tasarrufunu tercih etmesi gerektiğini belirtir. Uzun süreli arka plan iş yükleri için idealdir.
  • İpucu oturumlarında hem GPU hem de CPU çalışma süreleri raporlanabilir. Bu sayede sistem, iş yükü taleplerini en iyi şekilde karşılamak için CPU ve GPU frekanslarını birlikte ayarlayabilir.
  • Boşluk tahminine dayalı olası termal azaltma durumunu yorumlamak için termal boşluk eşikleri.

ADPF'yi uygulama ve oyunlarınızda nasıl kullanacağınız hakkında daha fazla bilgi edinmek için dokümanlara göz atın.

Gizlilik

Android 15, uygulama geliştiricilerin kullanıcı gizliliğini korumasına yardımcı olan çeşitli özellikler içerir.

Ekran kaydedicisi algılama

Android 15 增加了对应用的支持,以检测 正在录制。每当应用转换时,系统都会调用回调 在屏幕录制内容中处于可见与隐藏状态之间。如果正在记录注册进程的 UID 拥有的 activity,则系统会将应用视为可见。这样一来,如果您的应用执行敏感操作,您就可以告知用户正在录制他们的操作。

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 <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>

Özel alan

Gizli alanın kilidi açılabilir ve kilitlenebilir. Böylece cihazdaki hassas uygulamalar gösterilebilir veya gizlenebilir.

Ö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:

Seçili 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, 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 teknolojiler geliştirme çalışmalarımızın bir parçasıdır. Başlamanıza yardımcı olmak için Android geliştirici önizlemesi ve beta programlarındaki Özel Korumalı Alan hakkında daha fazla bilgiyi Özel Korumalı Alan sayfamızda bulabilirsiniz.

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:

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 支持应用屏幕共享,因此用户可以仅共享或录制应用窗口,而不是整个设备屏幕。此功能首次在 Android 14 QPR2 中启用,包含 MediaProjection 回调,可让您的应用自定义应用屏幕共享体验。请注意,对于以 Android 14(API 级别 34)或更高版本为目标平台的应用,每个 MediaProjection 捕获会话都需要征得用户同意。

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 sağlar.

Uygulamanızın kullanıcı deneyimini iyileştirmek için Android 15'teki en son iyileştirmeleri nasıl kullanacağınız hakkında daha fazla bilgi edinmek istiyorsanız 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

在 Android 15 之前,提供微件选择器预览的唯一方法是指定静态图片或布局资源。这些预览通常与放置在主屏幕上的实际 widget 的外观大不相同。此外,由于无法使用 Jetpack Glance 创建静态资源,因此“资讯一览” 开发者必须为其微件截屏或创建 XML 布局, 微件预览。

Android 15 添加了对生成的预览的支持。这意味着,应用微件提供程序可以生成 RemoteViews 以用作选择器预览,而不是静态资源。

应用可以向微件选择器提供远程视图, 更新选择器中的内容,使其更能代表用户的内容 看到的内容。

推送 API

应用可以通过推送 API 提供生成的预览。应用可以提供 预览,并且不会收到明确的请求, 以提供预览。预览会保留在 AppWidgetService 中,并且主持人可以按需请求预览。以下示例加载了一个 XML 微件 并将其设置为预览:

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

预期的流程如下:

  1. 任何时候,widget 提供程序都会调用 setWidgetPreview。提供的预览会与其他提供方信息一起保留在 AppWidgetService 中。
  2. setWidgetPreview 会通过 AppWidgetHost.onProvidersChanged 回调。作为回应,微件宿主会重新加载其所有提供方信息。
  3. 显示微件预览时,主机会检查 AppWidgetProviderInfo.generatedPreviewCategories,如果所选类别可用,则调用 AppWidgetManager.getWidgetPreview 以返回此提供程序的已保存预览。

何时调用 setWidgetPreview

由于没有用于提供预览的回调,因此应用可以选择在运行期间的任何时间发送预览。预览的更新频率取决于微件的用例。

以下列表介绍了两大类预览用例:

  • 在 widget 预览中显示真实数据(例如个性化数据)的提供程序 或最新信息。这些提供商可以设置预览 已登录 Google 账号或已在其应用中完成初始配置。之后 可以设置一项定期任务,按照所选的节奏更新预览。 此类 widget 的示例包括照片、日历、天气或新闻 widget。
  • 在预览中显示静态信息或不显示任何数据的快捷操作 widget 的提供程序。这些提供程序可以在应用首次启动时设置预览一次。例如,快速开车便是此类微件的示例 操作 widget 或 Chrome 快捷方式 widget。

某些提供商可能会在基座接入模式选择器上显示静态预览,但真实的 信息。这些提供商应遵循指南 设置预览

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 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 to AutomaticZenRule that describes the conditions on which the rule should become active for the user.
  • Added ZenDeviceEffects to AutomaticZenRule, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.

Bildirim kanalları için VibrationEffect ayarlama

Android 15 支持为传入的通知设置丰富的振动,方法是 频道使用的是NotificationChannel.setVibrationEffect,因此 您的用户可以区分不同类型的通知 不需要看他们的设备

Medya projeksiyonu durum çubuğu çipi ve otomatik durdurma

媒体投放可能会泄露用户的私密信息。一个醒目的新状态栏条状标签可让用户了解任何正在进行的屏幕投影。用户可以点按该条状标签停止投屏、共享或录制屏幕。此外,为了提供更直观的用户体验,当设备屏幕锁定后,所有正在进行的屏幕投影都会自动停止。

用于屏幕共享、投屏和录制的状态栏条状标签。

Büyük ekranlar ve form faktörleri

Android 15, uygulamalarınızın büyük ekranlar, dikey katlanabilir ve yatay katlanabilir cihazlar dahil olmak üzere 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 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, 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, uygulamanızın iletişim ve kablosuz teknolojilerdeki en son gelişmelerden yararlanabilmesi için platformu günceller.

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.

Cihaz bir uyduya bağlandığında bir bildirim görünür.

Daha sorunsuz NFC deneyimleri

Android 15 正在努力打造更顺畅、更可靠的感应式付款体验,同时继续支持 Android 强大的 NFC 应用生态系统。在受支持的设备上,应用可以请求 NfcAdapter 进入观察模式,在该模式下,设备会监听但不会响应 NFC 读卡器,并将应用的 NFC 服务 PollingFrame 对象发送以进行处理。PollingFrame 对象可用于在与 NFC 读卡器进行首次通信之前进行身份验证,在许多情况下,这支持一触式交易。

此外,应用可以在受支持的设备上注册过滤器,以便在有轮询循环活动时收到通知,从而能够与多个感知 NFC 的应用顺畅运行。

Cüzdan rolü

Android 15 引入了钱包角色,可与用户的首选钱包应用更紧密地集成。此角色会取代 NFC 默认的感应式付款设置。用户可以前往设置 > 应用 > 默认应用,管理钱包角色持有者。

在为在付款类别中注册的 AID 路由 NFC 感应式付款时,系统会使用钱包角色。点按操作始终会转到 Google 钱包角色持有者,除非有已注册相同 AID 的其他应用在前台运行。

此角色还用于确定“Google 钱包”快速访问功能块在启用后应显示在何处。将角色设为“无”时,“快速访问”功能块不可用,并且支付类别 NFC 点按仅传送到前台应用。

Güvenlik

Android 15, uygulamanızın güvenliğini artırmanıza ve verilerini korumanıza yardımcı olurken kullanıcılara verileri üzerinde daha fazla şeffaflık ve kontrol imkanı sunar. Kullanıcı koruma önlemlerini iyileştirmek ve uygulamanızı yeni tehditlere karşı korumak için neler yaptığımız hakkında daha fazla bilgi edinmek isterseniz Google I/O'daki Android'de kullanıcı güvenliğini koruma konuşmasını izleyebilirsiniz.

Kimlik Bilgisi Yöneticisi'ni otomatik doldurma ile entegre etme

Android 15'ten itibaren geliştiriciler kullanıcı adı veya şifre alanları gibi belirli görünümleri Kimlik Bilgisi Yöneticisi istekleriyle bağlayabilir. Bu sayede, oturum açma işlemi sırasında özelleştirilmiş bir kullanıcı deneyimi sunmak daha kolay hale gelir. Kullanıcı bu görünümlerden birine odaklandığında Kimlik Bilgisi Yöneticisi'ne ilgili bir istek gönderilir. Elde edilen kimlik bilgileri sağlayıcılar arasında toplanır ve satır içi öneriler veya açılır liste önerileri gibi otomatik doldurma yedek kullanıcı arayüzlerinde gösterilir. Jetpack androidx.credentials kitaplığı, geliştiricilerin tercih ettiği uç noktadır ve yakında Android 15 ve sonraki sürümlerde bu özelliği daha da geliştirmek için kullanıma sunulacaktır.

Tek dokunuşla kaydolma ve oturum açma özelliğini biyometrik istemlerle entegre etme

Kimlik Bilgisi Yöneticisi, biyometrik istemleri kimlik bilgisi oluşturmaya entegre eder ve oturum açma işlemlerini gerçekleştirdiğinden sağlayıcıların yönetim ihtiyacını biyometrik istemleri kullanabilir. Sonuç olarak, kimlik bilgisi sağlayıcıların yalnızca kimlik bilgisi oluşturma ve alma akışlarının sonuçlarına odaklanmaları ve bu sonuçları biyometrik akış sonucuyla tamamlamaları gerekir. Bu basitleştirilmiş süreç, daha verimli ve basit bir kimlik bilgisi oluşturma ve alma süreci oluşturur.

Uçtan uca şifreleme için anahtar yönetimi

Android 15'te, kriptografik açık anahtarları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 kullanıma sunuyoruz.

E2eeContactKeysManager, kullanıcılara kişilerinin herkese açık anahtarlarını merkezi bir şekilde yönetme ve doğrulama olanağı sunmak için platformdaki kişiler uygulamasıyla entegre olacak şekilde tasarlanmıştır.

İçerik URI'lerinde izin kontrolleri

Android 15, içerik URI'lerinde izin kontrolleri gerçekleştiren bir dizi API'yi kullanıma sunar:

Erişilebilirlik

Android 15, kullanıcılar için erişilebilirliği artıran özellikler ekler.

Daha iyi Braille

在 Android 15 中,我们让 TalkBack 能够支持通过 USB 和安全蓝牙使用 HID 标准的盲文显示屏。

此标准与鼠标和键盘使用的标准非常相似,将有助于 Android 随着时间的推移支持更多类型的盲文显示屏。

Uluslararası hale getirme

Android 15, cihaz farklı dillerde kullanıldığında kullanıcı deneyimini tamamlayan özellikler ve işlevler ekler.

CJK değişken yazı tipi

Android 15'ten itibaren Çince, Japonca ve Korece (CJK) diller için NotoSansCJK yazı tipi dosyası değişken yazı tipi olarak kullanılmaktadır. Değişken yazı tipleri, CJK dillerinde yaratıcı tipografi olanakları sunar. Tasarımcılar daha geniş bir stil yelpazesini keşfedebilir ve daha önce elde edilmesi zor veya imkansız olan görsel açıdan çarpıcı düzenler oluşturabilir.

Çince, Japonca ve Korece (CJK) dilleri için değişken yazı tipi farklı yazı tipi genişliklerinde nasıl görünür?

Karakterler arası hizalama

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:

Kısa metin satırlarında 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:

Uzun metin satırları için 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

Android 15'te eski Japonca Hiragana (Hentaigana olarak bilinir) yazı tipi dosyası varsayılan olarak paketlenmiştir. Hentaigana karakterlerinin benzersiz şekilleri sanat eseri veya tasarımda ayırt edici bir dokunuş katar ve aynı zamanda doğru hazineleri eski Japon belgelerinin iletimi ve anlaşılması.

Japonca Hentaigana için karakter ve metin stili yazı tipi

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.