Android 15 มาพร้อมฟีเจอร์และ API ที่ยอดเยี่ยมสำหรับนักพัฒนาแอป ส่วนต่อไปนี้ จะสรุปฟีเจอร์เหล่านี้เพื่อช่วยให้คุณเริ่มต้นใช้งาน API ที่เกี่ยวข้องได้
ดูรายการ API ที่เพิ่ม แก้ไข และนำออกโดยละเอียดได้ในรายงานความแตกต่างของ API ดูรายละเอียดเกี่ยวกับ API ที่เพิ่มได้ที่เอกสารอ้างอิง Android API — สำหรับ Android 15 ให้มองหา API ที่เพิ่มใน API ระดับ 35 หากต้องการดูข้อมูลเกี่ยวกับส่วนที่การเปลี่ยนแปลงแพลตฟอร์มอาจส่งผลต่อแอปของคุณ โปรดดูการเปลี่ยนแปลงลักษณะการทํางานของ Android 15 สําหรับแอปที่กําหนดเป้าหมายเป็น Android 15 และสําหรับแอปทั้งหมด
กล้องและสื่อ
Android 15 มีฟีเจอร์มากมายที่ช่วยปรับปรุงประสบการณ์การใช้งานกล้องและสื่อ รวมถึงให้คุณเข้าถึงเครื่องมือและฮาร์ดแวร์เพื่อสนับสนุนครีเอเตอร์ในการ ทำให้วิสัยทัศน์ของตนเป็นจริงบน Android
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ล่าสุดและโซลูชันสำหรับนักพัฒนาแอปสำหรับสื่อและกล้องของ Android ได้ที่ทอล์กการสร้างประสบการณ์การใช้งานสื่อและกล้องที่ทันสมัยใน Android จาก Google I/O
การเพิ่มแสงในสภาวะแสงน้อย
Android 15 เปิดตัวการเพิ่มคุณภาพในโหมดแสงน้อย ซึ่งเป็นโหมดการรับแสงอัตโนมัติที่ใช้ได้กับทั้ง Camera 2 และส่วนขยายกล้องโหมดกลางคืน การเพิ่มแสงในสภาวะแสงน้อยจะปรับการเปิดรับแสงของสตรีมตัวอย่างในสภาวะที่มีแสงน้อย ซึ่งแตกต่างจากวิธีที่ส่วนขยายกล้องโหมดกลางคืนสร้างภาพนิ่ง เนื่องจากโหมดกลางคืนจะรวมภาพถ่ายหลายรูปเข้าด้วยกันเพื่อสร้างรูปภาพเดียวที่ปรับปรุงแล้ว แม้ว่าโหมดกลางคืนจะทำงานได้ดีกับการสร้างภาพนิ่ง แต่ก็ไม่สามารถสร้างเฟรมอย่างต่อเนื่อง แต่โหมดเพิ่มคุณภาพในที่แสงน้อยทำได้ การเพิ่มคุณภาพในที่แสงน้อยจึงเปิดใช้ความสามารถของกล้อง เช่น
- แสดงตัวอย่างรูปภาพที่ปรับปรุงแล้วเพื่อให้ผู้ใช้จัดเฟรมรูปภาพที่มีแสงน้อยได้ดียิ่งขึ้น
- การสแกนคิวอาร์โค้ดในที่แสงน้อย
หากเปิดใช้การเพิ่มแสงในสภาวะแสงน้อย ฟีเจอร์นี้จะเปิดโดยอัตโนมัติเมื่อมีระดับแสงต่ำ และปิดเมื่อมีแสงมากขึ้น
แอปสามารถบันทึกจากสตรีมตัวอย่างในสภาพแสงน้อยเพื่อบันทึกวิดีโอที่สว่างขึ้น
ดูข้อมูลเพิ่มเติมได้ที่การเพิ่มคุณภาพในโหมดแสงน้อย
การควบคุมกล้องในแอป
Android 15 添加了一个扩展程序,可让您更好地控制支持的设备上的相机硬件及其算法:
การควบคุมส่วนหัวของ HDR
Android 15 จะเลือก Headroom ของ HDR ที่เหมาะสมกับความสามารถของอุปกรณ์และความละเอียดของบิตของแผง สำหรับหน้าเว็บที่มีเนื้อหา SDR จำนวนมาก เช่น แอปรับส่งข้อความที่แสดงภาพขนาดย่อ HDR รายการเดียว ลักษณะการทำงานนี้อาจส่งผลเสียต่อความสว่างที่รับรู้ของเนื้อหา SDR Android 15 ให้คุณควบคุม Headroom ของ HDR ด้วย setDesiredHdrHeadroom เพื่อรักษาสมดุลระหว่างเนื้อหา SDR กับ HDR
การควบคุมความดัง

