ویژگی ها و API های اندروید 10

اندروید 10 ویژگی ها و قابلیت های فوق العاده ای را برای کاربران و توسعه دهندگان معرفی می کند. این سند آنچه را که برای توسعه دهندگان در دسترس است برجسته می کند.

برای آشنایی با APIها، گزارش تفاوت API را بخوانید یا به مرجع Android API مراجعه کنید — به دنبال APIهایی بگردید که "در سطح API 29 اضافه شده اند". همچنین حتماً تغییرات رفتاری Android 10 (برای برنامه‌هایی که سطح API 29 را هدف قرار می‌دهند و برای همه برنامه‌ها ) و همچنین تغییرات حریم خصوصی را بررسی کنید تا در مورد مناطقی که تغییرات پلتفرم ممکن است بر برنامه‌های شما تأثیر بگذارد مطلع شوید.

پیشرفت های امنیتی

اندروید 10 تعدادی از ویژگی های امنیتی را معرفی می کند که در بخش های زیر خلاصه می شود.

گفتگوهای احراز هویت بیومتریک بهبود یافته است

اندروید 10 بهبودهای زیر را برای پشتیبانی از احراز هویت بیومتریک معرفی می کند:

  • بررسی قابلیت احراز هویت بیومتریک.
  • مکانیزم بازگشتی که به کاربر اجازه می‌دهد در صورتی که نمی‌تواند با استفاده از ورودی بیومتریک خود احراز هویت کند، با استفاده از پین، الگو یا رمز عبور دستگاه خود احراز هویت کند.
  • اشاره ای که به سیستم می گوید پس از احراز هویت کاربر با استفاده از روش بیومتریک ضمنی، نیازی به تأیید کاربر نداشته باشد. برای مثال، می‌توانید به سیستم بگویید که پس از احراز هویت کاربر با استفاده از تأیید هویت، نیازی به تأیید بیشتر نیست.

کد DEX جاسازی شده را مستقیماً از APK اجرا کنید

از اندروید 10، می‌توانید به پلتفرم بگویید که کد DEX تعبیه‌شده را مستقیماً از فایل APK برنامه شما اجرا کند. این گزینه می تواند به جلوگیری از حمله کمک کند اگر مهاجمی بتواند کدهای کامپایل شده محلی روی دستگاه را دستکاری کند.

برای اطلاعات بیشتر، اجرای کد DEX جاسازی شده را مستقیماً از APK ببینید.

پشتیبانی از TLS 1.3

اندروید 10 پشتیبانی از TLS 1.3 را اضافه می کند. TLS 1.3 یک تجدید نظر اساسی در استاندارد TLS است که شامل مزایای عملکرد و امنیت افزایش یافته است. معیارهای ما نشان می‌دهد که با TLS 1.3 در مقایسه با TLS 1.2، می‌توان ارتباطات ایمن را تا 40 درصد سریع‌تر برقرار کرد.

برای جزئیات بیشتر در مورد اجرای TLS 1.3، به بخش TLS در صفحه تغییرات رفتار برای همه برنامه‌ها مراجعه کنید.

Public Conscrypt API

از اندروید 10، ارائه‌دهنده امنیت Conscrypt دارای یک API عمومی برای عملکرد TLS است.

مجموعه کلاس‌های تحت android.net.ssl ​​حاوی روش‌های ثابت برای دسترسی به عملکردی است که از APIهای عمومی javax.net.ssl ​​در دسترس نیست. نام این کلاس ها را می توان به صورت جمع کلاس javax.net.ssl ​​مربوطه استنباط کرد. برای مثال، کدی که روی نمونه‌های javax.net.ssl.SSLSocket عمل می‌کند، می‌تواند در عوض از روش‌های SSLSockets استفاده کند.

ویژگی های اتصال

اندروید 10 شامل چندین پیشرفت در ارتباط با شبکه و اتصال است.

API اتصال شبکه Wi-Fi

اندروید 10 پشتیبانی از اتصالات همتا به همتا را اضافه می کند. این ویژگی به برنامه شما امکان می‌دهد تا با استفاده از WifiNetworkSpecifier برای توصیف ویژگی‌های یک شبکه درخواستی، از کاربر بخواهد نقطه دسترسی را که دستگاه به آن متصل است تغییر دهد. اتصال همتا به همتا برای اهداف غیر ارائه شبکه، مانند پیکربندی راه‌اندازی برای دستگاه‌های ثانویه مانند Chromecast و سخت‌افزار Google Home استفاده می‌شود.

برای اطلاعات بیشتر، به API درخواست شبکه Wi-Fi برای اتصال همتا به همتا مراجعه کنید.

API پیشنهاد شبکه Wi-Fi

اندروید 10 از برنامه شما پشتیبانی می‌کند تا از کاربر بخواهد به نقطه دسترسی Wi-Fi متصل شود. شما می توانید پیشنهاداتی برای اتصال به شبکه ارائه دهید. پلتفرم در نهایت انتخاب می‌کند که کدام نقطه دسترسی را بر اساس ورودی شما و سایر برنامه‌ها بپذیرد.

برای اطلاعات بیشتر درباره این ویژگی، پیشنهاد Wi-Fi را ببینید.

بهبود حالت‌های Wi-Fi با کارایی بالا و کم تأخیر

اندروید 10 به شما امکان می دهد برای به حداقل رساندن تاخیر به مودم زیرین راهنمایی ارائه دهید.

Android 10 API قفل Wi-Fi را گسترش می دهد تا به طور موثر از حالت عملکرد بالا و حالت تاخیر کم پشتیبانی کند. صرفه جویی در انرژی Wi-Fi برای حالت با کارایی بالا و کم تأخیر غیرفعال است و بسته به پشتیبانی مودم، ممکن است بهینه سازی تأخیر بیشتر در حالت تأخیر کم فعال شود.

حالت تأخیر کم تنها زمانی فعال می شود که برنامه دریافت کننده قفل در پیش زمینه اجرا شود و صفحه نمایش روشن باشد. حالت تأخیر کم مخصوصاً برای برنامه‌های بازی موبایلی بلادرنگ مفید است.

جستجوهای تخصصی در حل کننده DNS

اندروید 10 با استفاده از جستجوی متن شفاف و حالت DNS-over-TLS، پشتیبانی بومی را برای جستجوهای تخصصی DNS اضافه می کند. پیش از این، حل‌کننده DNS پلتفرم تنها از رکوردهای A و AAAA پشتیبانی می‌کرد که امکان جستجوی تنها آدرس‌های IP مرتبط با یک نام را فراهم می‌کرد، اما هیچ نوع رکورد دیگری را پشتیبانی نمی‌کرد. DnsResolver API وضوح عمومی و ناهمزمان را ارائه می‌کند و به شما امکان می‌دهد SRV ، NAPTR و دیگر انواع رکورد را جستجو کنید. توجه داشته باشید که تجزیه پاسخ به برنامه واگذار شده است.

برای برنامه‌های مبتنی بر NDK، android_res_nsend را ببینید.

Wi-Fi Easy Connect

Android 10 به شما امکان می دهد از Easy Connect برای ارائه اعتبارنامه Wi-Fi به یک دستگاه همتا، به عنوان جایگزینی برای WPS که منسوخ شده است، استفاده کنید. برنامه‌ها می‌توانند Easy Connect را با استفاده از هدف ACTION_PROCESS_WIFI_EASY_CONNECT_URI در جریان راه‌اندازی و تأمین خود ادغام کنند.

برای اطلاعات بیشتر در مورد این ویژگی، Wi-Fi Easy Connect را ببینید.

API اتصال Wi-Fi Direct

کلاس‌های WifiP2pConfig و WifiP2pManager API به‌روزرسانی‌هایی در Android 10 دارند تا از قابلیت‌های برقراری اتصال سریع به Wi-Fi Direct با استفاده از اطلاعات از پیش تعیین‌شده پشتیبانی کنند. این اطلاعات از طریق یک کانال جانبی مانند بلوتوث یا NFC به اشتراک گذاشته می شود.

نمونه کد زیر نحوه ایجاد یک گروه با استفاده از اطلاعات از پیش تعیین شده را نشان می دهد:

کاتلین

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

جاوا

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

برای پیوستن به یک گروه با استفاده از اعتبار، manager.createGroup() را با عبارت زیر جایگزین کنید:

کاتلین

manager.connect(channel, config, null)

جاوا

manager.connect(channel, config, null);

کانال های اتصال محور بلوتوث LE (CoC)

Android 10 به برنامه شما امکان می دهد از اتصالات BLE CoC برای انتقال جریان های داده بزرگتر بین دو دستگاه BLE استفاده کند. این رابط، بلوتوث و مکانیک های اتصال را برای ساده سازی پیاده سازی خلاصه می کند.

ویژگی های تلفن

اندروید 10 شامل چندین پیشرفت در ارتباط با تلفن است.

بهبود کیفیت تماس

اندروید 10 امکان جمع‌آوری اطلاعات در مورد کیفیت تماس‌های مداوم IP چندرسانه‌ای زیرسیستم (IMS) از جمله کیفیت به شبکه و از شبکه را در دستگاه‌هایی که از این ویژگی پشتیبانی می‌کنند، اضافه می‌کند.

غربالگری تماس و شناسه تماس گیرنده

Android 10 ابزاری را برای برنامه شما فراهم می‌کند تا تماس‌هایی را که در دفترچه آدرس کاربر نیستند به‌عنوان تماس‌های هرزنامه احتمالی شناسایی کند و تماس‌های هرزنامه را بی‌صدا از طرف کاربر رد کند. اطلاعات مربوط به این تماس‌های مسدود شده به‌عنوان تماس‌های مسدود شده در گزارش تماس ثبت می‌شود تا در صورت عدم تماس کاربر، شفافیت بیشتری برای کاربر فراهم کند. استفاده از این API نیاز به دریافت مجوزهای READ_CALL_LOG از کاربر برای ارائه قابلیت غربالگری تماس و شناسه تماس گیرنده را حذف می کند.

API سرویس تغییر مسیر تماس

اندروید 10 نحوه رسیدگی به اهداف تماس را تغییر می‌دهد. پخش NEW_OUTGOING_CALL منسوخ شده و با CallRedirectionService API جایگزین شده است. CallRedirectionService API رابط‌هایی را برای شما فراهم می‌کند تا تماس‌های خروجی را که توسط پلتفرم Android ایجاد می‌شود، تغییر دهید. به عنوان مثال، برنامه های شخص ثالث ممکن است تماس ها را لغو کرده و آنها را از طریق VoIP تغییر مسیر دهند.

بهبود در ایجاد فایل در حافظه خارجی

اندروید 10 علاوه بر معرفی فضای ذخیره‌سازی محدوده ، قابلیت‌های زیر را در رابطه با حافظه خارجی اضافه می‌کند:

رسانه و گرافیک

اندروید 10 ویژگی های رسانه ای و گرافیکی جدید و API های زیر را معرفی می کند:

به اشتراک گذاری ورودی صوتی

اندروید 10 این قابلیت را به دو برنامه اضافه می کند که ورودی صدا را به طور همزمان به اشتراک بگذارند. برای اطلاعات کامل، به اشتراک گذاری ورودی صوتی مراجعه کنید.

ضبط پخش صدا

اندروید 10 به یک برنامه این امکان را می دهد که از سایر برنامه ها پخش صدا را ضبط کند. برای اطلاعات کامل، به ضبط پخش مراجعه کنید.

نوار جستجو در اعلان‌های MediaStyle

با شروع اندروید 10، اعلان‌های MediaStyle یک نوار جستجو را نمایش می‌دهند. seekbar پیشرفت پخش را از PlaybackState.getPosition() نشان می دهد و در برخی موارد می توان از seekbar برای جستجوی مکانی در برنامه پخش استفاده کرد. ظاهر و رفتار نوار جستجو توسط این قوانین کنترل می شود:

  • اگر MediaSession فعالی وجود داشته باشد و مدت زمان آن (مشخص شده توسط MediaMetadata.METADATA_KEY_DURATION ) بزرگتر از صفر باشد، نوار جستجو ظاهر می شود. این بدان معناست که نوار برای جریان‌های نامشخص مانند پخش‌های زنده و پخش‌های رادیویی ظاهر نمی‌شود.
  • اگر جلسه ACTION_SEEK_TO را پیاده سازی کند، کاربر می تواند نوار جستجو را برای کنترل مکان پخش بکشد.

Native MIDI API

Android Native MIDI API (AMidi) به توسعه‌دهندگان برنامه این امکان را می‌دهد که داده‌های MIDI را با کد C/C++ ارسال و دریافت کنند، با منطق صوتی/کنترل C/C++ آنها یکپارچه‌تر شده و نیاز به JNI را به حداقل می‌رساند.

برای اطلاعات بیشتر، Android Native MIDI API را ببینید.

بهبود MediaCodecInfo

اندروید 10 روش هایی را به MediaCodecInfo اضافه می کند که اطلاعات بیشتری را در مورد کدک نشان می دهد.

برای اطلاعات بیشتر، به کدک های رسانه مراجعه کنید.

API حرارتی

وقتی دستگاه‌ها بیش از حد گرم می‌شوند، ممکن است CPU و/یا GPU را تحت تأثیر قرار دهند و این می‌تواند برنامه‌ها و بازی‌ها را به روش‌های غیرمنتظره‌ای تحت تأثیر قرار دهد. برنامه‌هایی که از گرافیک پیچیده، محاسبات سنگین، یا فعالیت شبکه پایدار استفاده می‌کنند، بیشتر به مشکلاتی برخورد می‌کنند، و این موارد می‌توانند بر اساس چیپ‌ست و فرکانس‌های هسته، سطوح یکپارچه‌سازی، و همچنین بسته‌بندی دستگاه و فاکتور شکل متفاوت باشند.

در اندروید 10، برنامه‌ها و بازی‌ها می‌توانند از یک API حرارتی برای نظارت بر تغییرات روی دستگاه استفاده کنند و برای حفظ مصرف انرژی کمتر برای بازگرداندن دمای معمولی اقدام کنند. برنامه‌ها شنونده‌ای را در PowerManager ثبت می‌کنند، که از طریق آن سیستم وضعیت حرارتی مداوم را از سبک و متوسط ​​تا شدید، بحرانی، اضطراری و خاموش شدن گزارش می‌دهد.

وقتی دستگاه تنش حرارتی را گزارش می‌کند، برنامه‌ها و بازی‌ها می‌توانند با عقب‌نشینی از فعالیت‌های در حال انجام برای کاهش مصرف انرژی به روش‌های مختلف کمک کنند. به عنوان مثال، برنامه‌های پخش جریانی می‌توانند وضوح/ نرخ بیت یا ترافیک شبکه را کاهش دهند، یک برنامه دوربین می‌تواند فلاش یا بهبود فشرده تصویر را غیرفعال کند، یک بازی می‌تواند نرخ فریم یا چند ضلعی را کاهش دهد، یک برنامه رسانه می‌تواند صدای بلندگو را کاهش دهد، و یک برنامه نقشه می‌تواند بچرخد. GPS را خاموش کنید

API حرارتی به یک لایه HAL دستگاه جدید نیاز دارد - در حال حاضر در دستگاه‌های Pixel دارای Android 10 پشتیبانی می‌شود و ما در حال کار با شرکای سازنده دستگاه خود هستیم تا در سریع‌ترین زمان ممکن پشتیبانی گسترده‌ای را از اکوسیستم ارائه کنیم.

دوربین و تصاویر

اندروید 10 ویژگی های جدید مرتبط با دوربین و تصویر را معرفی می کند:

پشتیبانی از دوربین تک رنگ

اندروید 9 (سطح API 28) اولین بار قابلیت دوربین تک رنگ را معرفی کرد. اندروید 10 چندین پیشرفت را به پشتیبانی از دوربین تک رنگ اضافه می کند:

  • پشتیبانی از فرمت جریان Y8 برای بهبود کارایی حافظه.
  • پشتیبانی از ضبط تک رنگ خام DNG.
  • معرفی MONO و NIR CFA برای تمایز بین دوربین های تک رنگ معمولی و دوربین های مادون قرمز نزدیک.

