{"id":271150,"date":"2025-02-16T03:37:55","date_gmt":"2025-02-16T03:37:55","guid":{"rendered":"https:\/\/michigandigitalnews.com\/index.php\/2025\/02\/16\/the-second-beta-of-android-16\/"},"modified":"2025-06-25T17:09:21","modified_gmt":"2025-06-25T17:09:21","slug":"the-second-beta-of-android-16","status":"publish","type":"post","link":"https:\/\/michigandigitalnews.com\/index.php\/2025\/02\/16\/the-second-beta-of-android-16\/","title":{"rendered":"The Second Beta of Android 16"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div>\n<meta content=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjTbEtmcMRsVnZNjDLfHHmaHRbWrOxiuKlPvOEKOdTQv5zdrBXiwR2seAo7nH7WHr5OBn-40Cokd-O8A39uNI8YPwNPS0KyNKmR5KfMdKWylTB2urSRAtJKSybArxjCTCi5dJghCUPgA49ZVOn3_4TLqppzii0bc5PDKdbeHzGfG0DrNeAyjbt5VSoOVYI\/s1600\/image1.gif\" name=\"twitter:image\"\/><br \/>\n<img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjTbEtmcMRsVnZNjDLfHHmaHRbWrOxiuKlPvOEKOdTQv5zdrBXiwR2seAo7nH7WHr5OBn-40Cokd-O8A39uNI8YPwNPS0KyNKmR5KfMdKWylTB2urSRAtJKSybArxjCTCi5dJghCUPgA49ZVOn3_4TLqppzii0bc5PDKdbeHzGfG0DrNeAyjbt5VSoOVYI\/s1600\/image1.gif\" style=\"display: none;\"\/><\/p>\n<p><em> Posted by <author>Matthew McCullough<\/author> \u2013 VP of Product Management, Android Developer<\/em><\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjTbEtmcMRsVnZNjDLfHHmaHRbWrOxiuKlPvOEKOdTQv5zdrBXiwR2seAo7nH7WHr5OBn-40Cokd-O8A39uNI8YPwNPS0KyNKmR5KfMdKWylTB2urSRAtJKSybArxjCTCi5dJghCUPgA49ZVOn3_4TLqppzii0bc5PDKdbeHzGfG0DrNeAyjbt5VSoOVYI\/s1600\/image1.gif\" style=\"clear: right; float: right; margin-bottom: 1em; margin-left: 1em;\"><img decoding=\"async\" border=\"0\" data-original-height=\"1024\" data-original-width=\"1024\" height=\"200\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjTbEtmcMRsVnZNjDLfHHmaHRbWrOxiuKlPvOEKOdTQv5zdrBXiwR2seAo7nH7WHr5OBn-40Cokd-O8A39uNI8YPwNPS0KyNKmR5KfMdKWylTB2urSRAtJKSybArxjCTCi5dJghCUPgA49ZVOn3_4TLqppzii0bc5PDKdbeHzGfG0DrNeAyjbt5VSoOVYI\/s1600\/image1.gif\" width=\"200\"\/><\/a><\/div>\n<p>Today we&#8217;re releasing the second beta of Android 16, continuing our work to build a platform that enables creative expression. You can <a href=\"https:\/\/www.google.com\/android\/beta\" target=\"_blank\" rel=\"noopener\">enroll any supported Pixel device<\/a> to get this and future Android Beta updates over-the-air.<\/p>\n<p>This build adds new support for professional camera experiences, graphical effects, extends our performance framework, and continues the evolution of features related to privacy, security, and background tasks.  We\u2019re looking forward to <a href=\"https:\/\/developer.android.com\/about\/versions\/16\/feedback\" target=\"_blank\" rel=\"noopener\">hearing what you think<\/a>, and thank you in advance for your continued help in making Android a platform that works for everyone.<\/p>\n<h2><span style=\"font-size: x-large;\">Media and camera updates<\/span><\/h2>\n<p>Android 16 enhances support for professional camera users, allowing for hybrid auto exposure along with precise color temperature and tint adjustments. It&#8217;s easier than ever to capture motion photos with new Intent actions, and we&#8217;re continuing to improve UltraHDR images, with support for HEIC encoding and new parameters from the ISO 21496-1 draft standard.<\/p>\n<h3><span style=\"font-size: large;\">Hybrid auto-exposure<\/span><\/h3>\n<p>Android 16 adds new hybrid auto-exposure modes to <a href=\"https:\/\/developer.android.com\/media\/camera\/camera2\" target=\"_blank\" rel=\"noopener\">Camera2<\/a>, allowing you to manually control specific aspects of exposure while letting the auto-exposure (AE) algorithm handle the rest. You can control <a href=\"https:\/\/developer.android.com\/reference\/android\/hardware\/camera2\/CameraMetadata#CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY\" target=\"_blank\" rel=\"noopener\">ISO + AE<\/a>, and <a href=\"https:\/\/developer.android.com\/reference\/android\/hardware\/camera2\/CameraMetadata#CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY\" target=\"_blank\" rel=\"noopener\">exposure time + AE<\/a>, providing greater flexibility compared to the current approach where you either have full manual control or rely entirely on auto-exposure.<\/p>\n<p><!-- Kotlin --><\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;border:0;\">\n<pre style=\"margin: 0; line-height: 125%\"><span style=\"color: #008000; font-weight: bold\">fun<\/span> <span style=\"color: #0000FF\">setISOPriority<\/span>() {\n   <span style=\"color: #408080; font-style: italic\">\/\/ ...<\/span>\n\n    <span style=\"color: #008000; font-weight: bold\">val<\/span> availablePriorityModes = mStaticInfo.characteristics.<span style=\"color: #008000; font-weight: bold\">get<\/span>(\n        CameraCharacteristics.CONTROL_AE_AVAILABLE_PRIORITY_MODES\n    )\n    <span style=\"color: #408080; font-style: italic\">\/\/ ...<\/span>\n    \n    <span style=\"color: #408080; font-style: italic\">\/\/ Turn on AE mode to set priority mode<\/span>\n    reqBuilder[CaptureRequest.CONTROL_AE_MODE] = CameraMetadata.CONTROL_AE_MODE_ON\n    reqBuilder[CaptureRequest.CONTROL_AE_PRIORITY_MODE] = CameraMetadata.CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY\n    reqBuilder[CaptureRequest.SENSOR_SENSITIVITY] = TEST_SENSITIVITY_VALUE\n    <span style=\"color: #008000; font-weight: bold\">val<\/span> request: CaptureRequest = reqBuilder.build()\n\n    <span style=\"color: #408080; font-style: italic\">\/\/ ...<\/span>\n\n}\n<\/pre>\n<\/div>\n<h3><span style=\"font-size: large;\">Precise color temperature and tint adjustments<\/span><\/h3>\n<p>Android 16 adds camera support for fine color temperature and tint adjustments to better support professional video recording applications. White balance settings are currently controlled through <a href=\"https:\/\/developer.android.com\/reference\/android\/hardware\/camera2\/CaptureRequest#CONTROL_AWB_MODE\" target=\"_blank\" rel=\"noopener\"><span style=\"font-family: courier;\">CONTROL_AWB_MODE<\/span><\/a>, which contains options limited to a preset list, such as <a href=\"https:\/\/developer.android.com\/reference\/android\/hardware\/camera2\/CameraMetadata#CONTROL_AWB_MODE_INCANDESCENT\" target=\"_blank\" rel=\"noopener\">Incandescent<\/a>, <a href=\"https:\/\/developer.android.com\/reference\/android\/hardware\/camera2\/CameraMetadata#CONTROL_AWB_MODE_CLOUDY_DAYLIGHT\" target=\"_blank\" rel=\"noopener\">Cloudy<\/a>, and <a href=\"https:\/\/developer.android.com\/reference\/android\/hardware\/camera2\/CameraMetadata#CONTROL_AWB_MODE_TWILIGHT\" target=\"_blank\" rel=\"noopener\">Twilight<\/a>. The <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/hardware\/camera2\/CameraMetadata#COLOR_CORRECTION_MODE_CCT\" target=\"_blank\" rel=\"noopener\">COLOR_CORRECTION_MODE_CCT<\/a><\/span> enables the use of <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/hardware\/camera2\/CaptureRequest#COLOR_CORRECTION_COLOR_TEMPERATURE\" target=\"_blank\" rel=\"noopener\">COLOR_CORRECTION_COLOR_TEMPERATURE<\/a><\/span> and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/hardware\/camera2\/CaptureRequest#COLOR_CORRECTION_COLOR_TINT\" target=\"_blank\" rel=\"noopener\">COLOR_CORRECTION_COLOR_TINT<\/a><\/span> for precise adjustments of white balance based on the correlated color temperature.<\/p>\n<p><!-- Kotlin --><\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;border:0;\">\n<pre style=\"margin: 0; line-height: 125%\"><span style=\"color: #008000; font-weight: bold\">fun<\/span> <span style=\"color: #0000FF\">setCCT<\/span>() {\n    <span style=\"color: #408080; font-style: italic\">\/\/ ... (Your existing code before this point) ...<\/span>\n\n    <span style=\"color: #008000; font-weight: bold\">val<\/span> colorTemperatureRange: Range<int> =\n        mStaticInfo.characteristics[CameraCharacteristics.COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE]\n\n    <span style=\"color: #408080; font-style: italic\">\/\/ Set to manual mode to enable CCT mode<\/span>\n    reqBuilder[CaptureRequest.CONTROL_AWB_MODE] = CameraMetadata.CONTROL_AWB_MODE_OFF\n    reqBuilder[CaptureRequest.COLOR_CORRECTION_MODE] = CameraMetadata.COLOR_CORRECTION_MODE_CCT\n    reqBuilder[CaptureRequest.COLOR_CORRECTION_COLOR_TEMPERATURE] = <span style=\"color: #666666\">5000<\/span>\n    reqBuilder[CaptureRequest.COLOR_CORRECTION_COLOR_TINT] = <span style=\"color: #666666\">30<\/span>\n\n    <span style=\"color: #008000; font-weight: bold\">val<\/span> request: CaptureRequest = reqBuilder.build()\n\n    <span style=\"color: #408080; font-style: italic\">\/\/ ... (Your existing code after this point) ...<\/span>\n}\n<\/int><\/pre>\n<\/div>\n<p><image><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"Five photos of the back of a Google Pixel phone demonstrate different color temperatures and tints. The original photo is in the top left, followed by Tint -50, Tint +50, Temp 3000, and Temp 7000.\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhvxe-0r33vwoQlKCIdtt4ZdLF3GzBpS_xD7ADp10see5IQgBu7LCiZ_r8DCGZw5pAMqsA1GncK-vdzSSSVhjXRcl5cdhJcvcCpQBrK4rZJgJ3PYo7cnxc-ikxzj01w0t4NTBbtXfQ4mgsoQp6r0jv6q1S3ghwQ-Adfpszt_VdCZTTHJcSFAaHHHF_R9kQ\/s1600\/color-and-tine-adjustments-android-16.png\" width=\"100%\"\/><\/div>\n<p><\/image><\/p>\n<h3><span style=\"font-size: large;\">Motion photo capture intent actions<\/span><\/h3>\n<p>Android 16 adds standard Intent actions \u2014 <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/provider\/MediaStore#ACTION_MOTION_PHOTO_CAPTURE\" target=\"_blank\" rel=\"noopener\">ACTION_MOTION_PHOTO_CAPTURE<\/a><\/span>, and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/provider\/MediaStore#ACTION_MOTION_PHOTO_CAPTURE_SECURE\" target=\"_blank\" rel=\"noopener\">ACTION_MOTION_PHOTO_CAPTURE_SECURE<\/a><\/span> \u2014 which request that the camera application capture a motion photo and return it.<\/p>\n<p><image><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"Moving image of a diverse group of friends playing a game of horseshoe\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjsiV0eebKBV_Vqk4qQ3P_wQ2nhFRt-2UPLVp_wSEjddojtzHiY43JLTFgSunB-JVo4B_VUefBN4vCphOQw_cfapnUY_2bHdrASsSCSZ401IKGF3QUpMSjH85gVryoD4HK-KzKIgPV8Sb6P0rP-_Ei-f3ADOlivVfmetZq36HhC3nuyZgB3SacpdHn09Tk\/s1600\/image11.gif\" width=\"640\"\/><\/div>\n<p><\/image><\/p>\n<p>You must either pass an extra <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/provider\/MediaStore#EXTRA_OUTPUT\" target=\"_blank\" rel=\"noopener\">EXTRA_OUTPUT<\/a><\/span> to control where the image will be written, or a <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/net\/Uri\" target=\"_blank\" rel=\"noopener\">Uri<\/a><\/span> through <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/android\/content\/Intent\" target=\"_blank\" rel=\"noopener\">Intent<\/a><\/span> <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/content\/Intent#setClipData%28android.content.ClipData%29\" target=\"_blank\" rel=\"noopener\">setClipData<\/a><\/span>. If you don&#8217;t set a <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/content\/ClipData\" target=\"_blank\" rel=\"noopener\">ClipData<\/a><\/span>, it will be copied there for you when calling <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/content\/Context#startActivity%28android.content.Intent%29\" target=\"_blank\" rel=\"noopener\">Context.startActivity<\/a><\/span>.<\/p>\n<h3><span style=\"font-size: large;\">UltraHDR image enhancements<\/span><\/h3>\n<p><image><\/p>\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjosuJiP4hGG2gPyE-YFbgky3699PSLkcEoq3Jq1IvAEDsDp79hix1zkfQXeaU7bNvOoCDvX0mDl5VIbPxIfrxZzAVpKh08gYOxaBnzpNLDlO56meKHVwuNRLl6WhPs1tiafCt-YJuYgh6e0ErGn8sQTUS-J8aspttHZFr3mi1O56CgTqlycAU5tF5ango\/s1086\/image9.png\" style=\"clear: right; display: block; float: right; padding: 1em 0px; text-align: center;\"><img decoding=\"async\" alt=\"A split-screen image compares Standard Dynamic Range (SDR) and High Dynamic Range (HDR) image quality side-by-side using a singular image of a detailed landscape. The HDR side is more vivid and vibrant.\" border=\"0\" data-original-height=\"924\" data-original-width=\"1086\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjosuJiP4hGG2gPyE-YFbgky3699PSLkcEoq3Jq1IvAEDsDp79hix1zkfQXeaU7bNvOoCDvX0mDl5VIbPxIfrxZzAVpKh08gYOxaBnzpNLDlO56meKHVwuNRLl6WhPs1tiafCt-YJuYgh6e0ErGn8sQTUS-J8aspttHZFr3mi1O56CgTqlycAU5tF5ango\/s320\/image9.png\" width=\"320\"\/><\/a><\/div>\n<p><\/image><\/p>\n<p>Android 16 continues our work to deliver dazzling image quality with <a href=\"https:\/\/developer.android.com\/media\/platform\/hdr-image-format\" target=\"_blank\" rel=\"noopener\">UltraHDR<\/a> images. It adds support for UltraHDR images in the HEIC file format. These images will get <span style=\"color: #0d904f; font-family: courier;\">ImageFormat<\/span> type <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/ImageFormat#HEIC_ULTRAHDR\" target=\"_blank\" rel=\"noopener\">HEIC_ULTRAHDR<\/a><\/span> and will contain an embedded gainmap similar to the existing UltraHDR JPEG format. We&#8217;re working on AVIF support for UltraHDR as well, so stay tuned.<\/p>\n<p>In addition, Android 16 implements additional parameters in UltraHDR from the <a href=\"https:\/\/www.iso.org\/standard\/86775.html\" target=\"_blank\" rel=\"noopener\">ISO 21496-1 draft standard<\/a>, including the ability to get and set the colorspace that gainmap math should be applied in, as well as support for HDR encoded base images with SDR gainmaps.<\/p>\n<h2><span style=\"font-size: x-large;\">Custom graphical effects with AGSL<\/span><\/h2>\n<p>Android 16 adds <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/RuntimeColorFilter\" target=\"_blank\" rel=\"noopener\">RuntimeColorFilter<\/a><\/span> and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/RuntimeXfermode\" target=\"_blank\" rel=\"noopener\">RuntimeXfermode<\/a><\/span>, allowing you to author complex effects like Threshold, Sepia, and Hue Saturation and apply them to draw calls. Since Android 13, you&#8217;ve been able to use <a href=\"https:\/\/developer.android.com\/develop\/ui\/views\/graphics\/agsl\" target=\"_blank\" rel=\"noopener\">AGSL<\/a> to create custom <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/RuntimeShader\" target=\"_blank\" rel=\"noopener\">RuntimeShaders<\/a><\/span> that extend <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/Shader\" target=\"_blank\" rel=\"noopener\">Shaders<\/a><\/span>. The new API mirrors this, adding an AGSL-powered <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/RuntimeColorFilter\" target=\"_blank\" rel=\"noopener\">RuntimeColorFilter<\/a><\/span> that extends <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/ColorFilter\" target=\"_blank\" rel=\"noopener\">ColorFilters<\/a><\/span>, and a <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/graphics\/Xfermode\" target=\"_blank\" rel=\"noopener\">Xfermode<\/a><\/span> effect that allows you to implement AGSL-based custom compositing and blending between source and destination pixels.<\/p>\n<p><!-- Kotlin --><\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;border:0;\">\n<pre style=\"margin: 0; line-height: 125%\"><span style=\"color: #008000; font-weight: bold\">private<\/span> <span style=\"color: #008000; font-weight: bold\">val<\/span> thresholdEffectString = <span style=\"color: #BA2121\">\"\"\"<\/span>\n    uniform half threshold;\n    half4 <span style=\"color: #0000FF\">main<\/span>(half4 c) {\n        half luminosity = dot(c.rgb, half3(<span style=\"color: #666666\">0.2126<\/span>, <span style=\"color: #666666\">0.7152<\/span>, <span style=\"color: #666666\">0.0722<\/span>));\n        half bw = step(threshold, luminosity);\n        <span style=\"color: #008000; font-weight: bold\">return<\/span> bw.xxx1 * c.a;\n    }<span style=\"color: #BA2121\">\"\"\"<\/span>\n\n<span style=\"color: #008000; font-weight: bold\">fun<\/span> <span style=\"color: #0000FF\">setCustomColorFilter<\/span>(paint: Paint) {\n   <span style=\"color: #008000; font-weight: bold\">val<\/span> filter = RuntimeColorFilter(thresholdEffectString)\n   filter.setFloatUniform(<span style=\"color: #666666\">0.5<\/span>)\n   paint.colorFilter = filter\n}\n<\/pre>\n<\/div>\n<h2><span style=\"font-size: x-large;\">Behavior changes<\/span><\/h2>\n<p>With every Android release, we seek to make the platform more efficient, privacy conscious, internationalization friendly, and robust, balancing the needs of apps against hardware support, system performance, user privacy, and battery life. This can result in behavior changes that impact compatibility.<\/p>\n<h3><span style=\"font-size: large;\">Edge to edge opt-out going away<\/span><\/h3>\n<p><a href=\"https:\/\/developer.android.com\/about\/versions\/15\/behavior-changes-15#edge-to-edge\" target=\"_blank\" rel=\"noopener\">Android 15 enforced edge-to-edge<\/a> for apps targeting Android 15 (SDK 35), but your app could opt-out by setting <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/R.attr#windowOptOutEdgeToEdgeEnforcement\" target=\"_blank\" rel=\"noopener\">R.attr#windowOptOutEdgeToEdgeEnforcement<\/a><\/span> to <span style=\"color: #0d904f; font-family: courier;\">true<\/span>. Once your app targets Android 16 (Baklava), <span style=\"color: #0d904f; font-family: courier;\">R.attr#windowOptOutEdgeToEdgeEnforcement<\/span> is deprecated and disabled and your app cannot opt-out of going edge-to-edge. To be compatible with Android 16 Beta 2, ensure your app supports edge-to-edge and remove any use of <span style=\"color: #0d904f; font-family: courier;\">R.attr#windowOptOutEdgeToEdgeEnforcement<\/span>. To support edge-to-edge, see the <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/insets\" target=\"_blank\" rel=\"noopener\">Compose<\/a> and <a href=\"https:\/\/developer.android.com\/develop\/ui\/views\/layout\/edge-to-edge\" target=\"_blank\" rel=\"noopener\">Views<\/a> guidance. Please let us know about concerns in our tracker on the <a href=\"https:\/\/developer.android.com\/about\/versions\/16\/feedback\" target=\"_blank\" rel=\"noopener\">feedback page<\/a>.<\/p>\n<h3><span style=\"font-size: large;\">Health and fitness permissions<\/span><\/h3>\n<p>For apps targeting Android 16 or higher, <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/Manifest.permission#BODY_SENSORS\" target=\"_blank\" rel=\"noopener\">BODY_SENSORS<\/a><\/span> permissions are transitioning to the granular permissions under <span style=\"color: #0d904f; font-family: courier;\">android.permissions.health<\/span> also used by <a href=\"https:\/\/developer.android.com\/health-and-fitness\/guides\/health-connect\" target=\"_blank\" rel=\"noopener\">Health Connect<\/a>. Any API previously requiring <span style=\"color: #0d904f; font-family: courier;\">BODY_SENSORS<\/span> or <span style=\"color: #0d904f; font-family: courier;\">BODY_SENSORS_BACKGROUND<\/span> will now require the corresponding <span style=\"color: #0d904f; font-family: courier;\">android.permissions.health permission<\/span>. This affects the following data types, APIs, and foreground service types:<\/p>\n<p>If your app uses these APIs, it should now request the respective granular permissions:<\/p>\n<p>These permissions are the same as those that guard access to reading data from Health Connect, the Android datastore for health, fitness, and wellness data.<\/p>\n<h3><span style=\"font-size: large;\">Abandoned empty jobs stop reason<\/span><\/h3>\n<p>An abandoned job occurs when the <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/kotlin\/android\/app\/job\/JobParameters\" target=\"_blank\" rel=\"noopener\">JobParameters<\/a><\/span> object associated with the job has been garbage collected, but <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/app\/job\/JobService#jobFinished%28android.app.job.JobParameters,%20boolean%29\" target=\"_blank\" rel=\"noopener\">jobFinished<\/a><\/span> has not been called to signal job completion. This indicates that the job may be running and being rescheduled without the application&#8217;s awareness.<\/p>\n<p>Applications in Android 16 that rely on <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/app\/job\/JobScheduler\" target=\"_blank\" rel=\"noopener\">JobScheduler<\/a><\/span> without maintaining a strong reference to the <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/app\/job\/JobParameters\" target=\"_blank\" rel=\"noopener\">JobParameters<\/a><\/span> object will now be granted the new job stop reason <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/app\/job\/JobParameters#STOP_REASON_TIMEOUT_ABANDONED\" target=\"_blank\" rel=\"noopener\">STOP_REASON_TIMEOUT_ABANDONED<\/a><\/span> on timeout, instead of <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/app\/job\/JobParameters#STOP_REASON_TIMEOUT\" target=\"_blank\" rel=\"noopener\">STOP_REASON_TIMEOUT<\/a><\/span>.<\/p>\n<p>If there are frequent occurrences of the new abandoned stop reason, the system will take mitigation steps to reduce job frequency. Please use the new stop reason to detect and reduce abandoned jobs.<\/p>\n<blockquote><p><b>Note:<\/b> If you&#8217;re using <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/androidx\/work\/WorkManager\" target=\"_blank\" rel=\"noopener\">WorkManager<\/a><\/span>, you&#8217;re not expected to be impacted by this change \u2014 one nice side effect of using Android Jetpack to schedule your work.<\/p><\/blockquote>\n<h3><span style=\"font-size: large;\">Intent redirect changes<\/span><\/h3>\n<p>Android 16 introduces default security hardening against Intent redirection attacks regardless of your app&#8217;s targetSDK version. The <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/content\/Intent#removeLaunchSecurityProtection%28%29\" target=\"_blank\" rel=\"noopener\">removeLaunchSecurityProtection<\/a><\/span> API allows you to opt-out of this protection if your testing reveals issues.<\/p>\n<blockquote><p><b>Note:<\/b> Opting out of security protections should be done with caution and only when absolutely necessary, as it can increase the risk of security vulnerabilities.<\/p><\/blockquote>\n<p><!-- Kotlin --><\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;border:0;\">\n<pre style=\"margin: 0; line-height: 125%\"><span style=\"color: #008000; font-weight: bold\">val<\/span> iSublevel = intent.getParcelableExtra(<span style=\"color: #BA2121\">\"sub_intent\"<\/span>, Intent::class.java)\niSublevel?.let {\n    it.removeLaunchSecurityProtection()\n    startActivity(it)\n}\n<\/pre>\n<\/div>\n<h3><span style=\"font-size: large;\">Elegant font APIs deprecated and disabled<\/span><\/h3>\n<p>Apps targeting Android 15 (API level 35) have the <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/R.attr#elegantTextHeight\" target=\"_blank\" rel=\"noopener\">elegantTextHeight<\/a><\/span> <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/widget\/TextView\" target=\"_blank\" rel=\"noopener\">TextView<\/a><\/span> attribute set to true by default, replacing the compact font with one that is much more readable. You could override this by setting the <span style=\"color: #0d904f; font-family: courier;\">elegantTextHeight<\/span> attribute to false.<\/p>\n<p>Android 16 deprecates the <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/R.attr#elegantTextHeight\" target=\"_blank\" rel=\"noopener\">elegantTextHeight<\/a><\/span> attribute, and the attribute will be ignored once your app targets Android 16. The \u201cUI fonts\u201d controlled by these APIs are being discontinued, so you should adapt any layouts to ensure consistent and future proof text rendering in Arabic, Lao, Myanmar, Tamil, Gujarati, Kannada, Malayalam, Odia, Telugu or Thai.<\/p>\n<p><image><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"Example of default eleganttextHeight behavior for apps targeting Android 14 (API level 34) and lower\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhmRbXi-s00iTanHCzKV8fnIPLzG2MPFbfFVQO3gLTi0_crDexiYpJxu03v9k_s6UrGvlV0IXw-5Gl-23ZvKgLBywBmAh2qVt1w5Wkwiq99hS20pTjnXtmmI9pL8G4ZkhTATSY4HI_tyCFBNs0K1wocVhksCzCujUa0oJVgwQ_YRhytQofiChi_6y741Nc\/s1600\/image10.png\" width=\"640\"\/><\/div>\n<p><imgcaption><center><em>default <span style=\"font-family: courier;\">elegantTextHeight<\/span> behavior for apps targeting Android 14 (API level 34) and lower<\/em><\/center><\/imgcaption><\/image><\/p>\n<p><image><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"Example of default elegantTextHeight behavior for apps targeting Android 15 (API level 35) and higher\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgTcnbT4QQektlbZokIhZe7C-inn580cAIVIhHMxZLsVUgCkYbss7RM3xLur0d3b5FKi5VzJuNIz9JVT1wfjKFE-zfLO1x1DOp96lL-GYhlkIX_Vb7WtVh84oIBf8RHBZTUYmWK5IQmHltrdD_rSMURurGq1xdciWYk6DCu2W1TNo-2AR132SQVQtKOZeY\/s1600\/image5.png\" width=\"640\"\/><\/div>\n<p><imgcaption><center><em>default <span style=\"font-family: courier;\">elegantTextHeight<\/span> behavior for apps targeting Android 15 (API level 35) and higher<\/em><\/center><\/imgcaption><\/image><\/p>\n<h3><span style=\"font-size: large;\">16 KB page size compatibility mode<\/span><\/h3>\n<p>Android 15 introduced support for 16KB memory pages to <a href=\"https:\/\/developer.android.com\/guide\/practices\/page-sizes\" target=\"_blank\" rel=\"noopener\">optimize performance<\/a> of the platform. Android 16 adds a <a href=\"https:\/\/source.android.com\/docs\/core\/architecture\/16kb-page-size\/16kb-backcompat-option\" target=\"_blank\" rel=\"noopener\">compatibility mode<\/a>, allowing some apps built for 4K memory pages to run on a device configured for 16KB memory pages.<\/p>\n<p>If Android detects that your app has 4KB aligned memory pages, it will automatically use compatibility mode and display a notification dialog to the user. Setting the <span style=\"color: #0d904f; font-family: courier;\">android:pageSizeCompat<\/span> property in the <span style=\"color: #0d904f; font-family: courier;\">AndroidManifest.xml<\/span> to enable the backwards compatibility mode will prevent the display of the dialog when your app launches. For best performance, reliability, and stability, your app should still be 16KB aligned. Read our recent blog post about <a href=\"https:\/\/android-developers.googleblog.com\/2024\/12\/get-your-apps-ready-for-16-kb-page-size-devices.html\" target=\"_blank\" rel=\"noopener\">updating your apps to support 16KB memory pages<\/a> for more details.<\/p>\n<p><image><\/p>\n<div style=\"text-align: center;\"><img fetchpriority=\"high\" decoding=\"async\" alt=\"Screenshot of PageSizeCompatTestApp in Android 16\" border=\"0\" height=\"640\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBheI0sklweAogiWzDrKRdrrj9kjvHuLrk7P7PLqo3Pjpcpfx8-FynBFOQqSV4mu5VfaVbtPsul9_8Gf_NEZaUfsgeN9FqXmY66oAiOCUuMxQFUBWYuZcz53mNwJopXRknH1wqkoMuc78zrYn2ito6njiROl4pnaRiH2C95uhkSmukaAc8aEjCR1gzoU\/w360-h640\/16-kb-compat-mode-dialog.png\" width=\"360\"\/><\/div>\n<p><\/image><\/p>\n<h3><span style=\"font-size: large;\">Measurement system customization<\/span><\/h3>\n<p>Users can now customize their measurement system in regional preferences within Settings. The user preference is included as part of the locale code, so you can register a <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/content\/BroadcastReceiver\" target=\"_blank\" rel=\"noopener\">BroadcastReceiver<\/a><\/span> on <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/content\/Intent#ACTION_LOCALE_CHANGED\" target=\"_blank\" rel=\"noopener\">ACTION_LOCALE_CHANGED<\/a><\/span> to handle locale configuration changes when regional preferences change.<\/p>\n<p>Using <a href=\"https:\/\/developer.android.com\/guide\/topics\/resources\/multilingual-support#formatters\" target=\"_blank\" rel=\"noopener\">formatters<\/a> can help match the local experience. For example, &#8220;0.5 in&#8221; in English (United States), is &#8220;12,7 mm&#8221; for a user who has set their phone to English (Denmark) or who uses their phone in English (United States) with the metric system as the measurement system preference.<\/p>\n<p>To find these settings in Android 16 Beta 2, open the Settings app and navigate to System &gt; Languages &amp; region.<\/p>\n<h2><span style=\"font-size: x-large;\">Content handling for live wallpapers<\/span><\/h2>\n<p>In Android 16, the live wallpaper framework is gaining a new content API to address the challenges of dynamic, user-driven wallpapers. Currently, live wallpapers incorporating user-provided content require complex, service-specific implementations. Android 16 introduces <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/app\/wallpaper\/WallpaperDescription\" target=\"_blank\" rel=\"noopener\">WallpaperDescription<\/a><\/span> and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/app\/wallpaper\/WallpaperInstance\" target=\"_blank\" rel=\"noopener\">WallpaperInstance<\/a><\/span>. <span style=\"color: #0d904f; font-family: courier;\">WallpaperDescription<\/span> allows you to identify distinct instances of a live wallpaper from the same service. For example, a wallpaper that has instances on both the home screen and on the lock screen may have unique content in both places. The wallpaper picker and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/app\/WallpaperManager\" target=\"_blank\" rel=\"noopener\">WallpaperManager<\/a><\/span> use this metadata to better present wallpapers to users, streamlining the process for you to create diverse and personalized live wallpaper experiences.<\/p>\n<h2><span style=\"font-size: x-large;\">Headroom APIs in ADPF<\/span><\/h2>\n<p>The <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/sdk\/api_diff\/b-beta2-incr\/changes\/android.os.health.SystemHealthManager\" target=\"_blank\" rel=\"noopener\">SystemHealthManager<\/a><\/span> introduces the <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/os\/health\/SystemHealthManager#getCpuHeadroom%28android.os.CpuHeadroomParams%29\" target=\"_blank\" rel=\"noopener\">getCpuHeadroom<\/a><\/span> and <span style=\"font-family: courier;\">getGpuHeadroom<\/span> APIs, designed to provide games and resource-intensive apps with estimates of available CPU and GPU resources. These methods offer a way for you to gauge how your app or game can best improve system health, particularly when used in conjunction with other <a href=\"https:\/\/developer.android.com\/games\/optimize\/adpf\" target=\"_blank\" rel=\"noopener\">Android Dynamic Performance Framework<\/a> (ADPF) APIs that <a href=\"https:\/\/developer.android.com\/games\/optimize\/adpf\/thermal\" target=\"_blank\" rel=\"noopener\">detect thermal throttling<\/a>. By using <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/os\/CpuHeadroomParams\" target=\"_blank\" rel=\"noopener\">CpuHeadroomParams<\/a><\/span> and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/os\/GpuHeadroomParams\" target=\"_blank\" rel=\"noopener\">GpuHeadroomParams<\/a><\/span> on supported devices, you will be able to customize the time window used to compute the headroom and select between average or minimum resource availability. This can help you reduce your CPU or GPU resource usage accordingly, leading to better user experiences and improved battery life.<\/p>\n<h2><span style=\"font-size: x-large;\">Key sharing API<\/span><\/h2>\n<p>Android 16 adds APIs that support sharing access to <a href=\"https:\/\/developer.android.com\/privacy-and-security\/keystore\" target=\"_blank\" rel=\"noopener\">Android Keystore<\/a> keys with other apps. The new <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/security\/keystore\/KeyStoreManager\" target=\"_blank\" rel=\"noopener\">KeyStoreManager<\/a><\/span> class supports <a href=\"https:\/\/developer.android.com\/reference\/android\/security\/keystore\/KeyStoreManager#grantKeyAccess%28java.lang.String,%20int%29\" target=\"_blank\" rel=\"noopener\">granting<\/a> and <a href=\"https:\/\/developer.android.com\/reference\/android\/security\/keystore\/KeyStoreManager#revokeKeyAccess%28java.lang.String,%20int%29\" target=\"_blank\" rel=\"noopener\">revoking<\/a> access to keys by app <a href=\"https:\/\/developer.android.com\/reference\/android\/os\/Process#myUid%28%29\" target=\"_blank\" rel=\"noopener\">uid<\/a>, and includes an API for apps to access shared keys.<\/p>\n<h2><span style=\"font-size: x-large;\">Standardized picture and audio quality framework for TVs<\/span><\/h2>\n<p>The new <a href=\"https:\/\/developer.android.com\/reference\/android\/media\/quality\/package-summary\" target=\"_blank\" rel=\"noopener\">MediaQuality package<\/a> in Android 16 exposes a set of standardized APIs for access to audio and picture profiles and hardware-related settings. This allows streaming apps to query profiles and apply them to media dynamically:<\/p>\n<ul>\n<ul>\n<li>Movies mastered with a wider dynamic range require greater color accuracy to see subtle details in shadows and adjust to ambient light, so a profile that prefers color accuracy over brightness may be appropriate.<\/li>\n<li>Live sporting events are often mastered with a narrow dynamic range, but are often watched in daylight, so a profile that gives preference to brightness over color accuracy can give better results.<\/li>\n<li>Fully interactive content wants minimal processing to reduce latency, and wants higher frame rates, which is why many TV&#8217;s ship with a game profile.<\/li>\n<\/ul>\n<\/ul>\n<p>The API allows apps to switch between profiles and users to enjoy the benefits of tuning supported TVs to best suit their content.<\/p>\n<h2><span style=\"font-size: x-large;\">Accessibility<\/span><\/h2>\n<p>Android 16 adds additional APIs to enhance UI semantics that help improve consistency for users that rely on accessibility services, such as <a href=\"https:\/\/developer.android.com\/guide\/topics\/ui\/accessibility\/testing#talkback\" target=\"_blank\" rel=\"noopener\">TalkBack<\/a>.<\/p>\n<h3><span style=\"font-size: large;\">Duration added to TtsSpan<\/span><\/h3>\n<p>Android 16 extends <span style=\"color: #0d904f; font-family: courier;\">TtsSpan<\/span> with a <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/text\/style\/TtsSpan#TYPE_DURATION\" target=\"_blank\" rel=\"noopener\">TYPE_DURATION<\/a><\/span>, consisting of <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/text\/style\/TtsSpan#ARG_HOURS\" target=\"_blank\" rel=\"noopener\">ARG_HOURS<\/a><\/span>, <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/text\/style\/TtsSpan#ARG_MINUTES\" target=\"_blank\" rel=\"noopener\">ARG_MINUTES<\/a><\/span>, and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/text\/style\/TtsSpan#ARG_SECONDS\" target=\"_blank\" rel=\"noopener\">ARG_SECONDS<\/a><\/span>. This allows you to directly annotate time duration, ensuring accurate and consistent text-to-speech output with services like <a href=\"https:\/\/developer.android.com\/guide\/topics\/ui\/accessibility\/testing#talkback\" target=\"_blank\" rel=\"noopener\">TalkBack<\/a>.<\/p>\n<h3><span style=\"font-size: large;\">Support elements with multiple labels<\/span><\/h3>\n<p>Android currently allows UI elements to derive their accessibility label from another, and now offers the ability for multiple labels to be associated, a common scenario in web content. By introducing a list-based API within <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo\" target=\"_blank\" rel=\"noopener\">AccessibilityNodeInfo<\/a><\/span>, Android can directly support these multi-label relationships. As part of this change, we&#8217;ve deprecated <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#setLabeledBy%28android.view.View%29\" target=\"_blank\" rel=\"noopener\">AccessibilityNodeInfo<\/a><\/span> <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#setLabeledBy%28android.view.View%29\" target=\"_blank\" rel=\"noopener\">setLabeledBy<\/a><\/span> and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#getLabeledBy%28%29\" target=\"_blank\" rel=\"noopener\">getLabeledBy<\/a><\/span> in favor of <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#addLabeledBy%28android.view.View%29\" target=\"_blank\" rel=\"noopener\">addLabeledBy<\/a><\/span>, <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#removeLabeledBy%28android.view.View%29\" target=\"_blank\" rel=\"noopener\">removeLabeledBy<\/a><\/span>, and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#getLabeledByList%28%29\" target=\"_blank\" rel=\"noopener\">getLabeledByList<\/a><\/span>.<\/p>\n<h3><span style=\"font-size: large;\">Improved support for expandable elements<\/span><\/h3>\n<p>Android 16 adds accessibility APIs that allow you to convey the expanded or collapsed state of interactive elements, such as menus and expandable lists. By setting the expanded state using <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#setExpandedState%28int%29\" target=\"_blank\" rel=\"noopener\">setExpandedState<\/a><\/span> and dispatching <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityEvent#TYPE_WINDOW_CONTENT_CHANGED\" target=\"_blank\" rel=\"noopener\">TYPE_WINDOW_CONTENT_CHANGED<\/a> AccessibilityEvents<\/span> with a <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityEvent#CONTENT_CHANGE_TYPE_EXPANDED\" target=\"_blank\" rel=\"noopener\">CONTENT_CHANGE_TYPE_EXPANDED<\/a><\/span> content change type, you can ensure that screen readers like <a href=\"https:\/\/developer.android.com\/guide\/topics\/ui\/accessibility\/testing#talkback\" target=\"_blank\" rel=\"noopener\">TalkBack<\/a> announce state changes, providing a more intuitive and inclusive user experience.<\/p>\n<h3><span style=\"font-size: large;\">Indeterminate ProgressBars<\/span><\/h3>\n<p>Android 16 adds <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo.RangeInfo#RANGE_TYPE_INDETERMINATE\" target=\"_blank\" rel=\"noopener\">RANGE_TYPE_INDETERMINATE<\/a><\/span>, giving a way for you to expose <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo.RangeInfo\" target=\"_blank\" rel=\"noopener\">RangeInfo<\/a><\/span> for both determinate and indeterminate <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/widget\/ProgressBar\" target=\"_blank\" rel=\"noopener\">ProgressBar<\/a><\/span> widgets, allowing services like <a href=\"https:\/\/developer.android.com\/guide\/topics\/ui\/accessibility\/testing#talkback\" target=\"_blank\" rel=\"noopener\">TalkBack<\/a> to more consistently provide feedback for progress indicators.<\/p>\n<h3><span style=\"font-size: large;\">Tri-state CheckBox<\/span><\/h3>\n<p>The new <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo\" target=\"_blank\" rel=\"noopener\">AccessibilityNodeInfo<\/a> <a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#getChecked()\" target=\"_blank\" rel=\"noopener\">getChecked<\/a><\/span> and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#setChecked%28int%29\" target=\"_blank\" rel=\"noopener\">setChecked(int)<\/a><\/span> methods in Android 16 now support a &#8220;partially checked&#8221; state in addition to &#8220;checked&#8221; and &#8220;unchecked.&#8221; This replaces the deprecated boolean <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#isChecked%28%29\" target=\"_blank\" rel=\"noopener\">isChecked<\/a><\/span> and <span style=\"font-family: courier;\"><a href=\"https:\/\/developer.android.com\/reference\/android\/view\/accessibility\/AccessibilityNodeInfo#setChecked%28boolean%29\" target=\"_blank\" rel=\"noopener\">setChecked(boolean)<\/a><\/span>.<\/p>\n<h2><span style=\"font-size: x-large;\">Two Android API releases in 2025<\/span><\/h2>\n<p>This preview is for the next major release of Android with a planned launch in Q2 of 2025 and we plan to have <a href=\"https:\/\/android-developers.googleblog.com\/2024\/10\/android-sdk-release-update.html\" target=\"_blank\" rel=\"noopener\">another release with new developer APIs in Q4<\/a>. The Q2 major release will be the only release in 2025 to include behavior changes that could affect apps. The Q4 minor release will pick up feature updates, optimizations, and bug fixes; like our non-SDK quarterly releases, it will not include any intentional app-impacting behavior changes.<\/p>\n<p><image><img decoding=\"async\" alt=\"2025 SDK release timeline showing a features only update in Q1 and Q3, a major SDK release with behavior changes, APIs, and features in Q2, and a minor SDK release with APIs and features in Q4\" border=\"0\" height=\"164\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjSeVe1-ddLYBDekoJnJP_c3Qq3BOxmM8IOvx6DbeaQCpau5VrnpHG8G0UFayJsIrVZehmY-Sf85Wt8iDvxJ5M8D0fGOl4M_ucFffyosC4AgRae6R6gN-mNrm3Jp8XYsJtQVHGqv84obbkuy4DvFbDgwdBXeuQ_JOveA2IWC1hbned7OkXJfWClTO2Szac\/w640-h164\/image2.png\" width=\"640\"\/><\/image><\/p>\n<p>We&#8217;ll continue to have quarterly Android releases. The Q1 and Q3 updates provide incremental updates to ensure continuous quality. We\u2019re putting additional energy into working with our device partners to bring the Q2 release to as many devices as possible. <\/p>\n<p>There\u2019s no change to the target API level requirements and the associated dates for apps in Google Play; our plans are for one annual requirement each year, tied to the major API level.<\/p>\n<h2><span style=\"font-size: x-large;\">How to get ready<\/span><\/h2>\n<p>In addition to performing compatibility testing on this next major release, make sure that you&#8217;re compiling your apps against the new SDK, and use the compatibility framework to enable <span style=\"color: #0d904f; font-family: courier;\">targetSdkVersion<\/span>-gated behavior changes as they become available for early testing.<\/p>\n<h2><span style=\"font-size: x-large;\">App compatibility<\/span><\/h2>\n<p><image><img loading=\"lazy\" decoding=\"async\" alt=\"The Android 16 production timeline shows the release stages, highlighting 'Beta Releases' and 'Platform Stability' in blue and green, respectively, from December to the final release.\" border=\"0\" height=\"164\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh8TY0XnQe6aG75kWFsj-UHzu3bdFe7euFD0ZpENjeeg1Lblw-VQYYAR_i4OIebbPuchS1DTPGNteYzWSDAXUMPzigpBn4uRwDuN8UyMe5aEZGMIYHA1Vz33C91iGyHofDTfqDoJ_OFK47SZLhO-ZL1gPhEV5wTmTNIl1EyJUTbFck_k1OhRcT8NUzHVpQ\/s1600\/image3.png\" width=\"640\"\/><\/image><\/p>\n<p>The Android 16 Preview program runs from November 2024 until the final public release in Q2 of 2025. At key development milestones, we&#8217;ll deliver updates for your development and testing environments. Each update includes SDK tools, system images, emulators, API reference, and API diffs. We&#8217;ll highlight critical APIs as they are ready to test in the preview program in blogs and on the <a href=\"https:\/\/developer.android.com\/about\/versions\/16\" target=\"_blank\" rel=\"noopener\">Android 16 developer website<\/a>.<\/p>\n<p>We\u2019re targeting March of 2025 for our Platform Stability milestone. At this milestone, we\u2019ll deliver final SDK\/NDK APIs and also final internal APIs and app-facing system behaviors. From that time you\u2019ll have several months before the final release to complete your testing. Learn more by checking the <a href=\"https:\/\/developer.android.com\/about\/versions\/16\/overview#timeline\" target=\"_blank\" rel=\"noopener\">release timeline details<\/a>.<\/p>\n<h2><span style=\"font-size: x-large;\">Get started with Android 16<\/span><\/h2>\n<p>You can <a href=\"https:\/\/www.google.com\/android\/beta\" target=\"_blank\" rel=\"noopener\">enroll any supported Pixel device<\/a> to get this and future Android Beta updates over-the-air. If you don\u2019t have a Pixel device, you can <a href=\"https:\/\/developer.android.com\/about\/versions\/16\/get#on_emulator\" target=\"_blank\" rel=\"noopener\">use the 64-bit system images with the Android Emulator<\/a> in Android Studio. If you are currently on Android 16 Beta 1 or are already in the Android Beta program, you will be offered an over-the-air update to Beta 2.<\/p>\n<p>We&#8217;re looking for your feedback so please <a href=\"https:\/\/developer.android.com\/about\/versions\/16\/feedback\" target=\"_blank\" rel=\"noopener\">report issues and submit feature requests<\/a> on the <a href=\"https:\/\/developer.android.com\/about\/versions\/16\/feedback\" target=\"_blank\" rel=\"noopener\">feedback page<\/a>. The earlier we get your feedback, the more we can include in our work on the final release.<\/p>\n<p>For the best development experience with Android 16, we recommend that you use the latest preview of <a href=\"https:\/\/developer.android.com\/studio\/preview\" target=\"_blank\" rel=\"noopener\">Android Studio (Meerkat)<\/a>. Once you\u2019re set up, here are some of the things you should do:<\/p>\n<ul>\n<ul>\n<li>Compile against the new SDK, test in CI environments, and report any issues in our tracker on the <a href=\"https:\/\/developer.android.com\/about\/versions\/16\/feedback\" target=\"_blank\" rel=\"noopener\">feedback page<\/a>.<\/li>\n<li>Test your current app for compatibility, learn whether your app is <a href=\"https:\/\/developer.android.com\/about\/versions\/16\/behavior-changes-all\" target=\"_blank\" rel=\"noopener\">affected by changes in Android 16<\/a>, and install your app onto a device or emulator running Android 16 and extensively test it.<\/li>\n<\/ul>\n<\/ul>\n<p>We\u2019ll update the <a href=\"https:\/\/developer.android.com\/about\/versions\/16\/download\" target=\"_blank\" rel=\"noopener\">beta system images<\/a> and SDK regularly throughout the Android 16 release cycle. Once you\u2019ve installed a beta build, you\u2019ll automatically get future updates over-the-air for all later previews and Betas.<\/p>\n<p>For complete information, visit the <a href=\"https:\/\/developer.android.com\/about\/versions\/16\" target=\"_blank\" rel=\"noopener\">Android 16 developer site<\/a>.<\/p>\n<\/div>\n<p>[ad_2]<br \/>\n<br \/><a href=\"http:\/\/android-developers.googleblog.com\/2025\/02\/second-beta-android16.html\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] Posted by Matthew McCullough \u2013 VP of Product Management, Android Developer Today we&#8217;re releasing the second beta of Android 16, continuing our work to<\/p>\n","protected":false},"author":1,"featured_media":271151,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[146],"tags":[],"_links":{"self":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/posts\/271150"}],"collection":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/comments?post=271150"}],"version-history":[{"count":0,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/posts\/271150\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/media\/271151"}],"wp:attachment":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/media?parent=271150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/categories?post=271150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/tags?post=271150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}