Android 15 引入了对 CTA-2075 响度标准的支持,可帮助您避免音频响度不一致,并确保用户在切换内容时不必不断调整音量。系统利用输出设备(头戴式耳机和扬声器)的已知特性以及 AAC 音频内容中提供的响度元数据,智能调整音频响度和动态范围压缩级别。
如需启用此功能,您需要确保 AAC 内容中提供响度元数据,并在应用中启用平台功能。为此,您可以通过使用关联的 AudioTrack 中的音频会话 ID 调用其 create 工厂方法来实例化 LoudnessCodecController 对象;这会自动开始应用音频更新。您可以传递 OnLoudnessCodecUpdateListener 来修改或过滤响度参数,然后再将其应用于 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 也将更新,以使用
LoudnessCodecController API,可实现无缝应用集成。
อุปกรณ์ MIDI 2.0 เสมือน
Android 13 เพิ่มการรองรับการเชื่อมต่อกับอุปกรณ์ MIDI 2.0 โดยใช้ USB ซึ่งสื่อสารโดยใช้แพ็กเก็ต MIDI สากล (UMP) Android 15 ขยายการรองรับ UMP ไปยังแอป MIDI เสมือน ซึ่งช่วยให้แอปแต่งเพลงควบคุมแอปซินธิไซเซอร์ได้เสมือนเป็นอุปกรณ์ MIDI 2.0 เสมือนจริง เช่นเดียวกับที่ควบคุมอุปกรณ์ USB MIDI 2.0
การถอดรหัสซอฟต์แวร์ AV1 ที่มีประสิทธิภาพมากขึ้น
dav1d 是 VideoLAN 推出的热门 AV1 软件解码器,适用于不支持硬件 AV1 解码的 Android 设备。与旧版 AV1 软件解码器相比,dav1d 的性能最高可提升 3 倍,让更多用户(包括一些低端和中端设备)能够播放高清 AV1 视频。
您的应用需要选择启用 dav1d,方法是通过名称 "c2.android.av1-dav1d.decoder" 调用它。在后续更新中,dav1d 将成为默认的 AV1 软件解码器。此支持已标准化,并向后移植到收到 Google Play 系统更新的 Android 11 设备。
ประสิทธิภาพการทำงานและเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
แม้ว่างานส่วนใหญ่ของเราในการปรับปรุงประสิทธิภาพการทำงานของคุณจะมุ่งเน้นไปที่เครื่องมือต่างๆ เช่น Android Studio, Jetpack Compose และไลบรารี Android Jetpack แต่เราก็มองหาวิธีต่างๆ ในแพลตฟอร์มอยู่เสมอเพื่อช่วยให้คุณตระหนักถึงวิสัยทัศน์ได้ง่ายขึ้น
การอัปเดต OpenJDK 17
Android 15 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致。
其中包含以下主要功能和改进:
- 改进了 NIO 缓冲区的使用体验
- 数据流
- 其他
math和strictmath方法 util软件包更新,包括顺序的collection、map和setDeflater中的ByteBuffer支持- 安全更新,例如
X500PrivateCredential和安全密钥更新
这些 API 会通过 Google Play 系统更新在搭载 Android 12(API 级别 31)及更高版本的 10 亿多部设备上更新,以便您以最新的编程功能为目标平台。
การปรับปรุง PDF
Android 15 对 PdfRenderer API 进行了重大改进。应用可以整合呈现等高级功能
受密码保护的文件、注释、表单编辑、
searching,而 selection 则包含副本。支持线性化 PDF 优化,此功能可加快本地 PDF 查看速度并减少资源使用量。Jetpack PDF 库使用这些 API 来简化 PDF 的添加
查看功能。
PdfRenderer 已移至一个可使用 Google
Play 系统更新独立于平台版本,并且我们支持
将这些变更还原到 Android 11(API 级别 30),方法是创建兼容的
Android 15 之前版本的 API Surface,称为
PdfRendererPreV。
การปรับแต่งการสลับภาษาอัตโนมัติ
Android 14 เพิ่มการจดจำเสียงหลายภาษาในอุปกรณ์ด้วยการสลับระหว่างภาษาโดยอัตโนมัติ แต่วิธีนี้อาจทำให้คำพูดถูกละทิ้ง โดยเฉพาะเมื่อสลับภาษาโดยเว้นช่วงระหว่างคำพูดน้อยลง Android 15 เพิ่มการควบคุมเพิ่มเติมเพื่อช่วยแอปปรับการเปลี่ยนนี้ให้เหมาะกับกรณีการใช้งาน
EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS
จำกัดการเปลี่ยนภาษาอัตโนมัติไว้ที่ช่วงต้นของเซสชันเสียง ส่วน EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES จะปิดใช้งานการเปลี่ยนภาษาหลังจากเปลี่ยนจำนวนครั้งที่กำหนด ตัวเลือกเหล่านี้มีประโยชน์อย่างยิ่งในกรณีที่คุณคาดว่าจะมีการใช้ภาษาเดียวในเซสชันที่ควรตรวจจับโดยอัตโนมัติ
API แบบอักษรที่ปรับแต่งได้ OpenType ที่ได้รับการปรับปรุง
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 创建的 Typeface 不包含
为 350、450、550 和 650 创建准确的字体粗细
Font 实例,因此渲染程序会回退到最接近的权重。在
在此示例中,系统会渲染 300 而不是 350,渲染 400 而不是 450,
依此类推。相比之下,使用新 API 创建的 Typeface 会为给定重量动态创建 Font 实例,因此系统也会为 350、450、550 和 650 呈现准确的重量。
การควบคุมการขึ้นบรรทัดใหม่แบบละเอียด
ตั้งแต่ Android 15 เป็นต้นไป TextView และตัวแบ่งบรรทัดที่สำคัญจะเก็บรักษาข้อความที่ระบุในบรรทัดเดียวกันไว้เพื่อให้อ่านง่ายขึ้น คุณใช้ประโยชน์จากการปรับเปลี่ยนการขึ้นบรรทัดใหม่นี้ได้โดยการใช้แท็ก <nobreak> ในทรัพยากรสตริงหรือ createNoBreakSpan ในทำนองเดียวกัน คุณสามารถคงคำไม่ให้มีการแบ่งวรรคโดยใช้แท็ก <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>
ความแตกต่างของวิธีแสดงผลสตริงเหล่านี้จะแสดงอยู่ในรูปภาพต่อไปนี้
<nobreak>
<nobreak>การเก็บแอปถาวร
Android และ Google Play ได้ประกาศรองรับการเก็บถาวรของแอปไปเมื่อปีที่ผ่านมา ซึ่งช่วยให้ผู้ใช้เพิ่มพื้นที่ว่างได้ด้วยการนําแอปที่ไม่ได้ใช้บ่อยออกจากอุปกรณ์บางส่วน ซึ่งเผยแพร่โดยใช้ Android App Bundle ใน Google Play Android 15 มีการรองรับการเก็บถาวรแอปในระดับระบบปฏิบัติการ และยกเลิกการเก็บ ซึ่งจะทำให้ App Store ทั้งหมดติดตั้งใช้งานได้ง่ายขึ้น
แอปที่มีสิทธิ์ REQUEST_DELETE_PACKAGES สามารถเรียกใช้เมธอด requestArchive ของ PackageInstaller เพื่อขอเก็บถาวรแพ็กเกจแอปที่ติดตั้ง ซึ่งจะนำ APK และไฟล์แคชทั้งหมดออก แต่จะเก็บข้อมูลผู้ใช้ไว้ แอปที่เก็บถาวรจะแสดงผลเป็นแอปที่แสดงได้ผ่าน
LauncherApps API ผู้ใช้จะเห็นตัวเลือก UI เพื่อไฮไลต์
เก็บแอปพลิเคชันแล้ว หากผู้ใช้แตะแอปที่เก็บไว้ ผู้ติดตั้งที่รับผิดชอบจะได้รับคําขอให้ยกเลิกการเก็บ และสามารถตรวจสอบกระบวนการกู้คืนได้โดยการออกอากาศ ACTION_PACKAGE_ADDED
เปิดใช้โหมด 16 KB ในอุปกรณ์โดยใช้ตัวเลือกสำหรับนักพัฒนาแอป
สลับตัวเลือกสำหรับนักพัฒนาแอปบูตโดยใช้หน้าหน่วยความจำขนาด 16 KB เพื่อบูตอุปกรณ์ในโหมด 16 KB
ใน Android 15 เวอร์ชัน QPR คุณสามารถใช้ตัวเลือกสำหรับนักพัฒนาแอปที่มีในอุปกรณ์บางรุ่นเพื่อบูตอุปกรณ์ในโหมด 16 KB และทำการทดสอบในอุปกรณ์ได้ ก่อนใช้ตัวเลือกสำหรับนักพัฒนาแอป ให้ไปที่การตั้งค่า > ระบบ > การอัปเดต ซอฟต์แวร์ แล้วใช้การอัปเดตที่มี
ตัวเลือกสำหรับนักพัฒนาแอปนี้พร้อมใช้งานในอุปกรณ์ต่อไปนี้
Pixel 8 และ 8 Pro (ที่ใช้ Android 15 QPR1 ขึ้นไป)
Pixel 8a (ใช้ Android 15 QPR1 ขึ้นไป)
Pixel 9, 9 Pro และ 9 Pro XL (ใช้ Android 15 QPR2 Beta 2 ขึ้นไป)
กราฟิก
Android 15 มาพร้อมการปรับปรุงกราฟิกล่าสุด ซึ่งรวมถึง ANGLE และการเพิ่มระบบกราฟิก Canvas
การปรับปรุงการเข้าถึง GPU ของ Android
ฮาร์ดแวร์ Android พัฒนาไปมากจากยุคแรกๆ ที่ระบบปฏิบัติการหลักจะทำงานบน CPU เพียงตัวเดียวและเข้าถึง GPU โดยใช้ API ตามไปป์ไลน์ฟังก์ชันคงที่ Vulkan® graphics API พร้อมใช้งานใน NDK ตั้งแต่ Android 7.0 (API ระดับ 24) โดยใช้การแยกระดับที่ต่ำลงซึ่งแสดงถึงฮาร์ดแวร์ GPU สมัยใหม่ได้ดียิ่งขึ้น ปรับขนาดได้ดียิ่งขึ้นเพื่อรองรับแกน CPU หลายแกน และลดค่าใช้จ่ายเพิ่มเติมของไดรเวอร์ CPU ซึ่งส่งผลให้แอปมีประสิทธิภาพดีขึ้น เครื่องมือเกมสมัยใหม่ทั้งหมดรองรับ Vulkan
Vulkan เป็นอินเทอร์เฟซที่ Android แนะนำสำหรับ GPU ดังนั้น Android 15 จึงรวม ANGLE ไว้เป็นเลเยอร์ที่ไม่บังคับสําหรับการเรียกใช้ OpenGL® ES บน Vulkan การเปลี่ยนไปใช้ ANGLE จะทำให้การใช้งาน OpenGL ของ Android เป็นมาตรฐานเดียวกันเพื่อการทำงานร่วมกันได้ดียิ่งขึ้น และปรับปรุงประสิทธิภาพในบางกรณี คุณสามารถทดสอบความเสถียรและประสิทธิภาพของแอป OpenGL ES โดยใช้ ANGLE ได้โดยเปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปในการตั้งค่า -> ระบบ -> ตัวเลือกสำหรับนักพัฒนาแอป -> ทดลอง: เปิดใช้ ANGLE ใน Android 15
แผนพัฒนา ANGLE บน Vulkan ของ Android
ในอนาคตเราจะจัดส่ง ANGLE เป็นไดรเวอร์ระบบ GL ในอุปกรณ์ใหม่จำนวนมากขึ้นเพื่อปรับปรุงประสิทธิภาพของ GPU โดยคาดว่า OpenGL/ES จะใช้งานได้ผ่าน ANGLE เท่านั้น อย่างไรก็ตาม เราวางแผนที่จะรองรับ OpenGL ES บนอุปกรณ์ทุกเครื่องต่อไป
ขั้นตอนถัดไปที่แนะนำ
ใช้ตัวเลือกสำหรับนักพัฒนาแอปเพื่อเลือกไดรเวอร์ ANGLE สำหรับ OpenGL ES และทดสอบแอป สำหรับโปรเจ็กต์ใหม่ เราขอแนะนำให้ใช้ Vulkan สำหรับ C/C++
การปรับปรุงสำหรับ Canvas
Android 15 继续对 Android 的 Canvas 图形系统进行现代化改造,并新增了以下功能:
Matrix44提供一个 4x4 矩阵来转换坐标,当您想在 3D 中操控画布时,应使用此矩阵。clipShader会将当前剪裁区域与指定的着色器相交,而clipOutShader会将剪裁区域设为当前剪裁区域与着色器的差值,每个操作都会将着色器视为一个 Alpha 遮罩。这支持高效地绘制复杂形状。
ประสิทธิภาพและแบตเตอรี่
Android ยังคงมุ่งเน้นที่การช่วยคุณปรับปรุงประสิทธิภาพและคุณภาพ ของแอป Android 15 เปิดตัว API ที่ช่วยให้การทำงานในแอปมีประสิทธิภาพมากขึ้น เพิ่มประสิทธิภาพของแอป และรวบรวมข้อมูลเชิงลึกเกี่ยวกับ แอปของคุณ
ดูแนวทางปฏิบัติแนะนำเพื่อประสิทธิภาพแบตเตอรี่ การแก้ไขข้อบกพร่องของเครือข่ายและการใช้พลังงาน รวมถึง รายละเอียดเกี่ยวกับวิธีที่เราปรับปรุงประสิทธิภาพแบตเตอรี่ของงานที่ทำงานเบื้องหลังใน Android 15 และ Android เวอร์ชันล่าสุดได้ที่ทอล์กการปรับปรุงประสิทธิภาพแบตเตอรี่ของ งานที่ทำงานเบื้องหลังใน Android จาก Google I/O
ApplicationStartInfo API
在以前的 Android 版本中,应用启动一直是个谜。在应用中确定应用是从冷启动、温启动还是热启动状态启动很困难。您还很难了解应用在各种启动阶段(分叉进程、调用 onCreate、绘制第一个帧等)所花的时间。在 Application 类被实例化时,您无法知道应用是通过广播、content provider、作业、备份、启动完成、闹钟还是 Activity 启动的。
Android 15 上的 ApplicationStartInfo API 提供了所有这些功能,以及更多功能。您甚至可以选择在流程中添加自己的时间戳,以便在一个位置收集时间数据。除了收集指标之外,您还可以使用 ApplicationStartInfo 直接优化应用启动;例如,您可以消除在应用因广播而启动时在 Application 类中实例化与界面相关的库所带来的高昂开销。
ข้อมูลขนาดแอปโดยละเอียด
ตั้งแต่ Android 8.0 (API ระดับ 26) เป็นต้นไป Android ได้รวม StorageStats.getAppBytes API ที่สรุปขนาดของแอปที่ติดตั้งเป็นจำนวนไบต์เดียว ซึ่งเป็นผลรวมของขนาด APK, ขนาดของไฟล์ที่ดึงมาจาก APK และไฟล์ที่สร้างในอุปกรณ์ เช่น โค้ดที่คอมไพล์ล่วงหน้า (AOT) ตัวเลขนี้ไม่ได้ให้ข้อมูลเชิงลึกมากนักเกี่ยวกับวิธีที่แอปใช้พื้นที่เก็บข้อมูล
Android 15 เพิ่ม StorageStats.getAppBytesByDataType([type]) API ซึ่งจะช่วยให้คุณได้รับข้อมูลเชิงลึกเกี่ยวกับวิธีที่แอปใช้พื้นที่ทั้งหมดนั้น รวมถึงการแยกไฟล์ APK, AOT และโค้ดที่เกี่ยวข้องกับการเร่งความเร็ว, ข้อมูลเมตา dex, ไลบรารี และโปรไฟล์ที่แนะนำ
การทำโปรไฟล์ที่แอปจัดการ
Android 15 มีคลาส ProfilingManager ซึ่งช่วยให้คุณรวบรวมข้อมูลการโปรไฟล์จากภายในแอปได้ เช่น การดัมพ์กอง โปรไฟล์กอง สุ่มตัวอย่างสแต็ก และอื่นๆ โดยจะทำการเรียกกลับไปยังแอปด้วยแท็กที่ระบุเพื่อระบุไฟล์เอาต์พุต ซึ่งระบบจะส่งไปยังไดเรกทอรีไฟล์ของแอป API จะจำกัดอัตราเพื่อลดผลกระทบด้านประสิทธิภาพ
เราขอแนะนําให้ใช้ Profiling AndroidX API ที่เกี่ยวข้องเพื่อลดความซับซ้อนในการสร้างคําขอโปรไฟล์ในแอป ซึ่งพร้อมใช้งานใน Core 1.15.0-rc01 ขึ้นไป
การปรับปรุงฐานข้อมูล SQLite
Android 15 引入了 SQLite API,这些 API 可公开底层 SQLite 引擎的高级功能,以解决可能在应用中出现的特定性能问题。将 SQLite 更新到版本 3.44.3。
开发者应参阅 SQLite 性能最佳实践 以便充分利用其 SQLite 数据库,尤其是在处理大型 或运行对延迟敏感的查询时
- 只读延迟事务:在发出
只读(不包括写入语句),请使用
beginTransactionReadOnly()和beginTransactionWithListenerReadOnly(SQLiteTransactionListener)发出只读的DEFERRED事务。此类事务 如果数据库处于 WAL 模式 与IMMEDIATE或EXCLUSIVE事务并发运行。 - 行数和 ID:添加了 API 以检索已更改的行数和 ID
行或最后插入的行 ID 而不发出额外的查询。
getLastChangedRowCount()会返回当前事务中最近的 SQL 语句插入、更新或删除的行数,而getTotalChangedRowCount()会返回当前连接的计数。getLastInsertRowId()返回最后一行的rowid以便在当前连接中插入 - 原始语句:发出原始 SQlite 语句,从而绕过便利 及其可能产生的任何额外处理开销。
การอัปเดตเฟรมเวิร์กประสิทธิภาพแบบไดนามิกของ Android
Android 15 继续投资于 Android 动态性能框架 (ADPF),这是一组 API,可让游戏和性能密集型应用更为直接地与 Android 设备的电源和散热系统进行互动。在受支持的设备上,Android 15 添加了 ADPF 功能:
- 针对提示会话的节能模式,用于指明其关联的线程应优先节能而非性能,非常适合长时间运行的后台工作负载。
- 系统可以在提示会话中报告 GPU 和 CPU 工作时长,以便同时调整 CPU 和 GPU 频率,以最佳方式满足工作负载需求。
- 热余量阈值,用于根据余量预测来解读可能的热节流状态。
如需详细了解如何在应用和游戏中使用 ADPF,请参阅相关文档。
ความเป็นส่วนตัว
Android 15 มีฟีเจอร์มากมายที่จะช่วยนักพัฒนาแอปปกป้องความเป็นส่วนตัวของผู้ใช้
การตรวจหาการบันทึกหน้าจอ
Android 15 เพิ่มการรองรับแอปเพื่อตรวจจับว่ามีการบันทึกเสียง ระบบจะเรียกใช้การเรียกกลับทุกครั้งที่แอปเปลี่ยนสถานะระหว่างมองเห็นหรือไม่มองเห็นภายในการบันทึกหน้าจอ แอปคือ ถือว่ามองเห็นได้หากกิจกรรมที่เป็นของ UID ของกระบวนการลงทะเบียนนั้น มีการบันทึก วิธีนี้ช่วยให้คุณแจ้งให้ผู้ใช้ทราบว่ามีการบันทึกเสียงอยู่ได้ หากแอปของคุณดําเนินการที่มีความละเอียดอ่อน
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)
}
ความสามารถของ IntentFilter ที่เพิ่มขึ้น
Android 15 รองรับความละเอียดของ Intent ที่แม่นยำยิ่งขึ้นผ่าน UriRelativeFilterGroup ซึ่งมีชุดออบเจ็กต์ UriRelativeFilter ที่ประกอบขึ้นเป็นชุดกฎการจับคู่ Intent ที่ต้องปฏิบัติตามแต่ละส่วน เช่น พารามิเตอร์การค้นหา URL, ส่วนย่อยของ URL และกฎการบล็อกหรือการยกเว้น
คุณกำหนดกฎเหล่านี้ในไฟล์ XML AndroidManifest ได้ด้วยแท็ก <uri-relative-filter-group> ซึ่งอาจรวมแท็ก android:allow หรือไม่ก็ได้ แท็กเหล่านี้อาจมีแท็ก <data> ที่ใช้แอตทริบิวต์แท็กที่มีอยู่ รวมถึงแอตทริบิวต์ android:query และ android:fragment
ตัวอย่างไวยากรณ์ AndroidManifest
<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>
พื้นที่ส่วนตัว
พื้นที่ส่วนตัวช่วยให้ผู้ใช้สร้างพื้นที่แยกต่างหากในอุปกรณ์ ซึ่งสามารถซ่อนแอปที่มีความละเอียดอ่อนเพื่อป้องกันไม่ให้ผู้อื่นแอบดูได้ภายใต้การตรวจสอบสิทธิ์อีกชั้น พื้นที่ส่วนตัวจะใช้โปรไฟล์ผู้ใช้แยกต่างหาก ผู้ใช้สามารถเลือกใช้การล็อกอุปกรณ์หรือปัจจัยการล็อกแยกต่างหากสำหรับพื้นที่ส่วนตัว
แอปในพื้นที่ส่วนตัวจะปรากฏในคอนเทนเนอร์แยกต่างหากใน Launcher และถูกซ่อนจากมุมมองรายการล่าสุด การแจ้งเตือน การตั้งค่า และแอปอื่นๆ เมื่อล็อกพื้นที่ส่วนตัวไว้ เนื้อหาที่ผู้ใช้สร้างขึ้นและดาวน์โหลด (เช่น สื่อหรือไฟล์) และบัญชีจะแยกกันระหว่างพื้นที่ส่วนตัวและพื้นที่หลัก คุณสามารถใช้ระบบ Sharesheet และเครื่องมือเลือกรูปภาพเพื่อให้แอปเข้าถึงเนื้อหาในพื้นที่ต่างๆ ได้เมื่อปลดล็อกพื้นที่ส่วนตัว
ผู้ใช้จะย้ายแอปที่มีอยู่และข้อมูลของแอปไปยังพื้นที่ส่วนตัวไม่ได้ แต่ผู้ใช้จะเลือกตัวเลือกการติดตั้งในพื้นที่ส่วนตัวเพื่อติดตั้งแอปโดยใช้ App Store ที่ต้องการแทน แอปในพื้นที่ส่วนตัวจะติดตั้งเป็นสำเนาแยกต่างหากจากแอปในพื้นที่หลัก (สำเนาใหม่ของแอปเดียวกัน)
เมื่อผู้ใช้ล็อกพื้นที่ส่วนตัว โปรไฟล์จะหยุดทำงาน เมื่อโปรไฟล์หยุดทำงาน แอปในพื้นที่ส่วนตัวจะไม่ทำงานอีกต่อไปและไม่สามารถดําเนินกิจกรรมในเบื้องหน้าหรือเบื้องหลัง รวมถึงแสดงการแจ้งเตือน
เราขอแนะนำให้คุณทดสอบแอปด้วยพื้นที่ส่วนตัวเพื่อให้แน่ใจว่าแอปทำงานได้ตามที่คาดไว้ โดยเฉพาะอย่างยิ่งหากแอปของคุณจัดอยู่ในหมวดหมู่ใดหมวดหมู่หนึ่งต่อไปนี้
- แอปที่มีตรรกะสำหรับโปรไฟล์งานซึ่งถือว่าสำเนาของแอปที่ติดตั้งไว้ซึ่งไม่ได้อยู่ในโปรไฟล์หลักอยู่ในโปรไฟล์งาน
- แอปทางการแพทย์
- แอป Launcher
- แอป App Store
ค้นหาการเลือกของผู้ใช้ล่าสุดสำหรับการเข้าถึงรูปภาพที่เลือก
ตอนนี้แอปจะไฮไลต์ได้เฉพาะรูปภาพและวิดีโอที่เลือกล่าสุดเมื่อได้รับสิทธิ์การเข้าถึงบางส่วนในสื่อ ฟีเจอร์นี้ช่วยปรับปรุง
ประสบการณ์ของผู้ใช้สำหรับแอปที่มักขอเข้าถึงรูปภาพและ
วิดีโอ หากต้องการใช้ฟีเจอร์นี้ในแอป ให้เปิดใช้อาร์กิวเมนต์ QUERY_ARG_LATEST_SELECTION_ONLY เมื่อค้นหา MediaStore ผ่าน ContentResolver
Kotlin
val externalContentUri = MediaStore.Files.getContentUri("external") val mediaColumns = arrayOf( FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE, ) val queryArgs = bundleOf( // Return only items from the last selection (selected photos access) QUERY_ARG_LATEST_SELECTION_ONLY to true, // Sort returned items chronologically based on when they were added to the device's storage QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC", QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?", QUERY_ARG_SQL_SELECTION_ARGS to arrayOf( FileColumns.MEDIA_TYPE_IMAGE.toString(), FileColumns.MEDIA_TYPE_VIDEO.toString() ) )
Java
Uri externalContentUri = MediaStore.Files.getContentUri("external"); String[] mediaColumns = { FileColumns._ID, FileColumns.DISPLAY_NAME, FileColumns.MIME_TYPE }; Bundle queryArgs = new Bundle(); queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC"); queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?"); queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] { String.valueOf(FileColumns.MEDIA_TYPE_IMAGE), String.valueOf(FileColumns.MEDIA_TYPE_VIDEO) });
Privacy Sandbox ใน Android
Android 15 包含最新的 Android 广告服务扩展,其中包含最新版本的 Privacy Sandbox on Android。我们一直致力于开发可更好地保护用户隐私,并为移动应用打造高效的个性化广告体验的技术,此次添加新功能就是其中的一项举措。我们的 Privacy Sandbox 页面详细介绍了 Privacy Sandbox on Android 开发者预览版和 Beta 版计划,可帮助您上手使用。
Health Connect
Android 15 集成了与 Health Connect by Android 相关的最新扩展程序。Health Connect by Android 是一个安全的集中式平台,可用于管理和共享应用收集的健康与健身数据。此次更新 增加了对健身、 营养、体表温度、训练计划等。
体表温度追踪功能让用户可以更精确地存储和分享体表温度 来自穿戴式设备或其他跟踪设备的体温数据。
训练计划是一种结构化的锻炼计划,可帮助用户实现健身目标。训练计划支持各种完成和表现目标:
如需详细了解 Android 中 Health Connect 的最新更新,请参阅 利用 Android 打造自适应体验 健康演讲。
การแชร์หน้าจอแอป
Android 15 支持应用屏幕共享,因此用户可以仅共享或录制应用窗口,而不是整个设备屏幕。此功能首次在 Android 14 QPR2 中启用,包含 MediaProjection 回调,可让您的应用自定义应用屏幕共享体验。请注意,对于以 Android 14(API 级别 34)或更高版本为目标平台的应用,每个 MediaProjection 捕获会话都需要征得用户同意。
ประสบการณ์ของผู้ใช้และ UI ของระบบ
Android 15 ช่วยให้นักพัฒนาแอปและผู้ใช้ควบคุมและปรับแต่ง การกำหนดค่าอุปกรณ์ให้เหมาะกับความต้องการของตนได้มากขึ้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้การปรับปรุงล่าสุดใน Android 15 เพื่อปรับปรุง ประสบการณ์ของผู้ใช้แอปได้ที่การบรรยายปรับปรุงประสบการณ์ของผู้ใช้แอป Android จาก Google I/O
ตัวอย่างวิดเจ็ตที่สมบูรณ์ยิ่งขึ้นด้วย Generated Previews API
ก่อน Android 15 วิธีเดียวในการแสดงตัวอย่างเครื่องมือเลือกวิดเจ็ตคือต้องระบุทรัพยากรรูปภาพหรือเลย์เอาต์แบบคงที่ ตัวอย่างเหล่านี้มักจะแตกต่างจากลักษณะของวิดเจ็ตจริงเมื่อวางไว้ในหน้าจอหลักอย่างมาก นอกจากนี้ ทรัพยากรแบบคงที่ไม่อาจสร้างได้ด้วย Jetpack Glance ดังนั้นข้อมูลโดยย่อ นักพัฒนาซอฟต์แวร์ต้องจับภาพหน้าจอวิดเจ็ตของตน หรือสร้างเค้าโครง XML เพื่อให้ ตัวอย่างวิดเจ็ต
Android 15 เพิ่มการรองรับตัวอย่างที่สร้างขึ้น ซึ่งหมายความว่าผู้ให้บริการวิดเจ็ตแอปสามารถสร้าง RemoteViews เพื่อใช้เป็นตัวอย่างเครื่องมือเลือกแทนทรัพยากรแบบคงที่
Push API
แอปสามารถแสดงตัวอย่างที่สร้างขึ้นผ่าน Push API แอปช่วยคุณได้
แสดงตัวอย่างได้ทุกเมื่อในวงจร และไม่ได้รับคำขอที่ชัดแจ้ง
จากโฮสต์เพื่อแสดงตัวอย่าง ระบบจะเก็บตัวอย่างเพลงไว้ใน AppWidgetService
และผู้จัดการประชุมจะขอตัวอย่างเพลงได้แบบออนดีมานด์ ตัวอย่างต่อไปนี้จะโหลดทรัพยากรเลย์เอาต์วิดเจ็ต XML และตั้งค่าเป็นตัวอย่าง
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
SociaLiteAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
ขั้นตอนที่คาดไว้มีดังนี้
- ผู้ให้บริการวิดเจ็ตเรียก
setWidgetPreviewได้ทุกเมื่อ ระบบจะเก็บตัวอย่างเพลงที่ระบุไว้ในAppWidgetServiceไว้พร้อมกับข้อมูลอื่นๆ ของผู้ให้บริการ setWidgetPreviewจะแจ้งโฮสต์เกี่ยวกับตัวอย่างที่อัปเดตแล้วผ่าน การติดต่อกลับของAppWidgetHost.onProvidersChangedในการตอบสนอง วิดเจ็ต โฮสต์จะโหลดข้อมูลผู้ให้บริการทั้งหมดซ้ำ- เมื่อแสดงตัวอย่างวิดเจ็ต โฮสต์จะตรวจสอบ
AppWidgetProviderInfo.generatedPreviewCategoriesและหากเลือก มีหมวดหมู่ ติดต่อAppWidgetManager.getWidgetPreviewไปยัง ให้แสดงตัวอย่างที่บันทึกไว้สำหรับผู้ให้บริการรายนี้
กรณีที่ควรโทรหา setWidgetPreview
เนื่องจากไม่มีคอลแบ็กให้แสดงตัวอย่าง แอปจึงเลือกส่งตัวอย่างได้ทุกเมื่อขณะที่ทำงานอยู่ ความถี่ในการอัปเดตตัวอย่างจะขึ้นอยู่กับกรณีการใช้งานวิดเจ็ต
รายการต่อไปนี้อธิบายกรณีการใช้งานตัวอย่างเพลงหลัก 2 หมวดหมู่
- ผู้ให้บริการที่แสดงข้อมูลจริงในตัวอย่างวิดเจ็ต เช่น หรือข้อมูลล่าสุด ผู้ให้บริการเหล่านี้สามารถตั้งค่าตัวอย่างเพลงได้เมื่อผู้ใช้ลงชื่อเข้าใช้หรือทำการกําหนดค่าเริ่มต้นในแอปแล้ว หลังจากนั้น ผู้ให้บริการจะตั้งค่างานเป็นระยะเพื่ออัปเดตตัวอย่างเพลงตามช่วงเวลาที่เลือกได้ ตัวอย่างของวิดเจ็ตประเภทนี้อาจเป็นรูปภาพ ปฏิทิน สภาพอากาศ หรือข่าว วิดเจ็ต
- ผู้ให้บริการที่แสดงข้อมูลแบบคงที่ในตัวอย่างหรือวิดเจ็ตการดำเนินการด่วนซึ่งไม่แสดงข้อมูลใดๆ ผู้ให้บริการเหล่านี้สามารถ ตั้งค่าการแสดงตัวอย่างได้ 1 ครั้งเมื่อ เปิดแอปครั้งแรก ตัวอย่างของวิดเจ็ตประเภทนี้ ได้แก่ ไดรฟ์ไวท์ วิดเจ็ตการดำเนินการ หรือวิดเจ็ตทางลัดของ Chrome
ผู้ให้บริการบางรายอาจแสดงตัวอย่างแบบคงที่ในเครื่องมือเลือกโหมดฮับ แต่แสดงจริง ในเครื่องมือเลือกหน้าจอหลัก ผู้ให้บริการเหล่านี้ควรปฏิบัติตามคำแนะนำ สำหรับกรณีการใช้งานทั้ง 2 อย่างนี้ในการตั้งค่าตัวอย่าง
การแสดงภาพซ้อนภาพ
Android 15 引入了画中画 (PiP) 方面的变更,确保实现 更流畅的过渡效果。对于在主界面上叠加界面元素的应用,这将非常有用,因为这些界面元素会进入 PiP。
开发者使用 onPictureInPictureModeChanged 回调来定义逻辑
用于切换叠加界面元素的可见性。此回调是
在画中画进入或退出动画播放完毕时触发。距离开始还有
Android 15 中,PictureInPictureUiState 类包含另一种状态。
在此界面状态下,以 Android 15(API 级别 35)为目标平台的应用将遵守
使用以下参数调用 Activity#onPictureInPictureUiStateChanged 回调:
isTransitioningToPip()。还有
在画中画模式下,有很多与应用无关的界面元素,
包含建议、
评分和标题当应用进入画中画模式时,请使用
onPictureInPictureUiStateChanged 回调以隐藏这些界面元素。当
应用从画中画窗口进入全屏模式,使用
onPictureInPictureModeChanged 回调以取消隐藏这些元素,如
请参阅以下示例:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
不相关界面元素的快速可见性切换(适用于画中画窗口)有助于 确保画中画播放动画更流畅、无闪烁。
กฎห้ามรบกวนที่ปรับปรุงใหม่
AutomaticZenRule อนุญาตให้แอปปรับแต่งความสนใจได้
การจัดการกฎ (ห้ามรบกวน) และเลือกว่าจะเปิดหรือปิดใช้งานเมื่อใด
ให้พวกเขา Android 15 ช่วยเพิ่มประสิทธิภาพให้กฎเหล่านี้อย่างมาก โดยมีเป้าหมายเพื่อปรับปรุง
ประสบการณ์ของผู้ใช้ การปรับปรุงเหล่านี้มีดังนี้
- กำลังเพิ่มประเภทลงใน
AutomaticZenRuleเพื่อให้ระบบใช้แบบพิเศษได้ กับกฎบางอย่าง - การเพิ่มไอคอนลงใน
AutomaticZenRuleช่วยให้โหมดต่างๆ เป็นที่รู้จักมากขึ้น - การเพิ่มสตริง
triggerDescriptionในAutomaticZenRuleที่อธิบาย เงื่อนไขที่กฎควรทำงานสำหรับผู้ใช้ - เพิ่มเมื่อ
ZenDeviceEffectsเป็นAutomaticZenRuleเพื่อให้กฎเรียกใช้สิ่งต่างๆ เช่น โทนสีเทา จอแสดงผล โหมดกลางคืน หรือการหรี่แสงวอลเปเปอร์
ตั้งค่า VibrationEffect สำหรับช่องทางการแจ้งเตือน
Android 15 รองรับการตั้งค่าการสั่นแบบริชมีเดียสำหรับการแจ้งเตือนขาเข้าตามแชแนลโดยใช้ NotificationChannel.setVibrationEffect เพื่อให้ผู้ใช้แยกแยะการแจ้งเตือนประเภทต่างๆ ได้โดยไม่ต้องมองที่อุปกรณ์
ชิปแถบสถานะการฉายภาพสื่อและการหยุดอัตโนมัติ
媒体投放可能会泄露用户的私密信息。一个醒目的新状态栏条状标签可让用户了解任何正在进行的屏幕投影。用户可以点按该条状标签停止投屏、共享或录制屏幕。此外,为了提供更直观的用户体验,当设备屏幕锁定后,所有正在进行的屏幕投影都会自动停止。
หน้าจอขนาดใหญ่และรูปแบบของอุปกรณ์
Android 15 ช่วยให้แอปของคุณรองรับรูปแบบ ต่างๆ ของ Android ได้อย่างเต็มที่ ซึ่งรวมถึงหน้าจอขนาดใหญ่ อุปกรณ์แบบฝาพับ และอุปกรณ์แบบพับได้
การทำงานหลายอย่างพร้อมกันบนหน้าจอขนาดใหญ่ที่ได้รับการปรับปรุง
Android 15 为用户提供了在大屏设备上更好地进行多任务处理的方式。对于 例如,用户可以保存自己喜爱的分屏应用组合, 访问并固定屏幕上的任务栏,以便在应用之间快速切换。这意味着 让应用具备自适应能力比以往任何时候都更加重要。
Google I/O 大会上有一些关于构建自适应 Android 的会议 应用和使用 Material 3 构建界面 自适应库 我们的文档中提供了更多帮助信息,帮助您针对大型语言 。
รองรับหน้าจอด้านนอก
แอปสามารถประกาศพร็อพเพอร์ตี้ที่ Android 15 ใช้เพื่ออนุญาตให้แสดง Application หรือ Activity บนหน้าจอฝาพับขนาดเล็กของอุปกรณ์แบบพลิกได้ หน้าจอเหล่านี้มีขนาดเล็กเกินกว่าที่จะถือว่าเป็นเป้าหมายที่เข้ากันได้สำหรับแอป Android ที่จะทำงานได้ แต่แอปของคุณสามารถเลือกที่จะรองรับหน้าจอเหล่านี้ได้ ซึ่งจะทำให้แอปพร้อมให้บริการในอุปกรณ์ต่างๆ มากขึ้น
การเชื่อมต่อ
Android 15 อัปเดตแพลตฟอร์มเพื่อให้แอปของคุณเข้าถึงความก้าวหน้าล่าสุด ในเทคโนโลยีการสื่อสารและไร้สาย
การรองรับดาวเทียม
Android 15 继续扩大对卫星连接的平台支持,并包含一些界面元素,以确保在整个卫星连接环境中提供一致的用户体验。
应用可以使用 ServiceState.isUsingNonTerrestrialNetwork() 执行以下操作:
检测设备是否连接到卫星,让他们更清楚地了解
可能会导致完全网络服务不可用的原因此外,Android 15 支持短信和彩信应用以及预加载的 RCS 应用,以便使用卫星连接发送和接收消息。
ประสบการณ์การใช้งาน NFC ที่ราบรื่นยิ่งขึ้น
Android 15 กำลังพัฒนาประสบการณ์การแตะเพื่อจ่ายให้ราบรื่นและเชื่อถือได้มากขึ้น ในขณะเดียวกันก็ยังคงรองรับระบบนิเวศแอป NFC ที่มีประสิทธิภาพของ Android ในอุปกรณ์ที่รองรับ แอปจะขอให้ NfcAdapter เข้าสู่โหมดสังเกตการณ์ ซึ่งอุปกรณ์จะฟังแต่ไม่ตอบสนองต่อเครื่องอ่าน NFC โดยส่งออบเจ็กต์บริการ NFC ของแอป PollingFrame ไปประมวลผล คุณสามารถใช้ออบเจ็กต์ PollingFrame เพื่อตรวจสอบสิทธิ์ก่อนการสื่อสารกับเครื่องอ่าน NFC ครั้งแรก ซึ่งจะช่วยให้ทำธุรกรรมแบบแตะครั้งเดียวได้ในกรณีหลายกรณี
นอกจากนี้ แอปยังลงทะเบียนตัวกรองในอุปกรณ์ที่รองรับเพื่อให้ได้รับการแจ้งเตือนเกี่ยวกับกิจกรรมของลูปการสำรวจ ซึ่งช่วยให้แอปพลิเคชันที่รองรับ NFC หลายรายการทำงานได้อย่างราบรื่น
บทบาทของ Wallet
Android 15 เปิดตัวบทบาท Wallet ที่ช่วยให้ผสานรวมกับแอป Wallet ที่ต้องการของผู้ใช้ได้ดียิ่งขึ้น บทบาทนี้จะแทนที่การตั้งค่าการชำระเงินแบบไม่ต้องสัมผัสเริ่มต้นของ NFC ผู้ใช้สามารถจัดการผู้ถือบทบาท Wallet ได้โดยไปที่การตั้งค่า > แอป > แอปเริ่มต้น
ระบบจะใช้บทบาท Wallet เมื่อกำหนดเส้นทางการแตะ NFC สำหรับ AID ที่ลงทะเบียนไว้ในหมวดหมู่การชำระเงิน การแตะจะไปยังผู้ถือบทบาท Wallet เสมอ เว้นแต่ว่าแอปอื่นที่ลงทะเบียนสำหรับ AID เดียวกันจะทำงานอยู่เบื้องหน้า
บทบาทนี้ยังใช้เพื่อกำหนดตําแหน่งการ์ดการเข้าถึงด่วนของ Wallet เมื่อเปิดใช้งาน เมื่อตั้งค่าบทบาทเป็น "ไม่มี" การ์ดการเข้าถึงด่วนจะใช้งานไม่ได้และการแตะ NFC หมวดหมู่การชำระเงินจะแสดงในแอปที่ทำงานอยู่เบื้องหน้าเท่านั้น
ความปลอดภัย
Android 15 ช่วยให้คุณปรับปรุงความปลอดภัยของแอป ปกป้องข้อมูลของแอป และ ให้ความโปร่งใสแก่ผู้ใช้มากขึ้น รวมถึงช่วยให้ผู้ใช้ควบคุมข้อมูลของตนได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เรากำลังทำเพื่อปรับปรุงการปกป้องผู้ใช้และ ปกป้องแอปของคุณจากภัยคุกคามใหม่ๆ ได้จากทอล์กเรื่องการปกป้อง ความปลอดภัยของผู้ใช้ใน Android จาก Google I/O
ผสานรวม Credential Manager กับการป้อนข้อความอัตโนมัติ
ตั้งแต่ Android 15 เป็นต้นไป นักพัฒนาแอปสามารถลิงก์มุมมองที่เฉพาะเจาะจง เช่น ช่องชื่อผู้ใช้หรือรหัสผ่านกับคำขอของเครื่องมือจัดการข้อมูลเข้าสู่ระบบได้ ซึ่งทำให้มอบประสบการณ์การใช้งานที่ปรับให้เหมาะกับผู้ใช้ได้ง่ายขึ้นในระหว่างกระบวนการลงชื่อเข้าใช้ เมื่อผู้ใช้โฟกัสที่มุมมองใดมุมมองหนึ่ง ระบบจะส่งคําขอที่เกี่ยวข้องไปยังเครื่องมือจัดการข้อมูลเข้าสู่ระบบ ระบบจะรวบรวมข้อมูลเข้าสู่ระบบที่ได้จากผู้ให้บริการต่างๆ และแสดงใน UI สำรองสำหรับการป้อนข้อความอัตโนมัติ เช่น คำแนะนำในบรรทัดหรือคำแนะนำแบบเมนูแบบเลื่อนลง ไลบรารี androidx.credentials ของ Jetpack เป็นปลายทางที่นักพัฒนาแอปควรใช้ และจะพร้อมใช้งานเพื่อปรับปรุงฟีเจอร์นี้ใน Android 15 ขึ้นไปในเร็วๆ นี้
ผสานรวมการลงชื่อสมัครใช้และการลงชื่อเข้าใช้ด้วยการแตะครั้งเดียวกับข้อความแจ้งไบโอเมตริก
เครื่องมือจัดการข้อมูลเข้าสู่ระบบผสานรวมพรอมต์ข้อมูลไบโอเมตริกเข้ากับการสร้างข้อมูลเข้าสู่ระบบ และลงชื่อเข้าใช้ ทำให้ผู้ให้บริการไม่ต้องจัดการ พรอมต์ข้อมูลไบโอเมตริก ด้วยเหตุนี้ ผู้ให้บริการข้อมูลเข้าสู่ระบบจึงต้องมุ่งเน้นที่ ผลลัพธ์ของการสร้างและรับโฟลว์ ซึ่งเสริมด้วยผลลัพธ์โฟลว์ข้อมูลไบโอเมตริก กระบวนการที่ง่ายขึ้นนี้จะช่วยให้การสร้างและการเรียกข้อมูลเข้าสู่ระบบมีประสิทธิภาพและสะดวกยิ่งขึ้น
การจัดการคีย์สำหรับการเข้ารหัสจากต้นทางถึงปลายทาง
我们将在 Android 15 中引入 E2eeContactKeysManager,它通过提供用于存储加密公钥的操作系统级 API,有助于在 Android 应用中实现端到端加密 (E2EE)。
E2eeContactKeysManager 旨在与平台通讯录应用集成,以便用户集中管理和验证通讯录联系人的公钥。
การตรวจสอบสิทธิ์ใน URI ของเนื้อหา
Android 15 引入了一组用于对内容 URI 执行权限检查的 API:
Context.checkContentUriPermissionFull:此选项会对内容 URI 执行完整权限检查。Activity清单属性requireContentUriPermissionFromCaller:此属性会在 activity 启动时对提供的内容 URI 强制执行指定权限。Activity调用方的ComponentCaller类:此类表示启动 activity 的应用。
การช่วยเหลือพิเศษ
Android 15 เพิ่มฟีเจอร์ที่ปรับปรุงการช่วยเหลือพิเศษสำหรับผู้ใช้
อักษรเบรลล์ที่ดีขึ้น
ใน Android 15 เราได้ทำให้ TalkBack รองรับจอแสดงผลอักษรเบรลล์ที่ใช้มาตรฐาน HID ผ่านทั้ง USB และบลูทูธที่ปลอดภัย
มาตรฐานนี้ซึ่งคล้ายกับมาตรฐานที่ใช้กับเมาส์และแป้นพิมพ์จะช่วยให้ Android รองรับจอแสดงผลอักษรเบรลล์ได้หลากหลายมากขึ้นในอนาคต
การทำให้เป็นสากล
Android 15 เพิ่มฟีเจอร์และความสามารถที่ช่วยเสริมประสบการณ์ของผู้ใช้ เมื่อใช้อุปกรณ์ในภาษาต่างๆ
แบบอักษรที่ปรับแต่งได้ของ CJK
从 Android 15 开始,面向中文、日文和韩文 (CJK) 语言的字体文件 NotoSansCJK 现在是可变字体。可变字体为中日韩语言的创意排版提供了更多可能性。设计师可以探索更多样式的排版,并制作出以前难以实现或根本无法实现的视觉效果出色的布局。
การจัดชิดตัวอักษร
ใน Android 15 เป็นต้นไป คุณสามารถปรับข้อความให้ชิดขอบโดยใช้ระยะห่างของตัวอักษรได้โดย
ด้วย JUSTIFICATION_MODE_INTER_CHARACTER การให้เหตุผลระหว่างคำเดิมคือ
เปิดตัวครั้งแรกใน Android 8.0 (API ระดับ 26) และระหว่างอักขระ
เหตุผลรองรับมีความสามารถที่คล้ายกันสำหรับภาษาที่ใช้
อักขระช่องว่างในการแบ่งกลุ่ม เช่น ภาษาจีน ภาษาญี่ปุ่น และอื่นๆ
JUSTIFICATION_MODE_NONE
JUSTIFICATION_MODE_NONE
JUSTIFICATION_MODE_INTER_WORD
JUSTIFICATION_MODE_INTER_WORD
JUSTIFICATION_MODE_INTER_CHARACTER
JUSTIFICATION_MODE_INTER_CHARACTERการกำหนดค่าการขึ้นบรรทัดใหม่โดยอัตโนมัติ
Android 从以下语言开始支持基于短语的日语和韩语换行:
Android 13(API 级别 33)。不过,虽然基于短语的行分隔符可以提高短文本行的可读性,但对于长文本行,效果并不理想。在 Android 15 中,应用只能使用 LINE_BREAK_WORD_STYLE_AUTO 选项,针对短文本行应用基于短语的行分隔符。此选项会为文本选择最佳字词样式选项。
对于短文本行,则使用基于短语的换行符,功能相同
为 LINE_BREAK_WORD_STYLE_PHRASE,如
以下图片:
LINE_BREAK_WORD_STYLE_AUTO
应用基于短语的换行符,以提高文本的可读性。
这与应用
LINE_BREAK_WORD_STYLE_PHRASE。对于较长的文本行,LINE_BREAK_WORD_STYLE_AUTO 会使用 no
换行字词样式,
LINE_BREAK_WORD_STYLE_NONE,如
以下图片:
LINE_BREAK_WORD_STYLE_AUTO
应用不换行的字词样式,以提高文本的可读性。
这与应用
LINE_BREAK_WORD_STYLE_NONE。แบบอักษรเฮนไทกานะภาษาญี่ปุ่นเพิ่มเติม
在 Android 15 中,旧版日语平假名(也称为 Hentaigana)字体文件 捆绑在一起半形人物的独特形状可以增加 风格或设计独特的风格 传播和理解古代日本文件的能力。
กรวย VideoLAN แสดงลิขสิทธิ์ (c) 1996-2010 VideoLAN ทุกคนสามารถใช้หรือแก้ไขโลโก้นี้หรือเวอร์ชันที่แก้ไขแล้วเพื่ออ้างอิงถึงโปรเจ็กต์ VideoLAN หรือผลิตภัณฑ์ใดๆ ที่พัฒนาโดยทีม VideoLAN แต่ไม่ได้บ่งบอกถึงการรับรองจากโปรเจ็กต์
Vulkan และโลโก้ Vulkan เป็นเครื่องหมายการค้าจดทะเบียนของ Khronos Group Inc.
OpenGL เป็นเครื่องหมายการค้าจดทะเบียนและโลโก้ OpenGL ES เป็นเครื่องหมายการค้าของ Hewlett Packard Enterprise ซึ่ง Khronos ใช้โดยได้รับอนุญาต