می توانید از این ویژگی برای گرفتن یک تصویر تک رنگ بومی استفاده کنید. یک دستگاه با چند دوربین منطقی ممکن است از یک دوربین تک رنگ به عنوان یک دوربین فرعی فیزیکی برای دستیابی به کیفیت تصویر بهتر در نور کم استفاده کند.

فرمت عمق پویا

با شروع اندروید 10، دوربین‌ها می‌توانند داده‌های عمق تصویر را در یک فایل جداگانه با استفاده از طرحی جدید به نام «فرمت دینامیک عمق» (DDF) ذخیره کنند. برنامه‌ها می‌توانند هم تصویر JPG و هم فراداده عمق آن را درخواست کنند و از این اطلاعات برای اعمال هرگونه تاری در پس پردازش بدون تغییر داده‌های تصویر اصلی استفاده کنند.

برای خواندن مشخصات این قالب، به قالب پویا عمق مراجعه کنید.

فرمت فایل تصویری با کارایی بالا

فرمت High Efficiency Image File (HEIF) یک فرمت استاندارد تصویر و ویدیو است که در مقایسه با سایر فرمت‌های فایل، کدگذاری با کیفیت بالاتر و اندازه فایل کوچک‌تر را معرفی می‌کند.

برای اطلاعات بیشتر در مورد فرمت فایل، به HEIC مراجعه کنید.

بهبود در چند دوربین

اندروید 10 ترکیب چندین دوربین را در یک دوربین منطقی بهبود می‌بخشد، این ویژگی در اندروید 9 (سطح API 28) معرفی شده است. موارد زیر به API Camera2 اضافه شد:

  • isSessionConfigurationSupported(SessionConfiguration sessionConfig) - شما را قادر می سازد تا بپرسید که آیا پیکربندی جلسه تصویب شده می تواند برای ایجاد یک جلسه ضبط دوربین استفاده شود یا خیر.

  • LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID — شما را قادر می سازد شناسه دوربین فیزیکی فعال را که پشتیبان یک دستگاه دوربین منطقی است، تعیین کنید. می‌توانید از شناسه‌های بازگردانده شده برای درخواست جریان‌های منطقی و جریان‌های فیزیکی زیر دوربین برای دستیابی به بهره‌وری بهتر استفاده کنید.

API خدمات دسترسی

اندروید 10 ویژگی‌های سرویس دسترسی جدید و APIهای زیر را معرفی می‌کند:

پرچم کلید ورود AccessibilityNodeInfo

از اندروید 10، می‌توانید isTextEntryKey() را فراخوانی کنید تا مشخص کنید که AccessibilityNodeInfo یک کلید ورود متن را نشان می‌دهد که بخشی از صفحه‌کلید یا صفحه‌کلید است.

بازخورد گفتاری گفتگوی دسترس‌پذیری

در مواردی که کاربران برای راه‌اندازی یک سرویس دسترس‌پذیری نیاز به اجرای میانبر دسترسی داشته باشند، Android 10 اجازه می‌دهد در صورت درخواست سرویس، گفتگو با یک پیام تبدیل متن به گفتار همراه شود.

میانبر دسترس‌پذیری هنگام فعال بودن پیمایش اشاره‌ای

وقتی ویژگی پیمایش اشاره‌ای در Android 10 فعال است، دکمه دسترس‌پذیری قابل مشاهده یا انتخاب نیست. برای دسترسی به منوی خدمات دسترسی، کاربران باید یکی از حرکات زیر را انجام دهند:

  • با دو انگشت تند به بالا بکشید.
  • با دو انگشت تند به بالا بکشید و نگه دارید.

میانبر دسترس‌پذیری برای صفحه‌کلیدهای فیزیکی

در اندروید 10، کاربران می توانند با فشار دادن Control+Alt+Z، میانبر دسترسی را روی صفحه کلید فیزیکی فعال کنند.

بهبود کنترلر صفحه کلید نرم

در Android 10، سرویس‌های دسترس‌پذیری می‌توانند درخواست کنند که صفحه‌کلید نرم نمایش داده شود، حتی زمانی که دستگاه یک صفحه کلید سخت متصل را تشخیص دهد. کاربران می توانند این رفتار را لغو کنند.

وقفه های دسترسی تعریف شده توسط کاربر

اندروید 10 API getRecommendedTimeoutMillis() را معرفی می کند. این روش از وقفه های زمانی تعریف شده توسط کاربر برای عناصر رابط کاربری تعاملی و غیر تعاملی پشتیبانی می کند. مقدار بازگشتی هم تحت تأثیر تنظیمات برگزیده کاربر و هم تحت تأثیر APIهای سرویس دسترسی است.

بهبود تکمیل خودکار

اندروید 10 شامل بهبودهای زیر برای سرویس تکمیل خودکار است.

درخواست های تکمیل خودکار مرتبط با سازگاری

می توانید از پرچم FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST برای تعیین اینکه آیا درخواست تکمیل خودکار از طریق حالت سازگاری ایجاد شده است استفاده کنید.

نام کاربری و رمز عبور را به طور همزمان ذخیره کنید

با استفاده از پرچم SaveInfo.FLAG_DELAY_SAVE می توانید مواردی را که یک برنامه از چندین فعالیت برای نمایش نام کاربری، رمز عبور و سایر فیلدها استفاده می کند، پشتیبانی کنید.

تعامل کاربر با Save UI

می‌توانید با تنظیم یک شنونده عمل در گفتگو و تغییر نمایان بودن نمای راه دور گذرواژه مربوطه، یک فیلد رمز عبور را در یک گفتگوی ذخیره نشان داده و پنهان کنید.

پشتیبانی از به روز رسانی مجموعه داده ها

تکمیل خودکار می تواند رمزهای عبور موجود را به روز کند. به عنوان مثال، اگر کاربری قبلاً یک رمز عبور ذخیره کرده باشد و یک رمز عبور جدید ذخیره کند، تکمیل خودکار از کاربر می‌خواهد به جای ذخیره رمز عبور جدید، رمز عبور موجود را به‌روزرسانی کند.

بهبود طبقه بندی زمینه

Android 10 شامل بهبودهای زیر در Field Classification API است.

سازنده UserData.Builder

سازنده UserData.Builder برای تراز بهتر با الگوی Builder تغییر کرده است.

اجازه دهید یک مقدار به چندین نوع شناسه دسته نگاشت شود

هنگام استفاده از UserData.Builder در Android 10، اکنون می توانید یک مقدار را به چندین نوع شناسه دسته بندی نگاشت کنید. در نسخه‌های قبلی، در صورتی که یک مقدار بیش از یک بار اضافه شود، یک استثنا ایجاد می‌شد.

پشتیبانی بهبود یافته برای شماره کارت اعتباری

طبقه بندی فیلد اکنون می تواند اعداد چهار رقمی را به عنوان چهار رقم آخر شماره کارت اعتباری شناسایی کند.

پشتیبانی از طبقه بندی فیلدهای خاص برنامه

اندروید 10 FillResponse.setUserData() را اضافه می کند که به شما امکان می دهد داده های کاربر خاص برنامه را برای مدت جلسه تنظیم کنید. این به سرویس تکمیل خودکار کمک می کند تا انواع فیلدهای دارای محتوای خاص برنامه را شناسایی کند.

UI و کنترل های سیستم

اندروید 10 بهبودهای زیر را در رابط کاربری ارائه می دهد:

از کلاهک های JVMTI PopFrame پشتیبانی کنید

Android 10 پشتیبانی از قابلیت can_pop_frames را در اجرای Android JVMTI اضافه می کند. هنگام اشکال‌زدایی، این ویژگی به شما امکان می‌دهد تا پس از توقف در نقطه شکست و تنظیم محلی‌ها، جهانی‌ها یا اجرای یک تابع، عملکردها را دوباره اجرا کنید. برای اطلاعات بیشتر، به صفحه مرجع Oracle's Pop Frame مراجعه کنید.

API کنترل سطح

Android 10 یک SurfaceControl API برای دسترسی سطح پایین به سیستم-کامپوزیتور ( SurfaceFlinger ) ارائه می‌کند. برای اکثر کاربران، SurfaceView روش صحیحی برای استفاده از compositor است. SurfaceControl API می تواند در موارد خاصی مفید باشد، به عنوان مثال:

  • همگام سازی سطوح مختلف
  • تعبیه سطحی بین فرآیندی
  • مدیریت طول عمر سطح پایین

SurfaceControl API در هر دو اتصال SDK و NDK موجود است. پیاده سازی NDK شامل یک API برای تبادل دستی بافرها با کامپوزیتور است. این یک جایگزین برای کاربرانی است که با محدودیت های BufferQueue روبرو شده اند.

تشخیص رندر آویزان WebView

اندروید 10 کلاس انتزاعی WebViewRenderProcessClient را معرفی می‌کند که برنامه‌ها می‌توانند از آن برای تشخیص عدم پاسخگویی WebView استفاده کنند. برای استفاده از این کلاس:

  1. زیر کلاس خود را تعریف کنید و متدهای onRenderProcessResponsive() و onRenderProcessUnresponsive() آن را پیاده سازی کنید.
  2. یک نمونه از WebViewRenderProcessClient خود را به یک یا چند شیء WebView ضمیمه کنید.
  3. اگر WebView پاسخگو نباشد، سیستم با عبور از WebView و WebViewRenderProcess ، متد onRenderProcessUnresponsive() کلاینت را فراخوانی می کند. (اگر WebView تک پردازشی است، پارامتر WebViewRenderProcess پوچ است.) برنامه شما می تواند اقدامات مناسبی را انجام دهد، مانند نمایش یک کادر محاوره ای به کاربر که از کاربر بپرسد آیا می خواهد فرآیند رندر را متوقف کند.

اگر WebView پاسخگو باقی بماند، سیستم به صورت دوره ای onRenderProcessUnresponsive() را فرا می خواند (حداکثر هر پنج ثانیه یک بار)، اما هیچ اقدام دیگری انجام نمی دهد. اگر WebView دوباره پاسخگو شود، سیستم فقط یک بار onRenderProcessResponsive() را فراخوانی می کند.

پانل های تنظیمات

اندروید 10 پانل‌های تنظیمات را معرفی می‌کند، یک API که به برنامه‌ها اجازه می‌دهد تنظیمات را در زمینه برنامه‌شان به کاربران نشان دهند. این امر باعث می‌شود که کاربران برای استفاده از برنامه نیازی به رفتن به تنظیمات برای تغییر مواردی مانند NFC یا داده تلفن همراه نداشته باشند.

شکل 1. کاربر سعی می کند یک صفحه وب را در حالی که دستگاه به شبکه متصل نیست باز کند. کروم پانل تنظیمات اتصال به اینترنت را باز می کند...

شکل 2. کاربر می تواند Wi-Fi را روشن کند و شبکه ای را بدون خروج از برنامه Chrome انتخاب کند.

برای مثال، فرض کنید یک کاربر در حالی که دستگاهش در حالت هواپیما است، مرورگر وب را باز می کند. قبل از اندروید 10، این برنامه فقط می توانست یک پیام عمومی را نمایش دهد که از کاربر می خواهد تنظیمات را برای بازیابی اتصال باز کند. با Android 10، برنامه مرورگر می‌تواند یک پنل درون خطی را نمایش دهد که تنظیمات کلیدی اتصال مانند حالت هواپیما، Wi-Fi (از جمله شبکه‌های اطراف) و داده‌های تلفن همراه را نشان می‌دهد. با استفاده از این پنل، کاربران می توانند بدون خروج از برنامه، اتصال را بازیابی کنند.

برای نمایش پانل تنظیمات، یک هدف را با یکی از Settings.Panel زیر فعال کنید.

کاتلین

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

جاوا

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type می تواند یکی از موارد زیر باشد:

ACTION_INTERNET_CONNECTIVITY
تنظیمات مربوط به اتصال به اینترنت، مانند حالت هواپیما، Wi-Fi و داده تلفن همراه را نشان می دهد.
ACTION_WIFI
تنظیمات Wi-Fi را نشان می دهد، اما سایر تنظیمات اتصال را نشان نمی دهد . این برای برنامه هایی مفید است که برای انجام آپلود یا دانلودهای بزرگ به اتصال Wi-Fi نیاز دارند.
ACTION_NFC
تمام تنظیمات مربوط به ارتباطات میدان نزدیک (NFC) را نشان می دهد.
ACTION_VOLUME
تنظیمات صدا را برای همه جریان های صوتی نشان می دهد.

به اشتراک گذاری بهبودها

اندروید 10 چندین پیشرفت برای اشتراک گذاری ارائه می دهد:

اشتراک گذاری میانبرهای میانبر

اشتراک‌گذاری میانبرها جایگزین APIهای اشتراک‌گذاری مستقیم می‌شود.

به جای بازیابی نتایج به صورت واکنشی در صورت تقاضا، اشتراک‌گذاری میانبرها به برنامه‌ها اجازه می‌دهد اهداف اشتراک مستقیم را از قبل منتشر کنند. ShortcutManager اینگونه کار می کند. از آنجایی که این دو API شبیه هم هستند، ما ShortcutInfo API را گسترش داده‌ایم تا استفاده از هر دو ویژگی را آسان‌تر کنیم. با استفاده از اشتراک‌گذاری میانبرها، می‌توانید مستقیماً دسته‌ها یا افراد را به یک هدف اشتراک‌گذاری اختصاص دهید. اهداف اشتراک گذاری در سیستم باقی می مانند تا زمانی که همان برنامه آنها را به روز کند یا برنامه حذف نصب نشود.

مکانیزم Direct Share قدیمی‌تر هنوز کار می‌کند، اما برنامه‌هایی که از آن استفاده می‌کنند اولویت کمتری نسبت به برنامه‌هایی دارند که از Sharing Shortcuts API استفاده می‌کنند.

ShortcutInfo.Builder روش هایی را برای ارائه اطلاعات اضافی درباره هدف سهم اضافه و بهبود می بخشد.

اهداف سهم مستقیم

می توانید یک میانبر پویا را به عنوان هدف اشتراک مستقیم منتشر کنید. به انتشار اهداف اشتراک مستقیم مراجعه کنید.

ShortcutManagerCompat یک API AndroidX جدید است که با DirectShare API قدیمی سازگاری دارد. این روش ترجیحی برای انتشار اهداف سهم است.

پیش نمایش متن

هنگامی که یک برنامه محتوای متنی را به اشتراک می‌گذارد، می‌تواند پیش‌نمایش اختیاری محتوا را در رابط کاربر صفحه اشتراک نشان دهد.

به افزودن پیش نمایش متن غنی رجوع کنید

بیشتر بدانید

برای اطلاعات بیشتر در مورد اینکه چگونه برنامه ها می توانند داده ها را به اشتراک بگذارند، به ارسال داده های ساده به برنامه های دیگر و دریافت داده های ساده از سایر برنامه ها مراجعه کنید.

تم تاریک

Android 10 یک تم تیره ارائه می‌کند که هم برای رابط کاربری سیستم اندروید و هم برای برنامه‌های در حال اجرا روی دستگاه اعمال می‌شود. برای اطلاعات کامل، تم تیره را ببینید.

انواع خدمات پیش زمینه

اندروید 10 ویژگی مانیفست foregroundServiceType XML را معرفی می کند که در تعریف چندین سرویس خاص گنجانده شده است. تخصیص چندین نوع سرویس پیش زمینه به یک سرویس خاص، اگرچه به ندرت مناسب است، ممکن است.

جدول زیر انواع مختلف خدمات پیش زمینه و خدماتی را که در آن مناسب است نوع خاصی را اعلام کنید نشان می دهد:

نوع خدمات پیش زمینه مثال استفاده برای سرویسی که باید این نوع را اعلام کند
connectedDevice یک ردیاب تناسب اندام پوشیدنی را نظارت کنید
dataSync دانلود فایل ها از یک شبکه
location یک اقدام آغاز شده توسط کاربر را ادامه دهید
mediaPlayback یک کتاب صوتی، پادکست یا موسیقی پخش کنید
mediaProjection فیلمی از نمایشگر دستگاه در مدت زمان کوتاهی ضبط کنید
phoneCall رسیدگی به تماس تلفنی مداوم

کاتلین

اندروید 10 شامل به روز رسانی های زیر برای توسعه Kotlin است.

حاشیه نویسی پوچ پذیری برای API های libcore

Android 10 پوشش حاشیه‌نویسی‌های پوچ‌پذیری را در SDK برای APIهای libcore بهبود می‌بخشد. این یادداشت‌ها به توسعه‌دهندگان برنامه‌هایی که از تجزیه و تحلیل پوچ‌پذیری Kotlin یا Java در Android Studio استفاده می‌کنند، این امکان را می‌دهد تا هنگام تعامل با این APIها، اطلاعات پوچ را دریافت کنند.

به طور معمول، نقض قرارداد باطل در Kotlin منجر به خطاهای کامپایل می شود. برای اطمینان از سازگاری با کد موجود، فقط حاشیه‌نویسی‌های @RecentlyNullable و @RecentlyNonNull اضافه می‌شوند. این بدان معناست که نقض‌های پوچ‌پذیری به جای خطا منجر به هشدار می‌شوند.

علاوه بر این، هر حاشیه‌نویسی @RecentlyNullable یا @RecentlyNonNull که در اندروید 9 اضافه شده‌اند به ترتیب به @Nullable و @NonNull تغییر می‌کنند. این به این معنی است که در اندروید 10 و بالاتر، نقض ناپذیری به جای هشدار منجر به خطا می شود.

برای کسب اطلاعات بیشتر در مورد تغییرات حاشیه نویسی، به Android Pie SDK مراجعه کنید اکنون در وبلاگ توسعه دهندگان Android سازگارتر با Kotlin است .

NDK

اندروید 10 شامل تغییرات NDK زیر است.

بهبود اشکال زدایی مالکیت توصیفگر فایل

اندروید 10 fdsan را اضافه می کند که به شما کمک می کند مشکلات مالکیت توصیفگر فایل را راحت تر پیدا کرده و برطرف کنید.

اشکالات مربوط به سوء استفاده از مالکیت توصیفگر فایل، که معمولاً به صورت استفاده پس از بسته شدن و دوبار بستن ظاهر می شوند، مشابه اشکالات تخصیص حافظه استفاده پس از رایگان و دوبار رایگان هستند، اما تشخیص آنها بسیار دشوارتر است. و رفع کنید. fdsan تلاش می‌کند تا با اعمال مالکیت توصیف‌گر فایل، سوءمدیریت توصیفگر فایل را شناسایی و/یا از آن جلوگیری کند.

برای اطلاعات بیشتر درباره خرابی‌های مربوط به این مشکلات، خطای شناسایی شده توسط fdsan را ببینید. برای اطلاعات بیشتر درباره fdsan، به صفحه Googlesource در fdsan مراجعه کنید.

ELF TLS

برنامه های ساخته شده با استفاده از NDK با حداقل سطح API 29 می توانند از ELF TLS به جای emutls استفاده کنند. پشتیبانی پیوند دهنده پویا و استاتیک برای پشتیبانی از این روش مدیریت متغیرهای thread-local اضافه شده است.

برای برنامه‌هایی که برای سطح API 28 و پایین‌تر ساخته شده‌اند، بهبودهایی برای libgcc/compiler-rt اعمال شده است تا برخی از مشکلات emutls را حل کند.

برای اطلاعات بیشتر، تغییرات Android برای توسعه دهندگان NDK را ببینید.

زمان اجرا

اندروید 10 شامل تغییر زمان اجرا زیر است.

راه اندازی جمع آوری زباله مبتنی بر Malinfo

هنگامی که اشیاء جاوا پلتفرم کوچک به اشیاء عظیم در پشته ++C ارجاع می‌دهند، اشیاء C++ اغلب فقط زمانی قابل بازیابی می‌شوند که شی جاوا جمع‌آوری شده و برای مثال نهایی شود. در نسخه های قبلی، این پلتفرم اندازه بسیاری از اشیاء C++ مرتبط با اشیاء جاوا را تخمین زد. این تخمین همیشه دقیق نبود و گهگاه منجر به افزایش بسیار زیادی استفاده از حافظه می‌شد، زیرا پلتفرم در جمع‌آوری زباله‌ها در زمانی که باید ناکام بود.

در اندروید 10، جمع‌آورنده زباله (GC) اندازه کل پشته‌های تخصیص‌یافته توسط malloc() سیستم را ردیابی می‌کند و اطمینان می‌دهد که تخصیص‌های malloc() بزرگ همیشه در محاسبات راه‌اندازی GC لحاظ می‌شوند. برنامه‌هایی که تعداد زیادی تخصیص C++ را با اجرای جاوا در هم می‌پیچانند ممکن است در نتیجه افزایش دفعات جمع‌آوری زباله را ببینند. سایر برنامه‌ها ممکن است کاهش کمی داشته باشند.

تست و رفع اشکال

اندروید 10 شامل بهبودهای زیر برای تست و اشکال زدایی است.

بهبودهایی برای ردیابی سیستم روی دستگاه

از Android 10، می‌توانید محدودیت‌هایی را برای اندازه و مدت زمان ردیابی هنگام انجام ردیابی سیستم روی دستگاه تعیین کنید. هنگامی که هر یک از مقادیر را مشخص می کنید، سیستم یک ردیابی طولانی را انجام می دهد و به طور دوره ای بافر ردیابی را در فایل مقصد کپی می کند در حالی که ردیابی ثبت می شود. ردیابی زمانی تکمیل می‌شود که به اندازه یا مدت محدودیت‌هایی که مشخص کرده‌اید رسیدید.

از این پارامترهای اضافی برای آزمایش موارد استفاده متفاوت نسبت به آزمایش با یک ردیابی استاندارد استفاده کنید. به عنوان مثال، ممکن است یک اشکال عملکردی را تشخیص دهید که تنها پس از اجرای برنامه شما برای مدت طولانی رخ می دهد. در این مورد، می‌توانید یک ردیابی طولانی را در طول یک روز کامل ثبت کنید و سپس زمان‌بندی CPU، فعالیت دیسک، رشته‌های برنامه و سایر داده‌ها را در گزارش تجزیه و تحلیل کنید تا به شما در تعیین علت باگ کمک کند.

در اندروید 10 و بالاتر، فایل‌های ردیابی در قالبی ذخیره می‌شوند که می‌توان با Perfetto ، یک پروژه منبع باز برای ابزار دقیق و ردیابی عملکرد، باز کرد. می توانید فایل های Trace Perfetto را به فرمت Systrace تبدیل کنید .

بهبودهای TextClassifier

اندروید 10 قابلیت دسته بندی متن اضافی را در رابط TextClassifier ارائه می دهد.

تشخیص زبان

متد detectLanguage() مشابه روش‌های طبقه‌بندی موجود قبلی عمل می‌کند. یک شی TextLanguage.Request دریافت می کند و یک شی TextLanguage برمی گرداند.

اشیاء TextLanguage شامل لیستی از جفت های مرتب شده است. هر جفت شامل یک منطقه و یک امتیاز اطمینان مربوط به طبقه بندی است.

اقدامات پیشنهادی مکالمه

متد suggestConversationActions() مشابه روش‌های طبقه‌بندی موجود عمل می‌کند. یک شی ConversationActions.Request دریافت می کند و یک شی ConversationActions را برمی گرداند.

اشیاء ConversationActions شامل لیستی از اشیاء ConversationAction هستند. هر شیء ConversationAction شامل یک اقدام پیشنهادی بالقوه و امتیاز اطمینان آن است.

پاسخ‌ها/اقدامات هوشمند در اعلان‌ها

اندروید 9 قابلیت نمایش پاسخ های پیشنهادی را در یک اعلان معرفی کرد. اندروید 10 این مورد را با قابلیت گنجاندن اقدامات مبتنی بر هدف پیشنهادی گسترش می‌دهد. علاوه بر این، پلتفرم قادر است این پیشنهادات را به صورت خودکار ایجاد کند. برنامه‌ها همچنان می‌توانند پیشنهادات خود را ارائه دهند یا از پیشنهادات تولید شده توسط سیستم انصراف دهند.

API مورد استفاده برای تولید این پاسخ‌ها بخشی از TextClassifier است و همچنین مستقیماً در Android 10 در معرض توسعه‌دهندگان قرار گرفته است. لطفاً برای اطلاعات بیشتر بخش بهبودهای TextClassifier را بخوانید.

اگر برنامه شما پیشنهادات خود را ارائه دهد، پلتفرم هیچ پیشنهاد خودکار تولید نمی کند. اگر نمی‌خواهید اعلان‌های برنامه‌تان پاسخ‌ها یا اقدامات پیشنهادی را نشان دهد، می‌توانید با استفاده از setAllowGeneratedReplies() و setAllowSystemGeneratedContextualActions() از پاسخ‌ها و اقدامات تولید شده توسط سیستم انصراف دهید.

،

اندروید 10 ویژگی ها و قابلیت های فوق العاده ای را برای کاربران و توسعه دهندگان معرفی می کند. این سند آنچه را که برای توسعه دهندگان در دسترس است برجسته می کند.

برای آشنایی با APIها، گزارش تفاوت API را بخوانید یا به مرجع Android API مراجعه کنید — به دنبال APIهایی بگردید که "در سطح API 29 اضافه شده اند". همچنین حتماً تغییرات رفتاری Android 10 (برای برنامه‌هایی که سطح API 29 را هدف قرار می‌دهند و برای همه برنامه‌ها ) و همچنین تغییرات حریم خصوصی را بررسی کنید تا در مورد مناطقی که تغییرات پلتفرم ممکن است بر برنامه‌های شما تأثیر بگذارد مطلع شوید.

پیشرفت های امنیتی

اندروید 10 تعدادی از ویژگی های امنیتی را معرفی می کند که در بخش های زیر خلاصه می شود.

گفتگوهای احراز هویت بیومتریک بهبود یافته است

اندروید 10 بهبودهای زیر را برای پشتیبانی از احراز هویت بیومتریک معرفی می کند:

  • بررسی قابلیت احراز هویت بیومتریک.
  • مکانیزم بازگشتی که به کاربر اجازه می‌دهد در صورتی که نمی‌تواند با استفاده از ورودی بیومتریک خود احراز هویت کند، با استفاده از پین، الگو یا رمز عبور دستگاه خود احراز هویت کند.
  • اشاره ای که به سیستم می گوید پس از احراز هویت کاربر با استفاده از روش بیومتریک ضمنی، نیازی به تأیید کاربر نداشته باشد. برای مثال، می‌توانید به سیستم بگویید که پس از احراز هویت کاربر با استفاده از تأیید هویت، نیازی به تأیید بیشتر نیست.

کد DEX جاسازی شده را مستقیماً از APK اجرا کنید

از اندروید 10، می‌توانید به پلتفرم بگویید که کد DEX تعبیه‌شده را مستقیماً از فایل APK برنامه شما اجرا کند. این گزینه می تواند به جلوگیری از حمله کمک کند اگر مهاجمی بتواند کدهای کامپایل شده محلی روی دستگاه را دستکاری کند.

برای اطلاعات بیشتر، اجرای کد DEX جاسازی شده را مستقیماً از APK ببینید.

پشتیبانی از TLS 1.3

اندروید 10 پشتیبانی از TLS 1.3 را اضافه می کند. TLS 1.3 یک تجدید نظر اساسی در استاندارد TLS است که شامل مزایای عملکرد و امنیت افزایش یافته است. معیارهای ما نشان می‌دهد که با TLS 1.3 در مقایسه با TLS 1.2، می‌توان ارتباطات ایمن را تا 40 درصد سریع‌تر برقرار کرد.

برای جزئیات بیشتر در مورد اجرای TLS 1.3، به بخش TLS در صفحه تغییرات رفتار برای همه برنامه‌ها مراجعه کنید.

Public Conscrypt API

از اندروید 10، ارائه‌دهنده امنیت Conscrypt دارای یک API عمومی برای عملکرد TLS است.

مجموعه کلاس‌های تحت android.net.ssl ​​حاوی روش‌های ثابت برای دسترسی به عملکردی است که از APIهای عمومی javax.net.ssl ​​در دسترس نیست. نام این کلاس ها را می توان به صورت جمع کلاس javax.net.ssl ​​مربوطه استنباط کرد. برای مثال، کدی که روی نمونه‌های javax.net.ssl.SSLSocket عمل می‌کند، می‌تواند در عوض از روش‌های SSLSockets استفاده کند.

ویژگی های اتصال

اندروید 10 شامل چندین پیشرفت در ارتباط با شبکه و اتصال است.

API اتصال شبکه Wi-Fi

اندروید 10 پشتیبانی از اتصالات همتا به همتا را اضافه می کند. این ویژگی به برنامه شما امکان می‌دهد تا با استفاده از WifiNetworkSpecifier برای توصیف ویژگی‌های یک شبکه درخواستی، از کاربر بخواهد نقطه دسترسی را که دستگاه به آن متصل است تغییر دهد. اتصال همتا به همتا برای اهداف غیر ارائه شبکه، مانند پیکربندی راه‌اندازی برای دستگاه‌های ثانویه مانند Chromecast و سخت‌افزار Google Home استفاده می‌شود.

برای اطلاعات بیشتر، به API درخواست شبکه Wi-Fi برای اتصال همتا به همتا مراجعه کنید.

API پیشنهاد شبکه Wi-Fi

اندروید 10 از برنامه شما پشتیبانی می‌کند تا از کاربر بخواهد به نقطه دسترسی Wi-Fi متصل شود. شما می توانید پیشنهاداتی برای اتصال به شبکه ارائه دهید. پلتفرم در نهایت انتخاب می‌کند که کدام نقطه دسترسی را بر اساس ورودی شما و سایر برنامه‌ها بپذیرد.

برای اطلاعات بیشتر درباره این ویژگی، پیشنهاد Wi-Fi را ببینید.

پیشرفت در حالت های با کارایی بالا و کم تحرک Wi-Fi

Android 10 به شما امکان می دهد تا به مودم زیرین اشاره کنید تا تأخیر را به حداقل برساند.

Android 10 API قفل Wi-Fi را گسترش می دهد تا به طور مؤثر از حالت با کارایی بالا و حالت کم تأخیر پشتیبانی کند. Wi-Fi Save Save برای حالت با کارایی بالا و کم تأخیر غیرفعال است ، و بهینه سازی تأخیر بیشتر بسته به پشتیبانی مودم ممکن است در حالت کم تأخیر فعال شود.

حالت با تأخیر کم فقط زمانی فعال می شود که برنامه دستیابی به قفل در پیش زمینه اجرا شود و صفحه نمایش روشن باشد. حالت کم تأخیر به ویژه برای برنامه های بازی های موبایل در زمان واقعی مفید است.

جستجوی تخصصی در DNS Resolver

Android 10 با استفاده از هر دو حالت جستجوی ClearText و DNS-Over-TLS ، پشتیبانی بومی را برای جستجوی DNS تخصصی اضافه می کند. پیش از این ، Platform DNS Resolver فقط از سوابق A و AAAA پشتیبانی می کرد ، که اجازه می دهد فقط آدرس های IP مرتبط با یک نام را جستجو کنید ، اما از هیچ نوع رکوردی دیگر پشتیبانی نمی کند. DnsResolver API وضوح عمومی و ناهمزمان را ارائه می دهد و به شما امکان می دهد SRV ، NAPTR و سایر انواع ضبط را جستجو کنید. توجه داشته باشید که تجزیه پاسخ برای انجام برنامه به برنامه واگذار شده است.

برای برنامه های مبتنی بر NDK ، به android_res_nsend مراجعه کنید.

Wi-Fi Easy Connect

Android 10 شما را قادر می سازد از اتصال آسان برای ارائه اعتبار Wi-Fi به یک دستگاه همسالان استفاده کنید ، به عنوان جایگزینی از WPS که از بین رفته است. برنامه ها می توانند با استفاده از هدف ACTION_PROCESS_WIFI_EASY_CONNECT_URI ، اتصال آسان را در تنظیم و جریان خود ادغام کنند.

برای اطلاعات بیشتر در مورد این ویژگی ، به Wi-Fi Easy Connect مراجعه کنید.

Wi-Fi اتصال مستقیم API

کلاسهای API WifiP2pConfig و WifiP2pManager در Android 10 به روزرسانی دارند تا از قابلیت های ایجاد اتصال سریع به Wi-Fi مستقیم با استفاده از اطلاعات از پیش تعیین شده پشتیبانی کنند. این اطلاعات از طریق یک کانال جانبی مانند بلوتوث یا NFC به اشتراک گذاشته می شود.

نمونه کد زیر نحوه ایجاد یک گروه را با استفاده از اطلاعات از پیش تعیین شده نشان می دهد:

کاتلین

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

جاوا

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

برای پیوستن به یک گروه با استفاده از اعتبار ، manager.createGroup() با موارد زیر جایگزین کنید:

کاتلین

manager.connect(channel, config, null)

جاوا

manager.connect(channel, config, null);

بلوتوث LE Connection Cannels (COC)

Android 10 برنامه شما را قادر می سازد از اتصالات BLE COC برای انتقال جریان داده های بزرگتر بین دو دستگاه BLE استفاده کند. این رابط کاربری بلوتوث و مکانیک اتصال را برای ساده سازی اجرای آن خلاصه می کند.

ویژگی های تلفن

Android 10 شامل چندین پیشرفت مربوط به تلفن است.

با پیشرفت های کیفیت تماس بگیرید

Android 10 امکان جمع آوری اطلاعات در مورد کیفیت تماس های زیر سیستم چندرسانه ای IP (IMS) ، از جمله کیفیت به و از شبکه را در دستگاه هایی که از این ویژگی پشتیبانی می کنند ، اضافه می کند.

غربالگری و شناسه تماس گیرنده

Android 10 برنامه شما را برای شناسایی تماس های موجود در کتاب آدرس کاربر به عنوان تماس های اسپم بالقوه ، و تماس های هرزنامه ای به نمایندگی از کاربر رد می کند. اطلاعات مربوط به این تماس های مسدود شده به عنوان تماس های مسدود شده در ورود به سیستم ، برای ارائه شفافیت بیشتر به کاربر در هنگام تماس تلفنی وارد می شود. استفاده از این API نیاز به به دست آوردن مجوزهای READ_CALL_LOG از کاربر را برای ارائه غربالگری تماس و عملکرد شناسه تماس گیرنده از بین می برد.

با API سرویس تغییر مسیر تماس بگیرید

Android 10 نحوه برخورد با اهداف تماس را تغییر می دهد. پخش NEW_OUTGOING_CALL مستهلک می شود و با API CallRedirectionService جایگزین می شود. API CallRedirectionService رابط هایی را برای شما فراهم می کند تا تماس های خروجی انجام شده توسط پلت فرم Android را تغییر دهید. به عنوان مثال ، برنامه های شخص ثالث ممکن است تماس ها را لغو کرده و آنها را از طریق VoIP دوباره تغییر دهند.

پیشرفت در ایجاد پرونده ها در ذخیره سازی خارجی

علاوه بر معرفی ذخیره سازی Scoped ، Android 10 قابلیت های زیر را در رابطه با ذخیره سازی خارجی اضافه می کند:

رسانه و گرافیک

Android 10 ویژگی های جدید رسانه ها و گرافیک ها و API های زیر را معرفی می کند:

به اشتراک گذاری ورودی صوتی

Android 10 توانایی دو برنامه را برای به اشتراک گذاشتن ورودی صوتی به طور همزمان اضافه می کند. برای کسب اطلاعات کامل ، به اشتراک گذاری ورودی صوتی مراجعه کنید.

ضبط پخش صوتی

Android 10 به یک برنامه امکان ضبط پخش صوتی از سایر برنامه ها را می دهد. برای اطلاعات کامل ، به ضبط پخش مراجعه کنید.

در اعلان های MediaStyle Seekbar

با شروع با Android 10 ، اعلان های MediaStyle یک نوار جستجو را نشان می دهند. Seekbar پیشرفت پخش را از PlaybackState.getPosition() نشان می دهد ، و در بعضی موارد از Seekar می توان برای جستجوی مکانی در برنامه بازی استفاده کرد. ظاهر و رفتار Seekbar توسط این قوانین کنترل می شود:

  • اگر یک MediaSession فعال وجود داشته باشد و مدت زمان آن (مشخص شده توسط MediaMetadata.METADATA_KEY_DURATION ) بیشتر از صفر است. این بدان معنی است که نوار برای جریان های نامشخص مانند پخش مستقیم و پخش رادیو ظاهر نمی شود.
  • اگر جلسه ACTION_SEEK_TO را پیاده سازی کند ، کاربر می تواند نوار جستجو را برای کنترل مکان پخش بکشد.

API بومی MIDI

Android بومی API MIDI (AMIDI) به توسعه دهندگان برنامه امکان ارسال و دریافت داده های MIDI را با کد C/C ++ می دهد ، و با منطق صوتی/کنترل C/C ++ خود و به حداقل رساندن نیاز به JNI ادغام می شوند.

برای اطلاعات بیشتر ، به Antroid Native MIDI API مراجعه کنید.

پیشرفت های MediaCodecinfo

Android 10 روش هایی را به MediaCodecInfo اضافه می کند که اطلاعات بیشتری در مورد کدک را نشان می دهد.

برای اطلاعات بیشتر ، به کد های رسانه ای مراجعه کنید.

API حرارتی

هنگامی که دستگاه ها خیلی گرم می شوند ، ممکن است CPU و/یا GPU را کنترل کنند و این می تواند به روش های غیر منتظره بر برنامه ها و بازی ها تأثیر بگذارد. برنامه هایی که با استفاده از گرافیک های پیچیده ، محاسبات سنگین یا فعالیت پایدار شبکه به احتمال زیاد به وجود می آیند ، و این موارد می توانند بر اساس فرکانس های چیپست و اصلی ، سطح ادغام و همچنین بسته بندی دستگاه و فاکتور شکل متفاوت باشند.

در Android 10 ، برنامه ها و بازی ها می توانند از یک API حرارتی برای نظارت بر تغییرات در دستگاه استفاده کنند و برای حفظ مصرف انرژی کمتری برای بازگرداندن دمای طبیعی اقدام کنند. برنامه ها یک شنونده را در PowerManager ثبت می کنند ، که از طریق آن سیستم از وضعیت حرارتی مداوم از نور و متوسط ​​تا شدید ، بحرانی ، اضطراری و خاموش خبر می دهد.

هنگامی که دستگاه استرس حرارتی را گزارش می کند ، برنامه ها و بازی ها می توانند با حمایت از فعالیت های مداوم برای کاهش مصرف انرژی به روش های مختلف کمک کنند. به عنوان مثال ، برنامه های جریان می توانند با وضوح/نرخ بیت یا ترافیک شبکه را کاهش دهند ، یک برنامه دوربین می تواند فلش یا تقویت تصویر فشرده را غیرفعال کند ، یک بازی می تواند نرخ فریم یا تسویه حساب چند ضلعی را کاهش دهد ، یک برنامه رسانه ای می تواند حجم بلندگو را کاهش دهد و یک برنامه نقشه می تواند تبدیل شود خاموش GPS.

API حرارتی به یک دستگاه جدید HAL نیاز دارد-در حال حاضر در دستگاه های پیکسل که Android 10 را اجرا می کند پشتیبانی می شود و ما با شرکای سازنده دستگاه خود کار می کنیم تا در اسرع وقت پشتیبانی گسترده ای از اکوسیستم داشته باشیم.

دوربین و تصاویر

Android 10 ویژگی های جدید دوربین و تصویر زیر را معرفی می کند:

پشتیبانی دوربین تک رنگ

Android 9 (API سطح 28) برای اولین بار قابلیت دوربین تک رنگ را معرفی کرد. Android 10 چندین پیشرفت را به پشتیبانی دوربین تک رنگ اضافه می کند:

  • پشتیبانی از فرمت جریان Y8 برای بهبود راندمان حافظه.
  • پشتیبانی از ضبط DNG خام تک رنگ.
  • معرفی شمارش های مونو و NIR CFA برای تمایز بین دوربین تک رنگ معمولی و دوربین های مادون قرمز نزدیک.

شما ممکن است از این ویژگی برای ضبط یک تصویر تک رنگ بومی استفاده کنید. یک دستگاه چند دوربین منطقی ممکن است از یک دوربین تک رنگ به عنوان یک دوربین فرعی فیزیکی برای دستیابی به کیفیت تصویر کم نور استفاده کند.

قالب عمق پویا

با شروع در Android 10 ، دوربین ها می توانند با استفاده از یک طرحواره جدید به نام فرمت عمق پویا (DDF) ، داده های عمق را برای یک تصویر در یک فایل جداگانه ذخیره کنند. برنامه ها می توانند هم از تصویر JPG و هم ابرداده عمق آن درخواست کنند ، با استفاده از این اطلاعات برای استفاده از هرگونه تاری در پس از پردازش بدون تغییر داده های تصویر اصلی استفاده می کنند.

برای خواندن مشخصات این قالب ، به فرمت عمق پویا مراجعه کنید.

قالب فایل تصویر با راندمان بالا

فرمت فایل تصویر با راندمان بالا (HEIF) یک قالب استاندارد تصویر و ویدیویی است که رمزگذاری با کیفیت بالاتر و اندازه پرونده کوچکتر را در مقایسه با سایر قالب های فایل معرفی می کند.

برای اطلاعات بیشتر در مورد قالب پرونده ، به HEIC مراجعه کنید.

پیشرفت در چند دوربین

Android 10 فیوز کردن چندین دوربین را به یک دوربین منطقی واحد ، ویژگی معرفی شده در Android 9 (API سطح 28) بهبود می بخشد. موارد زیر به API Camera2 اضافه شد:

  • isSessionConfigurationSupported(SessionConfiguration sessionConfig) - شما را قادر می سازد تا از پیکربندی جلسه عبور شده برای ایجاد یک جلسه ضبط دوربین استفاده کنید یا خیر.

  • LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID - شما را برای تعیین شناسه دوربین فیزیکی فعال که از یک دستگاه دوربین منطقی پشتیبانی می کند ، می دهد. برای دستیابی به راندمان بهتر انرژی می توانید از شناسه های برگشتی برای درخواست جریان های منطقی و جریان های فرعی فیزیکی استفاده کنید.

خدمات دسترسی API

Android 10 ویژگی های خدمات دسترسی جدید و API های زیر را معرفی می کند:

پرچم کلید ورودی دسترسی nodeinfo

از نظر Android 10 ، می توانید با isTextEntryKey() تماس بگیرید تا مشخص شود که آیا یک AccessibilityNodeInfo داده شده ، یک کلید ورودی متن را نشان می دهد که بخشی از صفحه کلید یا صفحه کلید است.

گفتگوی قابل دسترسی بازخورد گفتاری

در صورتی که کاربران برای شروع یک سرویس دسترسی نیاز به انجام میانبر دسترسی داشته باشند ، Android 10 اجازه می دهد تا در صورت درخواست سرویس ، گفتگو با یک متن به گفتار همراه باشد.

میانبر دسترسی هنگامی که ناوبری ژست فعال شد

هنگامی که ویژگی Navigation Gesture در Android 10 فعال می شود ، دکمه دسترسی قابل مشاهده یا انتخاب نیست. برای دسترسی به منوی خدمات دسترسی ، کاربران باید یکی از حرکات زیر را انجام دهند:

  • کشیدن دو انگشت.
  • دو انگشت را به سمت بالا و نگه دارید.

میانبر دسترسی برای صفحه کلیدهای فیزیکی

در Android 10 ، کاربران می توانند با فشار دادن Control+Alt+Z ، میانبر دسترسی را روی یک صفحه کلید فیزیکی ایجاد کنند.

تقویت کنترلر صفحه کلید نرم

در Android 10 ، سرویس های دسترسی می توانند از صفحه کلید نرم حتی در صورت شناسایی دستگاه صفحه کلید سخت وصل شده ، درخواست کنند. کاربران می توانند این رفتار را نادیده بگیرند.

مدت زمان دسترسی به تعریف کاربر

Android 10 API getRecommendedTimeoutMillis() معرفی می کند. این روش پشتیبانی از زمان های تعریف شده توسط کاربر را برای عناصر UI تعاملی و غیر تعاملی فراهم می کند. مقدار بازده تحت تأثیر تنظیمات تنظیمات کاربر و API خدمات دسترسی است.

پیشرفت های خودکار

Android 10 حاوی پیشرفت های زیر در سرویس Autofill است.

درخواست های خودکار مربوط به سازگاری

می توانید از پرچم FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST استفاده کنید تا تعیین کنید که آیا درخواست خودکار از طریق حالت سازگاری ایجاد شده است یا خیر.

نام کاربری و رمز عبور را همزمان ذخیره کنید

شما می توانید مواردی را پشتیبانی کنید که یک برنامه از چندین فعالیت برای نمایش نام کاربری ، رمز عبور و سایر زمینه ها با استفاده از پرچم SaveInfo.FLAG_DELAY_SAVE استفاده کند.

تعامل کاربر با UI ذخیره

می توانید با تنظیم یک شنونده اکشن در گفتگو و تغییر دید از نمای از راه دور مربوطه ، یک قسمت رمز عبور را در یک گفتگوی ذخیره نشان دهید و مخفی کنید.

پشتیبانی از به روزرسانی مجموعه داده ها

Autofill می تواند رمزهای عبور موجود را به روز کند. به عنوان مثال ، اگر کاربر قبلاً رمز عبور را ذخیره کرده است ، و رمز عبور جدید را ذخیره می کند ، Autofill کاربر را ترغیب می کند تا به جای ذخیره یک نسخه جدید ، رمز عبور موجود را به روز کند.

پیشرفت طبقه بندی میدانی

Android 10 شامل پیشرفت های زیر در API طبقه بندی میدانی است.

سازنده userdata.builder

سازنده UserData.Builder برای تراز بهتر با الگوی Builder تغییر کرده است.

اجازه دهید یک مقدار در انواع مختلفی از شناسه های دسته بندی نقشه برداری شود

هنگام استفاده از UserData.Builder در Android 10 ، اکنون می توانید یک مقدار را برای انواع مختلفی از شناسه های دسته بندی نقشه برداری کنید. در نسخه های قبلی ، اگر یک مقدار بیش از یک بار اضافه شود ، یک استثنا پرتاب می شود.

پشتیبانی بهبود یافته از شماره کارت های اعتباری

طبقه بندی میدانی هم اکنون می تواند شماره های چهار رقمی را به عنوان چهار رقم آخر شماره کارت اعتباری تشخیص دهد.

پشتیبانی از طبقه بندی میدانی خاص برنامه

Android 10 FillResponse.setUserData() را اضافه می کند ، که به شما امکان می دهد داده های کاربر خاص برنامه را برای مدت زمان جلسه تنظیم کنید. این به سرویس Autofill کمک می کند تا انواع مختلفی را برای زمینه هایی با محتوای خاص برنامه تشخیص دهد.

کنترل UI و سیستم

Android 10 پیشرفت های درون کاربر زیر را ارائه می دهد:

پشتیبانی از کلاه های jvmti popframe

Android 10 پشتیبانی از قابلیت can_pop_frames را در اجرای Android JVMTI اضافه می کند. هنگام اشکال زدایی ، این ویژگی به شما امکان می دهد تا بعد از مکث در یک نقطه شکست و تنظیم افراد محلی ، گلوبال یا اجرای یک عملکرد ، توابع را دوباره انجام دهید. برای اطلاعات بیشتر ، به صفحه مرجع پاپ فریم اوراکل مراجعه کنید.

API کنترل سطح

Android 10 یک API SurfaceControl برای دسترسی سطح پایین به سیستم عامل سیستم ( SurfaceFlinger ) فراهم می کند. برای اکثر کاربران ، SurfaceView روش صحیحی برای استفاده از آهنگساز است. API SurfaceControl در موارد خاص می تواند مفید باشد ، به عنوان مثال:

  • هماهنگ سازی چندین سطوح
  • تعبیه سطح فرآیند متقابل
  • مدیریت طول عمر پایین

API SurfaceControl در هر دو اتصال SDK و NDK در دسترس است. اجرای NDK شامل یک API برای تبادل دستی بافر با آهنگساز است. این گزینه جایگزینی برای کاربرانی که در برابر محدودیت های BufferQueue قرار دارند ، فراهم می کند.

WebView DETECTION RENDERER

Android 10 کلاس انتزاعی WebViewRenderProcessClient را معرفی می کند ، که برنامه ها می توانند از آن استفاده کنند تا در صورت عدم پاسخگو بودن یک WebView ، از آن استفاده کنند. برای استفاده از این کلاس:

  1. زیر کلاس خود را تعریف کرده و روشهای onRenderProcessResponsive() و onRenderProcessUnresponsive() را پیاده سازی کنید.
  2. نمونه ای از WebViewRenderProcessClient خود را به یک یا چند شیء WebView وصل کنید.
  3. اگر WebView بی پاسخ باشد ، این سیستم با استفاده از روش onRenderProcessUnresponsive() مشتری تماس می گیرد و از WebView و WebViewRenderProcess عبور می کند. (اگر WebView تک پردازش باشد ، پارامتر WebViewRenderProcess تهی است.) برنامه شما می تواند اقدامات مناسب را انجام دهد ، مانند نشان دادن کادر گفتگو به کاربر که می خواهد روند ارائه را متوقف کند.

اگر WebView بی پاسخ باقی بماند ، سیستم به صورت دوره ای از onRenderProcessUnresponsive() تماس می گیرد (بیش از یک بار در هر پنج ثانیه) ، اما هیچ اقدام دیگری انجام نمی دهد. اگر WebView دوباره پاسخگو باشد ، این سیستم فقط یک بار onRenderProcessResponsive() تماس می گیرد.

تابلوهای تنظیمات

Android 10 پانل های تنظیمات را معرفی می کند ، یک API که به برنامه ها امکان می دهد تنظیمات را در زمینه برنامه خود به کاربران نشان دهند. این امر باعث می شود تا کاربران برای تغییر مواردی مانند NFC یا داده های موبایل به منظور استفاده از برنامه ، به تنظیمات نیاز داشته باشند.

شکل 1. کاربر سعی می کند در حالی که دستگاه به شبکه وصل نشده است ، یک صفحه وب را باز کند. Chrome پانل تنظیمات اتصال اینترنت را ظاهر می کند ...

شکل 2. کاربر می تواند Wi-Fi را روشن کرده و بدون ترک برنامه Chrome یک شبکه را انتخاب کند.

به عنوان مثال ، فرض کنید کاربر در حالی که دستگاه آنها در حالت هواپیما است ، مرورگر وب را باز می کند. قبل از Android 10 ، برنامه فقط می تواند یک پیام عمومی را نشان دهد که از کاربر بخواهد تنظیمات را باز کند تا اتصال را بازیابی کند. با استفاده از Android 10 ، برنامه مرورگر می تواند یک پنل درون خطی را نشان دهد که تنظیمات اتصال کلیدی مانند حالت هواپیما ، Wi-Fi (از جمله شبکه های اطراف) و داده های تلفن همراه را نشان می دهد. با استفاده از این پانل ، کاربران می توانند بدون ترک برنامه ، اتصال را بازیابی کنند.

برای نمایش پانل تنظیمات ، قصد با یکی از Settings.Panel زیر را آتش بزنید.

کاتلین

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

جاوا

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type می تواند یکی از موارد زیر باشد:

ACTION_INTERNET_CONNECTIVITY
تنظیمات مربوط به اتصال به اینترنت ، مانند حالت هواپیما ، Wi-Fi و داده های تلفن همراه را نشان می دهد.
ACTION_WIFI
تنظیمات Wi-Fi را نشان می دهد ، اما تنظیمات اتصال دیگر نیست . این برای برنامه هایی که برای انجام بارگذاری یا بارگیری های بزرگ به اتصال Wi-Fi نیاز دارند ، مفید است.
ACTION_NFC
تمام تنظیمات مربوط به ارتباطات نزدیک به میدان (NFC) را نشان می دهد.
ACTION_VOLUME
تنظیمات حجم را برای همه جریان های صوتی نشان می دهد.

به اشتراک گذاری پیشرفت

Android 10 چندین پیشرفت در اشتراک گذاری ارائه می دهد:

به اشتراک گذاری میانبر API

API میانبر اشتراک گذاری جایگزین API های سهم مستقیم می شود.

به جای بازیابی نتایج واکنشی در صورت تقاضا ، API میانبر به اشتراک گذاری اجازه می دهد برنامه ها اهداف سهم مستقیم را از قبل منتشر کنند. اینگونه است که ShortcutManager کار می کند. از آنجا که این دو API مشابه هستند ، ما API ShortcutInfo را گسترش داده ایم تا با استفاده از هر دو ویژگی آسانتر شود. با API میانبرهای اشتراک گذاری ، می توانید به طور مستقیم دسته یا افراد را به هدف اشتراک اختصاص دهید. اهداف اشتراک در سیستم تا زمانی که همان برنامه آنها را به روز کند یا برنامه حذف نشده باشد ، در سیستم ادامه می یابد.

مکانیسم سهم مستقیم قدیمی هنوز هم کار می کند ، اما برنامه هایی که از آن استفاده می کنند از اولویت پایین تر از برنامه ها با استفاده از API میانبر اشتراک گذاری برخوردار هستند.

ShortcutInfo.Builder روش هایی را برای ارائه اطلاعات اضافی در مورد هدف سهم اضافه و تقویت می کند.

اهداف سهم مستقیم

می توانید یک میانبر پویا را به عنوان یک هدف سهم مستقیم منتشر کنید. به انتشار اهداف اشتراک مستقیم مراجعه کنید.

ShortcutManagerCompat یک Androidx API جدید است که سازگاری به عقب با API قدیمی DirectShare را فراهم می کند. این روش ارجح برای انتشار اهداف اشتراک است.

متن پیش نمایش

هنگامی که یک برنامه محتوای متن را به اشتراک می گذارد ، می تواند پیش نمایش اختیاری از محتوا را در UI Sharesheet نشان دهد.

به اضافه کردن پیش نمایش متن غنی مراجعه کنید

بیشتر بدانید

برای کسب اطلاعات بیشتر در مورد چگونگی به اشتراک گذاری برنامه ها ، به ارسال داده های ساده به برنامه های دیگر و دریافت داده های ساده از برنامه های دیگر مراجعه کنید

تم تاریک

Android 10 یک موضوع تاریک را ارائه می دهد که هم در مورد UI سیستم Android و هم برنامه هایی که روی دستگاه اجرا می شوند ، صدق می کند. برای اطلاعات کامل ، به موضوع تاریک مراجعه کنید.

انواع خدمات پیش زمینه

Android 10 ویژگی foregroundServiceType XML را معرفی می کند ، که شما در تعریف چندین سرویس خاص درج می کنید. این امکان وجود دارد که به ندرت مناسب باشد ، می توان چندین نوع سرویس پیش زمینه را به یک سرویس خاص اختصاص داد.

در جدول زیر انواع مختلف خدمات پیش زمینه و خدماتی که در آن مناسب است برای اعلام یک نوع خاص را نشان می دهد:

نوع سرویس پیش زمینه به عنوان مثال از پرونده برای خدماتی که باید این نوع را اعلام کند استفاده کنید
connectedDevice یک ردیاب تناسب اندام پوشیدنی را کنترل کنید
dataSync بارگیری پرونده ها از یک شبکه
location یک اقدام مبتنی بر کاربر را ادامه دهید
mediaPlayback یک کتاب صوتی ، پادکست یا موسیقی پخش کنید
mediaProjection یک ویدیویی از صفحه نمایش دستگاه را در مدت زمان کوتاهی ضبط کنید
phoneCall تماس تلفنی مداوم را انجام دهید

کاتلین

Android 10 شامل به روزرسانی های زیر برای توسعه کوتلین است.

حاشیه نویسی های تهی برای API های libcore

Android 10 پوشش حاشیه نویسی های تهی در SDK برای API های Libcore را بهبود می بخشد. این حاشیه نویسی ها توسعه دهندگان برنامه ای را که از Kotlin یا Java Nullability Analysis در اندروید استودیو استفاده می کنند ، فعال می کنند تا هنگام تعامل با این API ها ، اطلاعات تهی را بدست آورند.

به طور معمول ، نقض قرارداد تهی در کوتلین منجر به خطاهای تدوین می شود. برای اطمینان از سازگاری با کد موجود خود ، فقط حاشیه نویسی @RecentlyNullable و @RecentlyNonNull اضافه می شود. این بدان معناست که نقض نقص قابلیت هشدارها به جای خطا منجر به هشدارها می شود.

علاوه بر این ، هر گونه حاشیه نویسی @RecentlyNullable یا @RecentlyNonNull که در Android 9 اضافه شده است به ترتیب به @Nullable و @NonNull تغییر می کنند. این بدان معنی است که ، در اندروید 10 و بالاتر ، تخلفات باطل به جای هشدارها منجر به خطا می شود.

برای کسب اطلاعات بیشتر در مورد تغییرات حاشیه نویسی ، به Android Pie SDK اکنون در وبلاگ Android Developers دوستانه تر Kotlin است .

NDK

Android 10 شامل تغییرات NDK زیر است.

اشکال زدایی بهبود یافته مالکیت توصیف کننده پرونده

Android 10 FDSAN را اضافه می کند ، که به شما کمک می کند تا راحت تر مسائل مربوط به مالکیت توصیف کننده پرونده را پیدا کنید و رفع کنید.

اشکالات مربوط به سوءاستفاده از مالکیت توصیف کننده پرونده ، که تمایل به آشکار شدن به عنوان استفاده-پس از نزدیک و دوتایی دارند ، مشابه با استفاده از تخصیص حافظه استفاده از اشکالات بدون استفاده از پس از و دوتایی هستند ، اما تشخیص بسیار دشوارتر است و رفع FDSAN تلاش می کند تا با اجرای مالکیت توصیف کننده پرونده ، از سوء مدیریت توصیف کننده پرونده جلوگیری کند.

برای کسب اطلاعات بیشتر در مورد تصادفات مربوط به این موارد ، به خطایی که توسط FDSAN شناسایی شده است مراجعه کنید. برای اطلاعات بیشتر در مورد FDSAN ، به صفحه Googlesource در FDSAN مراجعه کنید.

ELF TLS

برنامه های ساخته شده با استفاده از NDK با حداقل سطح API سطح 29 می توانند به جای emutls از ELF TLS استفاده کنند. پشتیبانی از اتصال دهنده پویا و استاتیک برای پشتیبانی از این روش استفاده از متغیرهای محلی-محلی اضافه شده است.

برای برنامه های ساخته شده برای سطح 28 و پایین API ، پیشرفت هایی برای libgcc/compiler-rt برای کار در مورد برخی از مسائل emutls انجام شده است.

برای اطلاعات بیشتر ، به تغییرات Android برای توسعه دهندگان NDK مراجعه کنید.

زمان اجرا

Android 10 شامل تغییر زمان زیر است.

مجموعه زباله های مبتنی بر Mallinfo تحریک

هنگامی که اشیاء جاوا پلت فرم کوچک به اشیاء عظیمی در پشته C ++ اشاره می کنند ، اشیاء C ++ اغلب می توانند فقط در صورت جمع آوری شی جاوا و به عنوان مثال نهایی شوند. در نسخه های قبلی ، این پلتفرم اندازه بسیاری از اشیاء C ++ مرتبط با اشیاء جاوا را تخمین زده است. این تخمین همیشه دقیق نبوده و گاهی اوقات منجر به افزایش میزان استفاده از حافظه می شد ، زیرا این سکوی در صورت لزوم نتوانست زباله ها را جمع کند.

در Android 10 ، جمع کننده زباله (GC) اندازه کل پشته اختصاص داده شده توسط سیستم malloc() را ردیابی می کند ، و اطمینان می دهد که تخصیص بزرگ malloc() همیشه در محاسبات ناشی از GC گنجانده شده است. برنامه هایی که تعداد زیادی از تخصیص C ++ با اجرای جاوا را در هم می آمیزند ، ممکن است در نتیجه شاهد افزایش فرکانس جمع آوری زباله باشند. برنامه های دیگر ممکن است شاهد کاهش اندک باشند.

آزمایش و اشکال زدایی

Android 10 شامل پیشرفت های زیر برای آزمایش و اشکال زدایی است.

پیشرفت برای ردیابی سیستم در دستگاه

در مورد Android 10 ، می توانید هنگام انجام اثری از سیستم روی دستگاه ، محدودیت هایی را برای اندازه و مدت زمان اثری مشخص کنید. هنگامی که هر دو مقدار را مشخص می کنید ، سیستم اثری طولانی را انجام می دهد ، در حالی که ردیابی ضبط می شود ، به طور دوره ای بافر ردیابی را در پرونده مقصد کپی می کند. ردیابی هنگامی که اندازه یا مدت زمان مشخص شده مشخص شده است ، تکمیل می شود.

از این پارامترهای اضافی برای آزمایش موارد استفاده متفاوت از آنچه که با یک ردیابی استاندارد آزمایش می کنید استفاده کنید. به عنوان مثال ، شما ممکن است در حال تشخیص یک اشکال عملکردی باشید که فقط پس از اجرای برنامه شما برای مدت طولانی اتفاق می افتد. در این حالت ، شما می توانید اثری طولانی را طی یک روز کامل ضبط کنید ، و سپس برنامه ریزی کننده CPU ، فعالیت دیسک ، موضوعات برنامه و سایر داده های موجود در گزارش را تجزیه و تحلیل کنید تا به شما در تعیین علت اشکال کمک کند.

در Android 10 و بالاتر ، پرونده های ردیابی در فرمی ذخیره می شوند که می تواند با Perfetto باز شود ، یک پروژه منبع باز برای ابزار دقیق و ردیابی. می توانید فایلهای Perfetto Trace را به قالب Systrace تبدیل کنید .

پیشرفت های طبقه بندی متن

Android 10 عملکرد طبقه بندی متن اضافی را در رابط TextClassifier ارائه می دهد.

تشخیص زبان

روش detectLanguage() به طور مشابه با روش های طبقه بندی قبلاً موجود کار می کند. این یک شیء TextLanguage.Request را دریافت می کند و یک شیء TextLanguage برمی گرداند.

اشیاء TextLanguage شامل لیستی از جفت های مرتب شده است. هر جفت شامل یک مکان محلی و یک امتیاز اطمینان مربوط به طبقه بندی است.

اقدامات مکالمه پیشنهادی

روش suggestConversationActions() به طور مشابه با روش های طبقه بندی موجود کار می کند. این یک شیء ConversationActions.Request ConversationActions می کند.

اشیاء ConversationActions شامل لیستی از اشیاء ConversationAction است. هر شیء ConversationAction شامل یک عمل پتانسیل پیشنهادی و نمره اعتماد به نفس آن است.

پاسخ ها/اقدامات هوشمند در اعلان ها

Android 9 توانایی نمایش پاسخ های پیشنهادی را در یک اعلان معرفی کرد. Android 10 با توانایی شامل اقدامات پیشنهادی مبتنی بر قصد ، این موضوع را گسترش می دهد. علاوه بر این ، این پلتفرم قادر به تولید این پیشنهادات به صورت خودکار است. برنامه ها هنوز هم می توانند پیشنهادات خاص خود را ارائه دهند یا از پیشنهادات تولید شده سیستم خودداری کنند.

API مورد استفاده برای تولید این پاسخ ها بخشی از TextClassifier است و همچنین مستقیماً در Android 10 در معرض توسعه دهنده ها قرار گرفته است. لطفاً برای اطلاعات بیشتر بخش را در مورد پیشرفت های طبقه بندی TextClassifer بخوانید.

اگر برنامه شما پیشنهادات خاص خود را ارائه می دهد ، این پلتفرم هیچ پیشنهاد خودکار ایجاد نمی کند. اگر نمی خواهید اعلان های برنامه شما هرگونه پاسخ یا اقدامات پیشنهادی را به نمایش بگذارد ، می توانید با استفاده از setAllowGeneratedReplies() و setAllowSystemGeneratedContextualActions() از پاسخ ها و اقدامات تولید شده خودداری کنید.

،

Android 10 ویژگی ها و قابلیت های عالی را برای کاربران و توسعه دهندگان معرفی می کند. این سند آنچه را که برای توسعه دهندگان در دسترس است ، برجسته می کند.

برای کسب اطلاعات در مورد API ها ، گزارش API Diff را بخوانید یا از مرجع API Android بازدید کنید - به دنبال API هایی باشید که "در سطح 29 API اضافه شده اند". همچنین حتماً تغییرات رفتاری Android 10 را بررسی کنید (برای برنامه هایی که API سطح 29 و برای همه برنامه ها را هدف قرار می دهند) و همچنین تغییرات حریم خصوصی ، برای یادگیری مناطقی که ممکن است تغییرات پلت فرم ممکن است بر برنامه های شما تأثیر بگذارد.

پیشرفت های امنیتی

Android 10 تعدادی از ویژگی های امنیتی را معرفی می کند ، که بخش های زیر خلاصه می شود.

گفتگوی احراز هویت بیومتریک بهبود یافته

Android 10 پیشرفت های زیر را به پشتیبانی احراز هویت بیومتریک معرفی می کند:

  • بررسی قابلیت احراز هویت بیومتریک.
  • مکانیسم سقوط که به کاربر امکان می دهد با استفاده از پین ، الگوی یا رمز عبور خود ، در صورت عدم امکان تأیید اعتبار با استفاده از ورودی بیومتریک خود ، تأیید اعتبار کند.
  • اشاره ای که به سیستم می گوید پس از تأیید اعتبار کاربر با استفاده از یک روش بیومتریک ضمنی ، به تأیید کاربر نیاز ندارد. به عنوان مثال ، می توانید به سیستم بگویید که پس از تأیید اعتبار کاربر با استفاده از احراز هویت چهره ، هیچ تأیید دیگری لازم نیست.

کد DEX تعبیه شده را مستقیماً از APK اجرا کنید

از Android 10 ، می توانید به این پلتفرم بگویید که کد DEX تعبیه شده را مستقیماً از پرونده APK برنامه خود اجرا کنید. این گزینه می تواند به جلوگیری از حمله کمک کند اگر یک مهاجم تا به حال موفق به دستکاری کد محلی کامپایل شده در دستگاه شود.

برای اطلاعات بیشتر ، به Run Code Dex Code مستقیماً از APK مراجعه کنید.

پشتیبانی TLS 1.3

Android 10 پشتیبانی از TLS 1.3 را اضافه می کند. TLS 1.3 یک تجدید نظر در استاندارد TLS است که شامل مزایای عملکرد و امنیت پیشرفته است. معیارهای ما نشان می دهد که اتصالات ایمن می تواند به اندازه 40 ٪ سریعتر با TLS 1.3 در مقایسه با TLS 1.2 برقرار شود.

برای اطلاعات بیشتر در مورد اجرای TLS 1.3 ، به بخش TLS در صفحه تغییر رفتار برای همه برنامه ها مراجعه کنید.

API وجدان عمومی

از نظر Android 10 ، ارائه دهنده امنیت وجدان شامل یک API عمومی برای عملکرد TLS است.

مجموعه کلاسهای تحت android.net.ssl ​​حاوی روشهای استاتیک برای دسترسی به عملکردی است که از API های عمومی javax.net.ssl ​​در دسترس نیست. نام این کلاس ها را می توان به عنوان جمع کلاس javax.net.ssl ​​مربوطه استنباط کرد. به عنوان مثال ، کدی که در موارد javax.net.ssl.SSLSocket کار می کند می تواند در عوض از روشهای SSLSockets استفاده کند.

ویژگی های اتصال

Android 10 شامل چندین پیشرفت مربوط به شبکه و اتصال است.

API اتصال شبکه Wi-Fi

Android 10 پشتیبانی از اتصالات همتا را اضافه می کند. این ویژگی برنامه شما را قادر می سازد تا کاربر را با استفاده از WifiNetworkSpecifier برای توصیف خصوصیات یک شبکه درخواست شده ، نقطه دسترسی را که دستگاه به آن متصل شده است تغییر دهد. از اتصال همتا برای اهداف غیر شبکه ای استفاده می شود ، مانند پیکربندی bootstrapping برای دستگاه های ثانویه مانند Chromecast و Google Home Hardware.

برای اطلاعات بیشتر ، به API درخواست شبکه Wi-Fi برای اتصال همتا به همسالان مراجعه کنید.

API پیشنهاد شبکه Wi-Fi

Android 10 پشتیبانی از برنامه شما را اضافه می کند تا کاربر را به اتصال به یک نقطه دسترسی Wi-Fi سوق دهد. شما می توانید پیشنهاداتی را برای اتصال به کدام شبکه ارائه دهید. این پلتفرم در نهایت انتخاب می کند که کدام نقطه دسترسی را بر اساس ورودی از برنامه های شما و سایر برنامه ها بپذیرد.

برای اطلاعات بیشتر در مورد این ویژگی ، به Wi-Fi پیشنهاد دهید.

پیشرفت در حالت های با کارایی بالا و کم تحرک Wi-Fi

Android 10 به شما امکان می دهد تا به مودم زیرین اشاره کنید تا تأخیر را به حداقل برساند.

Android 10 API قفل Wi-Fi را گسترش می دهد تا به طور مؤثر از حالت با کارایی بالا و حالت کم تأخیر پشتیبانی کند. Wi-Fi Save Save برای حالت با کارایی بالا و کم تأخیر غیرفعال است ، و بهینه سازی تأخیر بیشتر بسته به پشتیبانی مودم ممکن است در حالت کم تأخیر فعال شود.

حالت با تأخیر کم فقط زمانی فعال می شود که برنامه دستیابی به قفل در پیش زمینه اجرا شود و صفحه نمایش روشن باشد. حالت کم تأخیر به ویژه برای برنامه های بازی های موبایل در زمان واقعی مفید است.

جستجوی تخصصی در DNS Resolver

Android 10 با استفاده از هر دو حالت جستجوی ClearText و DNS-Over-TLS ، پشتیبانی بومی را برای جستجوی DNS تخصصی اضافه می کند. پیش از این ، Platform DNS Resolver فقط از سوابق A و AAAA پشتیبانی می کرد ، که اجازه می دهد فقط آدرس های IP مرتبط با یک نام را جستجو کنید ، اما از هیچ نوع رکوردی دیگر پشتیبانی نمی کند. DnsResolver API وضوح عمومی و ناهمزمان را ارائه می دهد و به شما امکان می دهد SRV ، NAPTR و سایر انواع ضبط را جستجو کنید. توجه داشته باشید که تجزیه پاسخ برای انجام برنامه به برنامه واگذار شده است.

برای برنامه های مبتنی بر NDK ، به android_res_nsend مراجعه کنید.

Wi-Fi Easy Connect

Android 10 شما را قادر می سازد از اتصال آسان برای ارائه اعتبار Wi-Fi به یک دستگاه همسالان استفاده کنید ، به عنوان جایگزینی از WPS که از بین رفته است. برنامه ها می توانند با استفاده از هدف ACTION_PROCESS_WIFI_EASY_CONNECT_URI ، اتصال آسان را در تنظیم و جریان خود ادغام کنند.

برای اطلاعات بیشتر در مورد این ویژگی ، به Wi-Fi Easy Connect مراجعه کنید.

Wi-Fi اتصال مستقیم API

کلاسهای API WifiP2pConfig و WifiP2pManager در Android 10 به روزرسانی دارند تا از قابلیت های ایجاد اتصال سریع به Wi-Fi مستقیم با استفاده از اطلاعات از پیش تعیین شده پشتیبانی کنند. این اطلاعات از طریق یک کانال جانبی مانند بلوتوث یا NFC به اشتراک گذاشته می شود.

نمونه کد زیر نحوه ایجاد یک گروه را با استفاده از اطلاعات از پیش تعیین شده نشان می دهد:

کاتلین

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

جاوا

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

برای پیوستن به یک گروه با استفاده از اعتبار ، manager.createGroup() با موارد زیر جایگزین کنید:

کاتلین

manager.connect(channel, config, null)

جاوا

manager.connect(channel, config, null);

بلوتوث LE Connection Cannels (COC)

Android 10 برنامه شما را قادر می سازد از اتصالات BLE COC برای انتقال جریان داده های بزرگتر بین دو دستگاه BLE استفاده کند. این رابط کاربری بلوتوث و مکانیک اتصال را برای ساده سازی اجرای آن خلاصه می کند.

ویژگی های تلفن

Android 10 شامل چندین پیشرفت مربوط به تلفن است.

با پیشرفت های کیفیت تماس بگیرید

Android 10 امکان جمع آوری اطلاعات در مورد کیفیت تماس های زیر سیستم چندرسانه ای IP (IMS) ، از جمله کیفیت به و از شبکه را در دستگاه هایی که از این ویژگی پشتیبانی می کنند ، اضافه می کند.

غربالگری و شناسه تماس گیرنده

Android 10 برنامه شما را برای شناسایی تماس های موجود در کتاب آدرس کاربر به عنوان تماس های اسپم بالقوه ، و تماس های هرزنامه ای به نمایندگی از کاربر رد می کند. اطلاعات مربوط به این تماس های مسدود شده به عنوان تماس های مسدود شده در ورود به سیستم ، برای ارائه شفافیت بیشتر به کاربر در هنگام تماس تلفنی وارد می شود. استفاده از این API نیاز به به دست آوردن مجوزهای READ_CALL_LOG از کاربر را برای ارائه غربالگری تماس و عملکرد شناسه تماس گیرنده از بین می برد.

با API سرویس تغییر مسیر تماس بگیرید

Android 10 نحوه برخورد با اهداف تماس را تغییر می دهد. پخش NEW_OUTGOING_CALL مستهلک می شود و با API CallRedirectionService جایگزین می شود. API CallRedirectionService رابط هایی را برای شما فراهم می کند تا تماس های خروجی انجام شده توسط پلت فرم Android را تغییر دهید. به عنوان مثال ، برنامه های شخص ثالث ممکن است تماس ها را لغو کرده و آنها را از طریق VoIP دوباره تغییر دهند.

پیشرفت در ایجاد پرونده ها در ذخیره سازی خارجی

In addition to introducing scoped storage , Android 10 adds the following capabilities related to external storage:

  • You can use the IS_PENDING flag to give your app exclusive access to a media file as it's written to disk.
  • If you're aware of a specific location where files should be stored, you can provide the system a hint for where to store the newly-written files.
  • Each external storage device has a unique volume name .

Media and graphics

Android 10 introduces the following new media and graphics features and APIs:

Sharing audio input

Android 10 adds the ability for two apps to share the audio input simultaneously. For full information, see Sharing audio input .

Audio playback capture

Android 10 gives an app the ability to capture audio playback from other apps. For full information, see Playback capture .

Seekbar in MediaStyle notifications

Starting with Android 10, MediaStyle notifications display a seekbar. The seekbar shows the playback progress from PlaybackState.getPosition() , and in some cases the seekbar can be used to seek to a location in the playing program. The seekbar appearance and behavior is controlled by these rules:

  • The seekbar appears if there is an active MediaSession and its duration (specified by MediaMetadata.METADATA_KEY_DURATION ) is greater than zero. This means that the bar does not appear for indeterminate streams like livestreams and radio broadcasts.
  • If the session implements ACTION_SEEK_TO the user can drag the seekbar to control the playback location.

Native MIDI API

The Android Native MIDI API (AMidi) gives application developers the ability to send and receive MIDI data with C/C++code, integrating more closely with their C/C++ audio/control logic and minimizing the need for JNI.

For more information, see Android Native MIDI API .

MediaCodecInfo improvements

Android 10 adds methods to MediaCodecInfo that reveal more information about a codec.

For more information, see Media codecs .

Thermal API

When devices get too warm, they may throttle the CPU and/or GPU, and this can affect apps and games in unexpected ways. Apps using complex graphics, heavy computation, or sustained network activity are more likely to hit issues, and those can vary across devices based on chipset and core frequencies, levels of integration, and also device packaging and form factor.

In Android 10, apps and games can use a thermal API to monitor changes on the device and take action to maintain lower power usage to restore normal temperature. Apps register a listener in PowerManager , through which the system reports ongoing thermal status ranging from light and moderate to severe, critical, emergency, and shutdown.

When the device reports thermal stress, apps and games can help by backing off ongoing activities to reduce power usage on various ways. For example, streaming apps could reduce resolution/bit rate or network traffic, a camera app could disable flash or intensive image enhancement, a game could reduce frame rate or polygon tesselation, a media app could reduce speaker volume, and a maps app could turn off GPS.

The thermal API requires a new device HAL layer—it's currently supported on Pixel devices running Android 10 and we're working with our device-maker partners to bring broad support to the ecosystem as quickly as possible.

Camera and images

Android 10 introduces the following new camera- and image-related features:

Monochrome camera support

Android 9 (API level 28) first introduced monochrome camera capability. Android 10 adds several enhancements to monochrome camera support:

  • Y8 stream format support to improve memory efficiency.
  • Support for monochrome raw DNG capture.
  • Introduction of MONO and NIR CFA enumerations to distinguish between regular monochrome camera and near infrared cameras.

You may use this feature to capture a native monochrome image. A logical multi-camera device may use a monochrome camera as a physical sub-camera to achieve better low-light image quality.

Dynamic Depth Format

Starting in Android 10, cameras can store the depth data for an image in a separate file, using a new schema called Dynamic Depth Format (DDF). Apps can request both the JPG image and its depth metadata, using that information to apply any blur they want in post-processing without modifying the original image data.

To read the specification for this format, see Dynamic Depth Format .

High Efficiency Image File format

High Efficiency Image File (HEIF) format is a standard image and video format that introduces higher-quality encoding and smaller file size when compared to other file formats.

For more information about the file format, see HEIC .

Improvements in multi-camera

Android 10 improves the fusing of multiple cameras into a single logical camera, a feature introduced in Android 9 (API level 28). The following were added to the Camera2 API :

Accessibility services API

Android 10 introduces the following new accessibility service features and APIs:

AccessibilityNodeInfo entry key flag

As of Android 10, you can call isTextEntryKey() to determine whether a given AccessibilityNodeInfo represents a text entry key that's part of a keyboard or keypad.

Accessibility dialog spoken feedback

In case where users need to perform the accessibility shortcut to start an accessibility service, Android 10 allows the dialog to be accompanied by a text-to-speech prompt if the service requests it.

Accessibility shortcut when gesture navigation enabled

When the gesture navigation feature is enabled in Android 10, the accessibility button isn't visible or selectable. To access the accessibility services menu, users must perform one of the following gestures:

  • Two-finger swipe up.
  • Two-finger swipe up and hold.

Accessibility shortcut for physical keyboards

In Android 10, users can trigger the accessibility shortcut on a physical keyboard by pressing Control+Alt+Z .

Soft keyboard controller enhancement

In Android 10, accessibility services can request that the soft keyboard be displayed even when the device detects a hard keyboard attached. Users can override this behavior.

User-defined accessibility timeouts

Android 10 introduces the getRecommendedTimeoutMillis() API. This method provides support for user-defined timeouts for interactive and non-interactive UI elements. The return value is influenced by both user preferences and accessibility service APIs.

Autofill improvements

Android 10 contains the following improvements to the autofill service.

Compatibility-related autofill requests

You can use the FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST flag to determine whether an autofill request was generated via compatibility mode.

Save username and password simultaneously

You can support cases where an application uses multiple activities to display username, password, and other fields by using the SaveInfo.FLAG_DELAY_SAVE flag.

User interaction with the Save UI

You can show and hide a password field in a save dialog by setting an action listener on the dialog and changing the visibility of the corresponding password remote view.

Support for updating datasets

Autofill can update existing passwords. For example, if a user has already stored a password, and they save a new password, Autofill prompts the user to update the existing password instead of saving a new one.

Field Classification improvements

Android 10 contains the following improvements to the Field Classification API.

UserData.Builder constructor

The UserData.Builder constructor has changed to better align to the Builder pattern.

Allow a Value to be mapped to multiple types of Category IDs

When using UserData.Builder in Android 10, you can now map a value to multiple types of category IDs. In previous releases, an exception was thrown if a value was added more than once.

Improved support for credit card numbers

Field classification can now detect four-digit numbers as the last four digits of a credit card number.

Support for app-specific field classification

Android 10 adds FillResponse.setUserData() , which allows you to set app-specific user data for the duration of the session. This helps the autofill service detect types for fields with app-specific content.

UI and system controls

Android 10 provides the following user-interface improvements:

Support JVMTI PopFrame caps

Android 10 adds support for the can_pop_frames capability in the Android JVMTI implementation. When debugging, this feature allows you to re-run functions after pausing at a breakpoint and adjusting locals, globals, or implementation of a function. For more information, see Oracle's Pop Frame reference page .

Surface control API

Android 10 provides a SurfaceControl API for low-level access to the system-compositor ( SurfaceFlinger ). For most users, SurfaceView is the correct way to leverage the compositor. The SurfaceControl API can be useful in certain cases, for example:

  • Synchronization of multiple surfaces
  • Cross-process surface embedding
  • Lower-level lifetime management

The SurfaceControl API is available in both SDK and NDK bindings. The NDK implementation includes an API for manual exchange of buffers with the compositor. This provides an alternative for users who have run up against the limitations of BufferQueue .

WebView hung renderer detection

Android 10 introduces the WebViewRenderProcessClient abstract class, which apps can use to detect if a WebView has become unresponsive. To use this class:

  1. Define your own subclass and implement its onRenderProcessResponsive() and onRenderProcessUnresponsive() methods.
  2. Attach an instance of your WebViewRenderProcessClient to one or more WebView objects.
  3. If the WebView becomes unresponsive, the system calls the client's onRenderProcessUnresponsive() method, passing the WebView and WebViewRenderProcess . (If the WebView is single-process, the WebViewRenderProcess parameter is null.) Your app can take appropriate action, such as showing a dialog box to the user asking if they want to halt the rendering process.

If the WebView remains unresponsive, the system calls onRenderProcessUnresponsive() periodically (no more than once every five seconds), but takes no other action. If the WebView becomes responsive again, the system calls onRenderProcessResponsive() just once.

Settings panels

Android 10 introduces Settings Panels , an API which allows apps to show settings to users in the context of their app. This prevents users from needing to go into Settings to change things like NFC or Mobile data in order to use the app.

Figure 1. The user tries to open a web page while the device is not connected to the network. Chrome pops up the Internet Connectivity settings panel...

Figure 2. The user can turn on Wi-Fi and select a network without leaving the Chrome app.

For example, suppose a user opens a web browser while their device is in airplane mode. Prior to Android 10, the app could only display a generic message asking the user to open Settings to restore connectivity. With Android 10, the browser app can display an inline panel showing key connectivity settings such as airplane mode, Wi-Fi (including nearby networks), and mobile data. With this panel, users can restore connectivity without leaving the app.

To display a settings panel, fire an intent with the one of the following Settings.Panel actions:

کاتلین

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

جاوا

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type can be one of:

ACTION_INTERNET_CONNECTIVITY
Shows settings related to internet connectivity, such as Airplane mode, Wi-Fi, and Mobile Data.
ACTION_WIFI
Shows Wi-Fi settings, but not the other connectivity settings. This is useful for apps that need a Wi-Fi connection to perform large uploads or downloads.
ACTION_NFC
Shows all settings related to near-field communication (NFC).
ACTION_VOLUME
Shows volume settings for all audio streams.

Sharing improvements

Android 10 provides a number of improvements to sharing:

Sharing Shortcuts API

The Sharing Shortcuts API replaces the Direct Share APIs .

Instead of retrieving results reactively on demand, the Sharing Shortcuts API lets apps publish direct share targets in advance. This is how the ShortcutManager works. Since the two APIs are similar, we have expanded the ShortcutInfo API to make using both features easier. With the Sharing Shortcuts API, you can directly assign categories or people to a share target. The share targets persist in the system until the same app updates them or the app is uninstalled.

The older Direct Share mechanism still works, but apps that use it have a lower priority than apps using the Sharing Shortcuts API.

ShortcutInfo.Builder adds and enhances methods to provide additional info about the share target.

Direct share targets

You can publish a dynamic shortcut as a Direct Share Target. See Publish direct share targets .

ShortcutManagerCompat is a new AndroidX API that provides backwards compatibility with the old DirectShare API. This is the preferred way to publish share targets.

Previewing text

When an app shares text content, it can show an optional preview of the content in the Sharesheet UI.

See Adding rich text previews

بیشتر بدانید

For more information on how apps can share data, see Sending simple data to other apps and Receiving simple data from other apps

تم تاریک

Android 10 offers a Dark theme that applies to both the Android system UI and apps running on the device. For full information, see Dark theme .

Foreground service types

Android 10 introduces the foregroundServiceType XML manifest attribute, which you include in the definition of several specific services. It's possible, though rarely appropriate, to assign multiple foreground service types to a particular service.

The following table shows the different foreground service types and the services where it's appropriate to declare a specific type:

Foreground service type Example use case for a service that should declare this type
connectedDevice Monitor a wearable fitness tracker
dataSync Download files from a network
location Continue a user-initiated action
mediaPlayback Play an audio book, podcast, or music
mediaProjection Record a video of the device's display over a short period of time
phoneCall Handle ongoing phone call

کاتلین

Android 10 includes the following updates for Kotlin development.

Nullability annotations for libcore APIs

Android 10 improves the coverage of nullability annotations in the SDK for libcore APIs. These annotations enable app developers who are using either Kotlin or Java nullability analysis in Android Studio to get nullness information when interacting with these APIs.

Normally, nullability contract violations in Kotlin result in compilation errors. To ensure compatibility with your existing code, only the @RecentlyNullable and @RecentlyNonNull annotations are added. This means that nullability violations result in warnings instead of errors.

In addition, any @RecentlyNullable or @RecentlyNonNull annotations that were added in Android 9 are changing to @Nullable and @NonNull , respectively. This means that, in Android 10 and higher, nullability violations lead to errors instead of warnings.

For more information about annotation changes, see Android Pie SDK is now more Kotlin-friendly on the Android Developers Blog.

NDK

Android 10 includes the following NDK changes.

Improved debugging of file descriptor ownership

Android 10 adds fdsan, which helps you find and fix file descriptor ownership issues more easily.

Bugs related to mishandling of file descriptor ownership, which tend to manifest as use-after-close and double-close , are analogous to the memory allocation use-after-free and double-free bugs, but tend to be much more difficult to diagnose and fix. fdsan attempts to detect and/or prevent file descriptor mismanagement by enforcing file descriptor ownership.

For more information about crashes related to these issues, see Error detected by fdsan . For more information about fdsan, see the Googlesource page on fdsan .

ELF TLS

Applications built using the NDK with a minimum API level 29 can use ELF TLS instead of emutls . Dynamic and static linker support has been added to support this method of handling thread-local variables.

For apps built for API level 28 and lower, improvements have been implemented for libgcc/compiler-rt to work around some emutls issues.

For more information, see Android changes for NDK developers .

زمان اجرا

Android 10 includes the following runtime change.

Mallinfo-based garbage collection triggering

When small platform Java objects reference huge objects in the C++ heap, the C++ objects can often be reclaimed only when the Java object is collected and, for example, finalized. In previous releases, the platform estimated the sizes of many C++ objects associated with Java objects. This estimation was not always accurate and occasionally resulted in greatly increased memory usage, as the platform failed to garbage collect when it should have.

In Android 10, the garbage collector (GC) tracks the total size of the heap allocated by system malloc() , ensuring that large malloc() allocations are always included in GC-triggering calculations. Apps interleaving large numbers of C++ allocations with Java execution might see an increase in garbage collection frequency as a result. Other apps might see a small decrease.

Testing and debugging

Android 10 includes the following improvements for testing and debugging.

Improvements for on-device system tracing

As of Android 10, you can specify limits for the size and duration of a trace when you perform an on-device system trace . When you specify either value, the system performs a long trace, periodically copying the trace buffer to the destination file while the trace is recorded. The trace completes when the size or duration limits that you specified are reached.

Use these additional parameters to test different use cases than you would test with a standard trace. For example, you might be diagnosing a performance bug that only occurs after your app has been running for a long period of time. In this case, you could record a long trace over an entire day, and then analyze the CPU scheduler, disk activity, app threads, and other data in the report to help you determine the cause of the bug.

In Android 10 and higher, trace files are saved in a format that can be opened with Perfetto , an open-source project for performance instrumentation and tracing. You can convert Perfetto trace files to the Systrace format .

TextClassifier improvements

Android 10 provides additional text classification functionality in the TextClassifier interface.

Language detection

The detectLanguage() method works similarly to previously-existing classification methods. It receives a TextLanguage.Request object and returns a TextLanguage object.

TextLanguage objects consist of a list of ordered pairs. Each pair contains a locale and a corresponding confidence score for the classification.

Suggested conversation actions

The suggestConversationActions() method works similarly to existing classification methods. It receives a ConversationActions.Request object and returns a ConversationActions object.

ConversationActions objects consist of a list of ConversationAction objects. Each ConversationAction object includes a potential suggested action and its confidence score.

Smart replies/actions in notifications

Android 9 introduced the ability to display suggested replies within a notification. Android 10 expands on this with the ability to include suggested intent-based actions. Furthermore, the platform is able to generate these suggestions automatically. Apps can still provide their own suggestions, or opt out of system-generated suggestions.

The API used to generate these replies is part of TextClassifier , and has also been directly exposed to developers in Android 10. Please read the section on TextClassifier improvements for more information.

If your app provides its own suggestions, the platform doesn't generate any automatic suggestions. If you don't want your app's notifications to display any suggested replies or actions, you can opt out of system-generated replies and actions by using setAllowGeneratedReplies() and setAllowSystemGeneratedContextualActions() .

،

Android 10 introduces great features and capabilities for users and developers. This document highlights what's available for developers.

To learn about the APIs, read the API diff report or visit the Android API reference — look for APIs that were "added in API level 29". Also be sure to check out Android 10 behavior changes (for apps targeting API level 29 and for all apps ), as well as privacy changes , to learn about areas where platform changes may affect your apps.

Security enhancements

Android 10 introduces a number of security features, which the following sections summarize.

Improved biometric authentication dialogs

Android 10 introduces the following improvements to biometric authentication support:

  • A check for the biometric authentication capability.
  • A fallback mechanism that allows a user to authenticate using their device PIN, pattern, or password if they cannot authenticate using their biometric input.
  • A hint that tells the system not to require user confirmation after the user has authenticated using an implicit biometric modality. For example, you could tell the system that no further confirmation should be required after a user has authenticated using face authentication.

Run embedded DEX code directly from APK

As of Android 10, you can tell the platform to run embedded DEX code directly from your app's APK file. This option can help prevent an attack if an attacker ever managed to tamper with the locally compiled code on the device.

For more information, see Run embedded DEX code directly from APK .

TLS 1.3 support

Android 10 adds support for TLS 1.3 . TLS 1.3 is a major revision to the TLS standard that includes performance benefits and enhanced security. Our benchmarks indicate that secure connections can be established as much as 40% faster with TLS 1.3 compared to TLS 1.2.

For more details about our implementation of TLS 1.3, see the TLS section within the behavior changes for all apps page .

Public Conscrypt API

As of Android 10, the Conscrypt security provider includes a public API for TLS functionality.

The collection of classes under android.net.ssl contain static methods to access functionality that isn't available from the generic javax.net.ssl APIs. The names for these classes can be inferred as the plural of the corresponding javax.net.ssl class. For example, code that operates on instances of javax.net.ssl.SSLSocket can instead use methods from SSLSockets .

Connectivity features

Android 10 includes several improvements related to networking and connectivity.

Wi-Fi network connection API

Android 10 adds support for peer-to-peer connections. This feature enables your app to prompt the user to change the access point that the device is connected to by using WifiNetworkSpecifier to describe properties of a requested network. The peer-to-peer connection is used for non-network-providing purposes, such as bootstrapping configuration for secondary devices like Chromecast and Google Home hardware.

For more information, see Wi-Fi Network Request API for peer-to-peer connectivity .

Wi-Fi network suggestion API

Android 10 adds support for your app to prompt the user to connect to a Wi-Fi access point. You can supply suggestions for which network to connect to. The platform will ultimately choose which access point to accept based on the input from your and other apps.

For more information about this feature, see Wi-Fi suggest .

Improvements to Wi-Fi high-performance and low-latency modes

Android 10 allows you to provide a hint to the underlying modem to minimize latency.

Android 10 extends the Wi-Fi lock API to effectively support high-performance mode and low-latency mode. Wi-Fi power save is disabled for high-performance and low-latency mode, and further latency optimization may be enabled in low-latency mode, depending on modem support.

Low-latency mode is only enabled when the application acquiring the lock is running in the foreground and the screen is on. The low-latency mode is especially helpful for real-time mobile gaming applications.

Specialized lookups in DNS resolver

Android 10 adds native support for specialized DNS lookups using both cleartext lookups and DNS-over-TLS mode. Previously, the platform DNS resolver supported only A and AAAA records, which allow looking up only the IP addresses associated with a name, but did not support any other record types. The DnsResolver API provides generic, asynchronous resolution, enabling you to look up SRV , NAPTR , and other record types. Note that parsing the response is left to the app to perform.

For NDK-based apps, see android_res_nsend .

Wi-Fi Easy Connect

Android 10 enables you to use Easy Connect to provision Wi-Fi credentials to a peer device, as a replacement of WPS which has been deprecated. Apps can integrate Easy Connect into their setup and provisioning flow by using the ACTION_PROCESS_WIFI_EASY_CONNECT_URI intent.

For more information on this feature, see Wi-Fi Easy Connect .

Wi-Fi Direct connection API

The WifiP2pConfig and WifiP2pManager API classes have updates in Android 10 to support fast connection establishment capabilities to Wi-Fi Direct using predetermined information. This information is shared via a side channel, such as Bluetooth or NFC.

The following code sample shows how to create a group using predetermined information:

کاتلین

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

جاوا

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

To join a group using credentials, replace manager.createGroup() with the following:

کاتلین

manager.connect(channel, config, null)

جاوا

manager.connect(channel, config, null);

Bluetooth LE Connection Oriented Channels (CoC)

Android 10 enables your app to use BLE CoC connections to transfer larger data streams between two BLE devices. This interface abstracts Bluetooth and connectivity mechanics to simplify implementation.

Telephony features

Android 10 includes several improvements related to telephony.

Call quality improvements

Android 10 adds the ability to collect information about the quality of ongoing IP Multimedia Subsystem (IMS) calls, including quality to and from the network, on devices that support the feature.

Call screening and caller ID

Android 10 provides your app with a means to identify calls not in the user's address book as potential spam calls, and to have spam calls silently rejected on behalf of the user. Information about these blocked calls is logged as blocked calls in the call log to provide greater transparency to the user when they are missing calls. Use of this API eliminates the requirement to obtain READ_CALL_LOG permissions from the user to provide call screening and caller ID functionality.

Call redirection service API

Android 10 changes how call intents are handled. The NEW_OUTGOING_CALL broadcast is deprecated and is replaced with the CallRedirectionService API. The CallRedirectionService API provides interfaces for you to modify outgoing calls made by the Android platform. For example, third-party apps might cancel calls and reroute them over VoIP.

Improvements in creating files on external storage

In addition to introducing scoped storage , Android 10 adds the following capabilities related to external storage:

  • You can use the IS_PENDING flag to give your app exclusive access to a media file as it's written to disk.
  • If you're aware of a specific location where files should be stored, you can provide the system a hint for where to store the newly-written files.
  • Each external storage device has a unique volume name .

Media and graphics

Android 10 introduces the following new media and graphics features and APIs:

Sharing audio input

Android 10 adds the ability for two apps to share the audio input simultaneously. For full information, see Sharing audio input .

Audio playback capture

Android 10 gives an app the ability to capture audio playback from other apps. For full information, see Playback capture .

Seekbar in MediaStyle notifications

Starting with Android 10, MediaStyle notifications display a seekbar. The seekbar shows the playback progress from PlaybackState.getPosition() , and in some cases the seekbar can be used to seek to a location in the playing program. The seekbar appearance and behavior is controlled by these rules:

  • The seekbar appears if there is an active MediaSession and its duration (specified by MediaMetadata.METADATA_KEY_DURATION ) is greater than zero. This means that the bar does not appear for indeterminate streams like livestreams and radio broadcasts.
  • If the session implements ACTION_SEEK_TO the user can drag the seekbar to control the playback location.

Native MIDI API

The Android Native MIDI API (AMidi) gives application developers the ability to send and receive MIDI data with C/C++code, integrating more closely with their C/C++ audio/control logic and minimizing the need for JNI.

For more information, see Android Native MIDI API .

MediaCodecInfo improvements

Android 10 adds methods to MediaCodecInfo that reveal more information about a codec.

For more information, see Media codecs .

Thermal API

When devices get too warm, they may throttle the CPU and/or GPU, and this can affect apps and games in unexpected ways. Apps using complex graphics, heavy computation, or sustained network activity are more likely to hit issues, and those can vary across devices based on chipset and core frequencies, levels of integration, and also device packaging and form factor.

In Android 10, apps and games can use a thermal API to monitor changes on the device and take action to maintain lower power usage to restore normal temperature. Apps register a listener in PowerManager , through which the system reports ongoing thermal status ranging from light and moderate to severe, critical, emergency, and shutdown.

When the device reports thermal stress, apps and games can help by backing off ongoing activities to reduce power usage on various ways. For example, streaming apps could reduce resolution/bit rate or network traffic, a camera app could disable flash or intensive image enhancement, a game could reduce frame rate or polygon tesselation, a media app could reduce speaker volume, and a maps app could turn off GPS.

The thermal API requires a new device HAL layer—it's currently supported on Pixel devices running Android 10 and we're working with our device-maker partners to bring broad support to the ecosystem as quickly as possible.

Camera and images

Android 10 introduces the following new camera- and image-related features:

Monochrome camera support

Android 9 (API level 28) first introduced monochrome camera capability. Android 10 adds several enhancements to monochrome camera support:

  • Y8 stream format support to improve memory efficiency.
  • Support for monochrome raw DNG capture.
  • Introduction of MONO and NIR CFA enumerations to distinguish between regular monochrome camera and near infrared cameras.

You may use this feature to capture a native monochrome image. A logical multi-camera device may use a monochrome camera as a physical sub-camera to achieve better low-light image quality.

Dynamic Depth Format

Starting in Android 10, cameras can store the depth data for an image in a separate file, using a new schema called Dynamic Depth Format (DDF). Apps can request both the JPG image and its depth metadata, using that information to apply any blur they want in post-processing without modifying the original image data.

To read the specification for this format, see Dynamic Depth Format .

High Efficiency Image File format

High Efficiency Image File (HEIF) format is a standard image and video format that introduces higher-quality encoding and smaller file size when compared to other file formats.

For more information about the file format, see HEIC .

Improvements in multi-camera

Android 10 improves the fusing of multiple cameras into a single logical camera, a feature introduced in Android 9 (API level 28). The following were added to the Camera2 API :

Accessibility services API

Android 10 introduces the following new accessibility service features and APIs:

AccessibilityNodeInfo entry key flag

As of Android 10, you can call isTextEntryKey() to determine whether a given AccessibilityNodeInfo represents a text entry key that's part of a keyboard or keypad.

Accessibility dialog spoken feedback

In case where users need to perform the accessibility shortcut to start an accessibility service, Android 10 allows the dialog to be accompanied by a text-to-speech prompt if the service requests it.

Accessibility shortcut when gesture navigation enabled

When the gesture navigation feature is enabled in Android 10, the accessibility button isn't visible or selectable. To access the accessibility services menu, users must perform one of the following gestures:

  • Two-finger swipe up.
  • Two-finger swipe up and hold.

Accessibility shortcut for physical keyboards

In Android 10, users can trigger the accessibility shortcut on a physical keyboard by pressing Control+Alt+Z .

Soft keyboard controller enhancement

In Android 10, accessibility services can request that the soft keyboard be displayed even when the device detects a hard keyboard attached. Users can override this behavior.

User-defined accessibility timeouts

Android 10 introduces the getRecommendedTimeoutMillis() API. This method provides support for user-defined timeouts for interactive and non-interactive UI elements. The return value is influenced by both user preferences and accessibility service APIs.

Autofill improvements

Android 10 contains the following improvements to the autofill service.

Compatibility-related autofill requests

You can use the FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST flag to determine whether an autofill request was generated via compatibility mode.

Save username and password simultaneously

You can support cases where an application uses multiple activities to display username, password, and other fields by using the SaveInfo.FLAG_DELAY_SAVE flag.

User interaction with the Save UI

You can show and hide a password field in a save dialog by setting an action listener on the dialog and changing the visibility of the corresponding password remote view.

Support for updating datasets

Autofill can update existing passwords. For example, if a user has already stored a password, and they save a new password, Autofill prompts the user to update the existing password instead of saving a new one.

Field Classification improvements

Android 10 contains the following improvements to the Field Classification API.

UserData.Builder constructor

The UserData.Builder constructor has changed to better align to the Builder pattern.

Allow a Value to be mapped to multiple types of Category IDs

When using UserData.Builder in Android 10, you can now map a value to multiple types of category IDs. In previous releases, an exception was thrown if a value was added more than once.

Improved support for credit card numbers

Field classification can now detect four-digit numbers as the last four digits of a credit card number.

Support for app-specific field classification

Android 10 adds FillResponse.setUserData() , which allows you to set app-specific user data for the duration of the session. This helps the autofill service detect types for fields with app-specific content.

UI and system controls

Android 10 provides the following user-interface improvements:

Support JVMTI PopFrame caps

Android 10 adds support for the can_pop_frames capability in the Android JVMTI implementation. When debugging, this feature allows you to re-run functions after pausing at a breakpoint and adjusting locals, globals, or implementation of a function. For more information, see Oracle's Pop Frame reference page .

Surface control API

Android 10 provides a SurfaceControl API for low-level access to the system-compositor ( SurfaceFlinger ). For most users, SurfaceView is the correct way to leverage the compositor. The SurfaceControl API can be useful in certain cases, for example:

  • Synchronization of multiple surfaces
  • Cross-process surface embedding
  • Lower-level lifetime management

The SurfaceControl API is available in both SDK and NDK bindings. The NDK implementation includes an API for manual exchange of buffers with the compositor. This provides an alternative for users who have run up against the limitations of BufferQueue .

WebView hung renderer detection

Android 10 introduces the WebViewRenderProcessClient abstract class, which apps can use to detect if a WebView has become unresponsive. To use this class:

  1. Define your own subclass and implement its onRenderProcessResponsive() and onRenderProcessUnresponsive() methods.
  2. Attach an instance of your WebViewRenderProcessClient to one or more WebView objects.
  3. If the WebView becomes unresponsive, the system calls the client's onRenderProcessUnresponsive() method, passing the WebView and WebViewRenderProcess . (If the WebView is single-process, the WebViewRenderProcess parameter is null.) Your app can take appropriate action, such as showing a dialog box to the user asking if they want to halt the rendering process.

If the WebView remains unresponsive, the system calls onRenderProcessUnresponsive() periodically (no more than once every five seconds), but takes no other action. If the WebView becomes responsive again, the system calls onRenderProcessResponsive() just once.

Settings panels

Android 10 introduces Settings Panels , an API which allows apps to show settings to users in the context of their app. This prevents users from needing to go into Settings to change things like NFC or Mobile data in order to use the app.

Figure 1. The user tries to open a web page while the device is not connected to the network. Chrome pops up the Internet Connectivity settings panel...

Figure 2. The user can turn on Wi-Fi and select a network without leaving the Chrome app.

For example, suppose a user opens a web browser while their device is in airplane mode. Prior to Android 10, the app could only display a generic message asking the user to open Settings to restore connectivity. With Android 10, the browser app can display an inline panel showing key connectivity settings such as airplane mode, Wi-Fi (including nearby networks), and mobile data. With this panel, users can restore connectivity without leaving the app.

To display a settings panel, fire an intent with the one of the following Settings.Panel actions:

کاتلین

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

جاوا

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type can be one of:

ACTION_INTERNET_CONNECTIVITY
Shows settings related to internet connectivity, such as Airplane mode, Wi-Fi, and Mobile Data.
ACTION_WIFI
Shows Wi-Fi settings, but not the other connectivity settings. This is useful for apps that need a Wi-Fi connection to perform large uploads or downloads.
ACTION_NFC
Shows all settings related to near-field communication (NFC).
ACTION_VOLUME
Shows volume settings for all audio streams.

Sharing improvements

Android 10 provides a number of improvements to sharing:

Sharing Shortcuts API

The Sharing Shortcuts API replaces the Direct Share APIs .

Instead of retrieving results reactively on demand, the Sharing Shortcuts API lets apps publish direct share targets in advance. This is how the ShortcutManager works. Since the two APIs are similar, we have expanded the ShortcutInfo API to make using both features easier. With the Sharing Shortcuts API, you can directly assign categories or people to a share target. The share targets persist in the system until the same app updates them or the app is uninstalled.

The older Direct Share mechanism still works, but apps that use it have a lower priority than apps using the Sharing Shortcuts API.

ShortcutInfo.Builder adds and enhances methods to provide additional info about the share target.

Direct share targets

You can publish a dynamic shortcut as a Direct Share Target. See Publish direct share targets .

ShortcutManagerCompat is a new AndroidX API that provides backwards compatibility with the old DirectShare API. This is the preferred way to publish share targets.

Previewing text

When an app shares text content, it can show an optional preview of the content in the Sharesheet UI.

See Adding rich text previews

بیشتر بدانید

For more information on how apps can share data, see Sending simple data to other apps and Receiving simple data from other apps

تم تاریک

Android 10 offers a Dark theme that applies to both the Android system UI and apps running on the device. For full information, see Dark theme .

Foreground service types

Android 10 introduces the foregroundServiceType XML manifest attribute, which you include in the definition of several specific services. It's possible, though rarely appropriate, to assign multiple foreground service types to a particular service.

The following table shows the different foreground service types and the services where it's appropriate to declare a specific type:

Foreground service type Example use case for a service that should declare this type
connectedDevice Monitor a wearable fitness tracker
dataSync Download files from a network
location Continue a user-initiated action
mediaPlayback Play an audio book, podcast, or music
mediaProjection Record a video of the device's display over a short period of time
phoneCall Handle ongoing phone call

کاتلین

Android 10 includes the following updates for Kotlin development.

Nullability annotations for libcore APIs

Android 10 improves the coverage of nullability annotations in the SDK for libcore APIs. These annotations enable app developers who are using either Kotlin or Java nullability analysis in Android Studio to get nullness information when interacting with these APIs.

Normally, nullability contract violations in Kotlin result in compilation errors. To ensure compatibility with your existing code, only the @RecentlyNullable and @RecentlyNonNull annotations are added. This means that nullability violations result in warnings instead of errors.

In addition, any @RecentlyNullable or @RecentlyNonNull annotations that were added in Android 9 are changing to @Nullable and @NonNull , respectively. This means that, in Android 10 and higher, nullability violations lead to errors instead of warnings.

For more information about annotation changes, see Android Pie SDK is now more Kotlin-friendly on the Android Developers Blog.

NDK

Android 10 includes the following NDK changes.

Improved debugging of file descriptor ownership

Android 10 adds fdsan, which helps you find and fix file descriptor ownership issues more easily.

Bugs related to mishandling of file descriptor ownership, which tend to manifest as use-after-close and double-close , are analogous to the memory allocation use-after-free and double-free bugs, but tend to be much more difficult to diagnose and fix. fdsan attempts to detect and/or prevent file descriptor mismanagement by enforcing file descriptor ownership.

For more information about crashes related to these issues, see Error detected by fdsan . For more information about fdsan, see the Googlesource page on fdsan .

ELF TLS

Applications built using the NDK with a minimum API level 29 can use ELF TLS instead of emutls . Dynamic and static linker support has been added to support this method of handling thread-local variables.

For apps built for API level 28 and lower, improvements have been implemented for libgcc/compiler-rt to work around some emutls issues.

For more information, see Android changes for NDK developers .

زمان اجرا

Android 10 includes the following runtime change.

Mallinfo-based garbage collection triggering

When small platform Java objects reference huge objects in the C++ heap, the C++ objects can often be reclaimed only when the Java object is collected and, for example, finalized. In previous releases, the platform estimated the sizes of many C++ objects associated with Java objects. This estimation was not always accurate and occasionally resulted in greatly increased memory usage, as the platform failed to garbage collect when it should have.

In Android 10, the garbage collector (GC) tracks the total size of the heap allocated by system malloc() , ensuring that large malloc() allocations are always included in GC-triggering calculations. Apps interleaving large numbers of C++ allocations with Java execution might see an increase in garbage collection frequency as a result. Other apps might see a small decrease.

Testing and debugging

Android 10 includes the following improvements for testing and debugging.

Improvements for on-device system tracing

As of Android 10, you can specify limits for the size and duration of a trace when you perform an on-device system trace . When you specify either value, the system performs a long trace, periodically copying the trace buffer to the destination file while the trace is recorded. The trace completes when the size or duration limits that you specified are reached.

Use these additional parameters to test different use cases than you would test with a standard trace. For example, you might be diagnosing a performance bug that only occurs after your app has been running for a long period of time. In this case, you could record a long trace over an entire day, and then analyze the CPU scheduler, disk activity, app threads, and other data in the report to help you determine the cause of the bug.

In Android 10 and higher, trace files are saved in a format that can be opened with Perfetto , an open-source project for performance instrumentation and tracing. You can convert Perfetto trace files to the Systrace format .

TextClassifier improvements

Android 10 provides additional text classification functionality in the TextClassifier interface.

Language detection

The detectLanguage() method works similarly to previously-existing classification methods. It receives a TextLanguage.Request object and returns a TextLanguage object.

TextLanguage objects consist of a list of ordered pairs. Each pair contains a locale and a corresponding confidence score for the classification.

Suggested conversation actions

The suggestConversationActions() method works similarly to existing classification methods. It receives a ConversationActions.Request object and returns a ConversationActions object.

ConversationActions objects consist of a list of ConversationAction objects. Each ConversationAction object includes a potential suggested action and its confidence score.

Smart replies/actions in notifications

Android 9 introduced the ability to display suggested replies within a notification. Android 10 expands on this with the ability to include suggested intent-based actions. Furthermore, the platform is able to generate these suggestions automatically. Apps can still provide their own suggestions, or opt out of system-generated suggestions.

The API used to generate these replies is part of TextClassifier , and has also been directly exposed to developers in Android 10. Please read the section on TextClassifier improvements for more information.

If your app provides its own suggestions, the platform doesn't generate any automatic suggestions. If you don't want your app's notifications to display any suggested replies or actions, you can opt out of system-generated replies and actions by using setAllowGeneratedReplies() and setAllowSystemGeneratedContextualActions() .