اندروید 8.0 (سطح API 26) انواع ویژگی ها و قابلیت های جدید را برای کاربران و توسعه دهندگان معرفی می کند. این سند موارد جدیدی را برای توسعه دهندگان برجسته می کند.
حتماً تغییرات رفتار Android 8.0 را نیز بررسی کنید تا در مورد مناطقی که تغییرات پلتفرم ممکن است بر برنامههای شما تأثیر بگذارد مطلع شوید.
تجربه کاربری
حالت تصویر در تصویر
Android 8.0 (سطح API 26) اجازه می دهد تا فعالیت ها در حالت تصویر در تصویر (PIP) راه اندازی شوند. PIP نوع خاصی از حالت چند پنجره ای است که بیشتر برای پخش ویدئو استفاده می شود. حالت PIP در ابتدا فقط برای Android TV در دسترس بود. اندروید 8.0 این ویژگی را در سایر دستگاه های اندرویدی در دسترس قرار می دهد.
وقتی یک فعالیت در حالت PIP است، در حالت مکث است، اما باید به نمایش محتوا ادامه دهد. به همین دلیل، باید مطمئن شوید که برنامه شما پخش را در کنترلر onPause()
خود متوقف نمی کند. در عوض، باید ویدیو را در onStop()
متوقف کنید و پخش را در onStart()
از سر بگیرید. برای اطلاعات بیشتر، چرخه حیات چند پنجره ای را ببینید.
برای تعیین اینکه فعالیت شما می تواند از حالت PIP استفاده کند، android:supportsPictureInPicture
در مانیفست روی true تنظیم کنید. (از Android 8.0، PIP به ویژگی مانیفست android:resizeableActivity
نیاز ندارد. با این حال، اگر فعالیت شما از حالت های چند پنجره ای دیگر پشتیبانی می کند، باید android:resizeableActivity
روی "true" تنظیم کنید.)
Android 8.0 (سطح API 26) یک شی جدید به نام PictureInPictureParams
را معرفی میکند که شما آن را به روشهای PIP میدهید تا مشخص کنید یک فعالیت در حالت PIP چگونه باید رفتار کند. این شی ویژگی هایی مانند نسبت ابعاد ترجیحی فعالیت را مشخص می کند.
روشهای PIP موجود که در افزودن تصویر در تصویر توضیح داده شدهاند، اکنون میتوانند در همه دستگاههای Android، نه فقط در Android TV، استفاده شوند. علاوه بر این، Android 8.0 روش های زیر را برای پشتیبانی از حالت PIP ارائه می دهد:
-
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: فعالیت را در حالت تصویر در تصویر قرار می دهد. نسبت ابعاد فعالیت و سایر تنظیمات پیکربندی توسط args مشخص می شود. اگر هر کدام از فیلدها در args خالی باشد، سیستم از مقادیر تنظیم شده در آخرین باری کهActivity.setPictureInPictureParams()
را فراخوانی کردید استفاده می کند.فعالیت مشخص شده در گوشه ای از صفحه نمایش قرار می گیرد. بقیه صفحه با فعالیت قبلی که روی صفحه بود پر شده است. فعالیتی که وارد حالت PIP می شود به حالت توقف می رود، اما شروع شده باقی می ماند. اگر کاربر روی فعالیت PIP ضربه بزند، سیستم منویی برای تعامل کاربر نشان می دهد. در حالی که فعالیت در حالت PIP است، هیچ رویداد لمسی به آن نمی رسد.
-
Activity.setPictureInPictureParams()
: تنظیمات پیکربندی PIP یک فعالیت را به روز می کند. اگر فعالیت در حال حاضر در حالت PIP باشد، تنظیمات به روز می شوند. این در صورتی مفید است که نسبت ابعاد فعالیت تغییر کند. اگر فعالیت در حالت PIP نباشد، این تنظیمات پیکربندی بدون توجه به روشenterPictureInPictureMode()
که فراخوانی میکنید استفاده میشوند.
اطلاعیه ها
در Android 8.0 (سطح API 26)، ما اعلانها را دوباره طراحی کردهایم تا روشی سادهتر و سازگارتر برای مدیریت رفتار و تنظیمات اعلان ارائه کنیم. این تغییرات عبارتند از:
- کانال های اعلان: اندروید 8.0 کانال های اعلان را معرفی می کند که به شما امکان می دهد برای هر نوع اعلانی که می خواهید نمایش دهید، یک کانال قابل تنظیم توسط کاربر ایجاد کنید. رابط کاربری به کانال های اطلاع رسانی به عنوان دسته های اعلان اشاره می کند. برای آشنایی با نحوه پیادهسازی کانالهای اعلان، به مدیریت کانالهای اعلان مراجعه کنید.
- نقاط اعلان: اندروید 8.0 از نمایش نقاط یا نشانها در نمادهای راهانداز برنامه پشتیبانی میکند. نقاط اعلان وجود اعلانهایی را نشان میدهند که کاربر هنوز آنها را رد نکرده یا روی آنها عمل نکرده است. برای آشنایی با نحوه کار با نقاط اعلان، به نشانهای اعلان مراجعه کنید.
- به تعویق انداختن: کاربران میتوانند اعلانها را به تعویق بیندازند، که باعث میشود آنها برای مدتی قبل از ظاهر شدن مجدد ناپدید شوند. اعلانها با همان سطح اهمیتی که برای اولین بار ظاهر شدند دوباره ظاهر میشوند. برنامهها میتوانند اعلان به تعویق افتاده را حذف یا بهروزرسانی کنند، اما بهروزرسانی یک اعلان به تعویق افتاده باعث نمایش مجدد آن نمیشود.
- مهلتهای اعلان: میتوانید هنگام ایجاد اعلان با استفاده از
setTimeoutAfter()
یک مهلت تعیین کنید. می توانید از این روش برای تعیین مدت زمانی استفاده کنید که پس از آن یک اعلان باید لغو شود. در صورت لزوم، می توانید قبل از سپری شدن مدت زمان تعیین شده، اعلان را لغو کنید. - تنظیمات اعلان: می توانید
setSettingsText()
فراخوانی کنید تا متنی را تنظیم کنید که هنگام ایجاد پیوندی به تنظیمات اعلان برنامه خود از طریق یک اعلان با استفاده از هدفNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
ظاهر می شود. سیستم ممکن است موارد اضافی زیر را با هدف فیلتر کردن تنظیماتی که برنامه شما باید برای کاربران نمایش دهد ارائه دهد:EXTRA_CHANNEL_ID
،NOTIFICATION_TAG
، وNOTIFICATION_ID
. - حذف اعلان: کاربران میتوانند خودشان اعلانها را رد کنند و برنامهها میتوانند آنها را به صورت برنامهریزی حذف کنند. با اجرای متد
onNotificationRemoved()
از کلاسNotificationListenerService
می توانید تعیین کنید که چه زمانی یک اعلان رد می شود و چرا رد می شود. - رنگ های پس زمینه: می توانید رنگ پس زمینه را برای اعلان تنظیم و فعال کنید. شما باید از این ویژگی فقط در اعلانها برای کارهای در حال انجام استفاده کنید که دیدن آنها در یک نگاه برای کاربر حیاتی است. به عنوان مثال، می توانید رنگ پس زمینه را برای اعلان های مربوط به مسیرهای رانندگی یا تماس تلفنی در حال انجام تنظیم کنید. همچنین می توانید رنگ پس زمینه مورد نظر را با استفاده از
setColor()
تنظیم کنید. انجام این کار به شما امکان می دهد ازsetColorized()
برای فعال کردن استفاده از رنگ پس زمینه برای اعلان استفاده کنید. - سبک پیامرسانی: در اندروید ۸.۰، اعلانهایی که از کلاس
MessagingStyle
استفاده میکنند، محتوای بیشتری را به شکل جمعشده نمایش میدهند. باید از کلاسMessagingStyle
برای اعلانهایی که به پیامرسانی مرتبط هستند استفاده کنید. همچنین میتوانید از روشaddHistoricMessage()
برای ارائه زمینه یک مکالمه با افزودن پیامهای تاریخی به اعلانهای مربوط به پیامرسانی استفاده کنید.
چارچوب تکمیل خودکار
ایجاد حساب، ورود به سیستم و تراکنش های کارت اعتباری زمان بر است و مستعد خطا هستند. کاربران به راحتی می توانند از برنامه هایی که به این نوع کارهای تکراری نیاز دارند ناامید شوند.
Android 8.0 (سطح API 26) با معرفی چارچوب تکمیل خودکار، پر کردن فرمها، مانند فرمهای ورود به سیستم و کارت اعتباری را آسانتر میکند. پس از انتخاب کاربر برای تکمیل خودکار، برنامههای موجود و جدید با چارچوب تکمیل خودکار کار میکنند.
میتوانید برای بهینهسازی نحوه عملکرد برنامهتان با فریمورک چند قدم بردارید. برای اطلاعات بیشتر، به نمای کلی چارچوب تکمیل خودکار مراجعه کنید.
فونت های قابل دانلود
Android 8.0 (سطح API 26) و Android Support Library 26 به شما امکان میدهند به جای اینکه فونتها را در APK دستهبندی کنید یا به APK فونتها را بارگیری کنید، فونتها را از یک برنامه ارائهدهنده درخواست کنید. این ویژگی اندازه APK شما را کاهش میدهد، میزان موفقیت نصب برنامه را افزایش میدهد و به چندین برنامه اجازه میدهد فونت یکسانی را به اشتراک بگذارند.
برای اطلاعات بیشتر در مورد دانلود فونت ها، به فونت های دانلودی مراجعه کنید.
فونت ها در XML
Android 8.0 (سطح API 26) یک ویژگی جدید به نام Fonts in XML را معرفی می کند که به شما امکان می دهد از فونت ها به عنوان منبع استفاده کنید. این بدان معناست که نیازی به دسته بندی فونت ها به عنوان دارایی نیست. فونت ها در فایل R
کامپایل می شوند و به صورت خودکار در سیستم به عنوان منبع در دسترس هستند. سپس می توانید با کمک یک نوع منبع جدید، font
به این فونت ها دسترسی پیدا کنید.
کتابخانه پشتیبانی 26 از این ویژگی در دستگاههایی که API نسخه 14 و بالاتر دارند پشتیبانی کامل میکند.
برای اطلاعات بیشتر، در مورد استفاده از فونت ها به عنوان منابع و بازیابی فونت های سیستم، به فونت ها در XML مراجعه کنید.
اندازه خودکار TextView
Android 8.0 (سطح API 26) به شما امکان می دهد اندازه متن خود را به طور خودکار بر اساس اندازه TextView گسترش یا منقبض کنید. این بدان معنی است که بهینه سازی اندازه متن در صفحه های مختلف یا با محتوای پویا بسیار آسان تر است. برای اطلاعات بیشتر، در مورد اندازه خودکار TextView در Android 8.0، به اندازه خودکار TextView مراجعه کنید.
نمادهای تطبیقی
اندروید 8.0 (سطح API 26) آیکون های لانچر تطبیقی را معرفی می کند. نمادهای تطبیقی از جلوه های بصری پشتیبانی می کنند و می توانند اشکال مختلفی را در مدل های مختلف دستگاه نمایش دهند. برای یادگیری نحوه ایجاد نمادهای تطبیقی، راهنمای Adaptive Icons را ببینید.
مدیریت رنگ
توسعهدهندگان برنامههای تصویربرداری اندروید اکنون میتوانند از دستگاههای جدیدی بهره ببرند که دارای نمایشگر رنگی گسترده هستند. برای نمایش تصاویر با گستره وسیع، برنامهها باید یک پرچم را در مانیفست خود فعال کنند (در هر فعالیت) و بیت مپها را با نمایه رنگی گسترده (AdobeRGB، Pro Photo RGB، DCI-P3 و غیره) بارگیری کنند.
API های WebView
Android 8.0 چندین API را برای کمک به مدیریت اشیاء WebView
که محتوای وب را در برنامه شما نمایش میدهند، ارائه میکند. این APIها که ثبات و امنیت برنامه شما را بهبود میبخشند شامل موارد زیر است:
- نسخه API
- Google SafeBrowsing API
- Termination Handle API
- Renderer Importance API
برای کسب اطلاعات بیشتر درباره نحوه استفاده از این APIها، به مدیریت WebViews مراجعه کنید.
کلاس WebView
اکنون شامل یک API مرور ایمن برای افزایش امنیت مرور وب است. برای اطلاعات بیشتر، Google Safe Browsing API را ببینید.
پین کردن میانبرها و ویجت ها
اندروید 8.0 (سطح API 26) پین کردن میانبرها و ویجت ها را درون برنامه معرفی می کند. در برنامه خود، میتوانید میانبرها و ویجتهای پینشده را برای راهاندازهای پشتیبانیشده، مشروط به اجازه کاربر ایجاد کنید.
برای اطلاعات بیشتر، راهنمای ویژگی های میانبر و ابزارک پین کردن را ببینید.
حداکثر نسبت صفحه نمایش
Android 8.0 (سطح API 26) تغییراتی را در نحوه پیکربندی حداکثر نسبت تصویر یک برنامه ایجاد می کند.
ابتدا، اندروید 8.0 ویژگی maxAspectRatio را معرفی می کند که می توانید از آن برای تنظیم حداکثر نسبت تصویر برنامه خود استفاده کنید. علاوه بر این، در اندروید 8.0 و بالاتر، حداکثر نسبت تصویر پیشفرض یک برنامه، نسبت صفحه اصلی دستگاهی است که برنامه در آن اجرا میشود.
برای اطلاعات بیشتر در مورد اعلام حداکثر نسبت تصویر، به پشتیبانی از چند صفحه مراجعه کنید.
پشتیبانی از چند نمایشگر
با شروع اندروید 8.0 (سطح API 26)، این پلتفرم پشتیبانی پیشرفتهتری از نمایشگرهای متعدد ارائه میدهد. اگر یک فعالیت از حالت چند پنجره ای پشتیبانی می کند و روی دستگاهی با نمایشگرهای متعدد اجرا می شود، کاربران می توانند فعالیت را از یک نمایشگر به نمایشگر دیگر منتقل کنند. وقتی یک برنامه فعالیتی را راه اندازی می کند، برنامه می تواند مشخص کند که فعالیت روی کدام نمایشگر اجرا شود.
توجه: اگر یک فعالیت از حالت چند پنجره ای پشتیبانی می کند، Android 8.0 به طور خودکار پشتیبانی از چند نمایشگر را برای آن فعالیت فعال می کند. شما باید برنامه خود را آزمایش کنید تا مطمئن شوید که در یک محیط چند نمایشگر به اندازه کافی کار می کند.
فقط یک فعالیت در هر زمان می تواند در حالت ازسرگیری باشد، حتی اگر برنامه دارای چندین نمایشگر باشد. فعالیت با تمرکز در حالت ازسرگیری است. تمام فعالیت های قابل مشاهده دیگر متوقف می شوند، اما متوقف نمی شوند. برای اطلاعات بیشتر در مورد چرخه عمر فعالیت زمانی که چندین فعالیت قابل مشاهده است، به چرخه عمر چند پنجره ای مراجعه کنید.
هنگامی که کاربر یک فعالیت را از یک نمایشگر به نمایشگر دیگر منتقل می کند، سیستم اندازه فعالیت را تغییر می دهد و در صورت لزوم تغییرات زمان اجرا را صادر می کند. فعالیت شما می تواند خود تغییر پیکربندی را مدیریت کند، یا می تواند به سیستم اجازه دهد تا فرآیند حاوی فعالیت شما را از بین ببرد و آن را با ابعاد جدید بازسازی کند. برای اطلاعات بیشتر، به مدیریت تغییرات پیکربندی مراجعه کنید.
ActivityOptions
دو روش جدید برای پشتیبانی از نمایشگرهای متعدد ارائه می دهد:
-
setLaunchDisplayId()
- مشخص میکند که فعالیت هنگام راهاندازی در کدام نمایشگر باید نشان داده شود.
-
getLaunchDisplayId()
- نمایش راهاندازی فعلی فعالیت را برمیگرداند.
پوسته adb برای پشتیبانی از نمایشگرهای متعدد گسترش یافته است. اکنون می توان از دستور shell start
برای راه اندازی یک اکتیویتی و برای مشخص کردن نمایش هدف فعالیت استفاده کرد:
adb shell start <activity_name> --display <display_id>
حاشیه های چیدمان یکپارچه و بالشتک
Android 8.0 (سطح API 26) تعیین موقعیتهایی را برای شما آسانتر میکند که در آن طرفهای مقابل عنصر View
از حاشیه یا بالشتک یکسانی استفاده میکنند. به طور خاص، اکنون می توانید از ویژگی های زیر در فایل های XML طرح بندی خود استفاده کنید:
-
layout_marginVertical
، کهlayout_marginTop
وlayout_marginBottom
همزمان تعریف می کند. -
layout_marginHorizontal
کهlayout_marginLeft
وlayout_marginRight
همزمان تعریف می کند. -
paddingVertical
، کهpaddingTop
وpaddingBottom
همزمان تعریف می کند. -
paddingHorizontal
کهpaddingLeft
وpaddingRight
همزمان تعریف می کند.
توجه: اگر منطق برنامه خود را برای پشتیبانی از زبانها و فرهنگهای مختلف ، از جمله جهت متن، سفارشی میکنید، به خاطر داشته باشید که این ویژگیها بر مقادیر layout_marginStart
، layout_marginEnd
، paddingStart
یا paddingEnd
تأثیری نمیگذارند. شما می توانید این مقادیر را علاوه بر ویژگی های طرح بندی عمودی و افقی جدید، برای ایجاد رفتار طرح بندی که به جهت متن بستگی دارد، تنظیم کنید.
گرفتن اشاره گر
برخی از برنامهها، مانند بازیها، دسکتاپ از راه دور و کلاینتهای مجازیسازی، از کنترل نشانگر ماوس بسیار سود میبرند. Pointer Capture یک ویژگی جدید در Android 8.0 (سطح API 26) است که با ارائه همه رویدادهای ماوس به نمای متمرکز در برنامه شما، چنین کنترلی را فراهم می کند.
با شروع Android 8.0، یک View
در برنامه شما میتواند درخواست ضبط اشارهگر را بدهد و شنوندهای را برای پردازش رویدادهای اشارهگر ثبتشده تعریف کند. نشانگر ماوس در این حالت پنهان است. وقتی دیگر به اطلاعات ماوس نیازی نداشته باشد، نما می تواند ضبط اشاره گر را آزاد کند. این سیستم همچنین می تواند هنگامی که نما فوکوس خود را از دست می دهد، به عنوان مثال، هنگامی که کاربر برنامه دیگری را باز می کند، ضبط اشاره گر را آزاد کند.
برای اطلاعات در مورد نحوه استفاده از این ویژگی در برنامه خود، به ضبط اشاره گر مراجعه کنید.
دسته بندی برنامه ها
Android 8.0 (سطح API 26) به هر برنامه اجازه میدهد تا در صورت لزوم، دستهای را که در آن قرار میگیرد، اعلام کند. این دستهها برای دستهبندی برنامههایی با هدف یا عملکرد مشابه هنگام ارائه به کاربران، مانند استفاده از داده، استفاده از باتری، یا استفاده از فضای ذخیرهسازی، استفاده میشوند. می توانید با تنظیم ویژگی android:appCategory
در تگ مانیفست <application>
خود، یک دسته برای برنامه خود تعریف کنید.
راه انداز Android TV
Android 8.0 (سطح API 26) شامل یک تجربه جدید محتوای محور و صفحه اصلی Android TV است که با شبیه ساز Android TV و تصویر دستگاه Nexus Player برای Android 8.0 در دسترس است. صفحه اصلی جدید محتوای ویدیویی را در ردیفهای مربوط به کانالها سازماندهی میکند که هر کدام با برنامههایی توسط یک برنامه در سیستم پر شدهاند. برنامهها میتوانند چندین کانال را منتشر کنند و کاربران میتوانند کانالهایی را که میخواهند در صفحه اصلی ببینند، پیکربندی کنند. صفحه اصلی Android TV همچنین شامل یک ردیف Watch Next است که بر اساس عادات تماشای کاربر با برنامه های برنامه ها پر شده است. برنامهها همچنین میتوانند پیشنمایشهای ویدیویی را ارائه دهند که وقتی کاربر روی برنامهای تمرکز میکند، بهطور خودکار پخش میشود. APIها برای پر کردن کانال ها و برنامه ها بخشی از API های TvProvider هستند که به عنوان یک ماژول کتابخانه پشتیبانی Android با Android 8.0 توزیع می شوند.
AnimatorSet
با شروع Android 8.0 (سطح API 26)، AnimatorSet
API اکنون از جستجو و بازی به صورت معکوس پشتیبانی می کند. جستجو به شما امکان می دهد موقعیت انیمیشن را در یک نقطه خاص از زمان تنظیم کنید. اگر برنامه شما دارای انیمیشن هایی برای اقداماتی باشد که می توان آنها را لغو کرد، بازی به صورت معکوس مفید است. به جای تعریف دو مجموعه انیمیشن مجزا، می توانید همان یکی را به صورت معکوس بازی کنید.
ورودی و ناوبری
خوشه های ناوبری صفحه کلید
اگر یک فعالیت در برنامه شما از یک سلسله مراتب نمای پیچیده استفاده می کند، مانند آنچه در شکل 2 است، سازماندهی گروه هایی از عناصر UI را در خوشه هایی برای پیمایش آسان تر از صفحه کلید در میان آنها در نظر بگیرید. کاربران میتوانند Meta+Tab یا Search+Tab را در دستگاههای Chromebook فشار دهند تا از یک خوشه به خوشه دیگر پیمایش کنند. نمونههای خوب خوشهها عبارتند از: پانلهای جانبی، نوارهای پیمایش، قسمتهای محتوای اصلی، و عناصری که میتوانند حاوی بسیاری از عناصر کودک باشند.
برای تبدیل یک عنصر View
یا ViewGroup
به یک خوشه، ویژگی android:keyboardNavigationCluster
در فایل XML چیدمان عنصر روی true
تنظیم کنید، یا true
را به setKeyboardNavigationCluster()
در منطق UI برنامه خود ارسال کنید.
توجه: خوشهها را نمیتوان تودرتو کرد، اگرچه خوشههای غیر تودرتو ممکن است در سطوح مختلف سلسله مراتب ظاهر شوند. اگر میخواهید خوشهها را تودرتو کنید، چارچوب فقط با بالاترین عنصر ViewGroup
به عنوان یک خوشه برخورد میکند.
در دستگاههایی که صفحهنمایش لمسی دارند، میتوانید عنصر android:touchscreenBlocksFocus
یک شی ViewGroup
را که بهصورت خوشهای تعیین شده است، روی true
تنظیم کنید تا امکان پیمایش فقط خوشهای به داخل و خارج از آن خوشه وجود داشته باشد. اگر این پیکربندی را روی یک خوشه اعمال کنید، کاربران نمی توانند از کلید Tab یا کلیدهای پیکان برای حرکت به داخل یا خارج از خوشه استفاده کنند. آنها باید ترکیب صفحه کلید ناوبری کلاستر را به جای آن فشار دهند.
مشاهده فوکوس پیش فرض
در Android 8.0 (سطح API 26)، میتوانید پس از از سرگیری فعالیت (دوباره) ایجاد شده و فشار دادن یک کلید پیمایش صفحهکلید، مانند کلید تب، View
اختصاص دهید که باید فوکوس را دریافت کند. برای اعمال این تنظیم "focused by default"، ویژگی android:focusedByDefault
عنصر View
را در فایل XML طرحبندی حاوی عنصر UI روی true
تنظیم کنید، یا در منطق UI برنامه خود به setFocusedByDefault()
true
بفرستید.
خروجی گفتار
فعالیتها و سرویسها میتوانند از نمونههایی از TextToSpeech
برای دیکته و تلفظ محتوا استفاده کنند. از Android 8.0 (سطح API 26)، برنامه شما میتواند اطلاعات زمانبندی دقیقتری درباره زمانی که یک موتور تبدیل متن به گفتار شروع به بیان کلمات ترکیبشده جداگانه میکند، به دست آورد، تا زمانی که موتور این اطلاعات را ارائه دهد. می توانید از این قابلیت برای جلب توجه به کلمات خاصی استفاده کنید زیرا موتور تبدیل متن به گفتار آنها را بیان می کند.
برای استفاده از این بهبودهای موتور تبدیل متن به گفتار در برنامه خود، یک نمونه از UtteranceProgressListener
را ثبت کنید. به عنوان بخشی از فرآیند ثبت نام، یک handler برای متد onRangeStart()
قرار دهید.
موتور تبدیل متن به گفتار، rangeStart()
را فراخوانی می کند تا زمانی را ضبط کند که انتظار دارد پخش صوتی محدوده خاصی از متن شروع شود. هنگامی که صدای آن محدوده متن شروع به پخش می کند، روش onRangeStart()
برنامه شما اجرا می شود. سپس برنامه شما میتواند به این تماس پاسخ دهد، مثلاً با برجسته کردن محدوده متنی که با گفته مرتبط است.
برای اطلاعات بیشتر در مورد ردیابی پیشرفت پخش یک موتور تبدیل متن به گفتار، به مرجع کلاس UtteranceProgressListener
مراجعه کنید.
سیستم
آشکارسازهای جدید StrictMode
Android 8.0 (سطح API 26) سه آشکارساز StrictMode جدید اضافه می کند تا به شناسایی اشکالات احتمالی در برنامه شما کمک کند:
-
detectUnbufferedIo()
تشخیص می دهد که برنامه شما چه زمانی داده ها را بدون بافر می خواند یا می نویسد، که می تواند عملکرد را به شدت تحت تاثیر قرار دهد. -
detectContentUriWithoutPermission()
زمانی را تشخیص می دهد که برنامه شما به طور تصادفی هنگام شروع یک فعالیت در خارج از برنامه شما به برنامه دیگری مجوز اعطا کند. -
detectUntaggedSockets()
تشخیص می دهد که برنامه شما بدون استفاده ازsetThreadStatsTag(int)
برای برچسب گذاری ترافیک شما برای اهداف اشکال زدایی، ترافیک شبکه را انجام می دهد.
داده های ذخیره شده در حافظه پنهان
Android 8.0 (سطح API 26) راهنمایی و رفتارهای بهتری را در مورد داده های حافظه پنهان ارائه می دهد. اکنون به هر برنامه یک سهمیه فضای دیسک برای داده های کش داده شده است، همانطور که getCacheQuotaBytes(UUID)
برگردانده است.
هنگامی که سیستم نیاز به آزاد کردن فضای دیسک داشته باشد، با حذف فایلهای ذخیرهشده در حافظه پنهان از برنامههایی که بیشترین سهمیه اختصاص داده شده را دارند، شروع به کار میکند. بنابراین، اگر دادههای کش خود را تحت سهمیه اختصاص داده شده خود نگه دارید، فایلهای کش شما آخرین فایلهای موجود در سیستم خواهند بود که در صورت لزوم پاک میشوند. وقتی سیستم تصمیم میگیرد چه فایلهای کش را در برنامه شما حذف کند، ابتدا قدیمیترین فایلها را در نظر میگیرد (همانطور که زمان تغییر تعیین میشود).
همچنین دو رفتار جدید وجود دارد که میتوانید آنها را بر اساس هر دایرکتوری فعال کنید تا کنترل کنید چگونه سیستم دادههای کش شما را آزاد میکند:
-
StorageManager.setCacheBehaviorAtomic()
می تواند برای نشان دادن اینکه یک دایرکتوری و تمام محتویات آن باید به عنوان یک واحد اتمی حذف شوند استفاده شود. -
setCacheBehaviorTombstone(File, boolean)
را می توان برای نشان دادن اینکه به جای حذف فایل های داخل دایرکتوری، باید به طول 0 بایت کوتاه شوند و فایل خالی دست نخورده باقی بماند.
در نهایت، زمانی که نیاز به اختصاص فضای دیسک برای فایلهای بزرگ دارید، از API جدید allocateBytes(FileDescriptor, long)
استفاده کنید، که به طور خودکار فایلهای کش متعلق به سایر برنامهها (در صورت نیاز) را برای برآورده کردن درخواست شما پاک میکند. هنگام تصمیم گیری در مورد اینکه آیا دستگاه فضای دیسک کافی برای نگهداری داده های جدید شما دارد یا خیر، به جای استفاده از getUsableSpace()
getAllocatableBytes(UUID)
را فراخوانی کنید، زیرا اولی داده های کش شده ای را که سیستم مایل است از طرف شما پاک کند در نظر می گیرد.
صفحه بندی ارائه دهنده محتوا
ما ارائهدهندگان محتوا را بهروزرسانی کردهایم تا پشتیبانی برای بارگیری یک صفحه داده بزرگ در یک صفحه را شامل شود. برای مثال، یک برنامه عکس با هزاران تصویر میتواند زیرمجموعهای از دادهها را برای ارائه در یک صفحه جستجو کند. هر صفحه از نتایج بازگردانده شده توسط یک ارائه دهنده محتوا توسط یک شی مکان نما نشان داده می شود. هم یک مشتری و هم یک ارائه دهنده باید صفحه بندی را برای استفاده از این ویژگی پیاده سازی کنند.
برای اطلاعات دقیق در مورد تغییرات ارائه دهندگان محتوا، ContentProvider
و ContentProviderClient
را ببینید.
درخواست های به روز رسانی محتوا
کلاسهای ContentProvider
و ContentResolver
اکنون هر کدام شامل یک متد refresh()
میشوند، که این امر را برای مشتریان آسانتر میکند تا بدانند آیا اطلاعاتی که درخواست میکنند بهروز هستند یا خیر.
میتوانید با گسترش ContentProvider
، منطق تازهسازی محتوای سفارشی را اضافه کنید. مطمئن شوید که روش refresh()
را نادیده می گیرید تا true
برگردانید، که به مشتریان ارائه دهنده خود نشان می دهد که خودتان سعی کرده اید داده ها را به روز کنید.
برنامه کلاینت شما می تواند صریحاً با فراخوانی روش دیگری که refresh()
نامیده می شود، محتوای تازه شده درخواست کند. هنگام فراخوانی این روش، URI داده ها را برای بازخوانی ارسال کنید.
توجه: از آنجایی که ممکن است دادهها را از طریق شبکه درخواست کنید، باید refresh()
از سمت کلاینت تنها زمانی فراخوانی کنید که نشانه قوی مبنی بر قدیمی بودن محتوا وجود داشته باشد. رایجترین دلیل برای انجام این نوع بهروزرسانی محتوا، پاسخ به حرکت تند کشیدن برای بازخوانی است، که به صراحت از رابط کاربری فعلی درخواست میکند تا محتوای بهروز را نمایش دهد.
بهبودهای JobScheduler
Android 8.0 (سطح API 26) تعدادی بهبود را در JobScheduler
معرفی می کند. این بهبودها پیروی از محدودیتهای اجرای پسزمینه جدید را برای برنامهتان آسانتر میکند، زیرا معمولاً میتوانید از کارهای زمانبندیشده برای جایگزینی سرویسهای پسزمینه محدود شده یا گیرندههای پخش ضمنی استفاده کنید.
بهروزرسانیهای JobScheduler
عبارتند از:
- اکنون می توانید یک صف کاری را با یک کار برنامه ریزی شده مرتبط کنید. برای افزودن یک آیتم کاری به صف یک کار، با
JobScheduler.enqueue()
تماس بگیرید. وقتی کار در حال اجرا است، میتواند کارهای معلق را از صف خارج کرده و پردازش کند. این عملکرد بسیاری از موارد استفاده را که قبلاً برای راهاندازی یک سرویس پسزمینه درخواست میکردند، کنترل میکند، بهویژه سرویسهایی کهIntentService
را پیادهسازی میکنند. - کتابخانه پشتیبانی Android نسخه 26.0.0 کلاس
JobIntentService
جدیدی را معرفی میکند که عملکردی مشابهIntentService
را ارائه میکند، اما هنگام اجرا بر روی Android 8.0 (سطح API 26) یا بالاتر، به جای خدمات از مشاغل استفاده میکند. - اکنون می توانید
JobInfo.Builder.setClipData()
را فراخوانی کنید تا یکClipData
با یک کار مرتبط کنید. این گزینه به شما امکان میدهد تا مجوزهای URI را با یک کار مرتبط کنید، مشابه نحوه انتشار این مجوزها بهContext.startService()
. همچنین میتوانید از مجوزهای URI با هدف در صفهای کاری استفاده کنید. - کارهای برنامه ریزی شده اکنون از چندین محدودیت جدید پشتیبانی می کنند:
-
JobInfo.isRequireStorageNotLow()
- اگر فضای ذخیره سازی موجود دستگاه کم باشد، کار اجرا نمی شود.
-
JobInfo.isRequireBatteryNotLow()
- اگر سطح باتری در آستانه بحرانی یا کمتر از آن باشد، کار اجرا نمی شود. این سطحی است که دستگاه کادر گفتگوی سیستم هشدار باتری کم را نشان می دهد.
-
NETWORK_TYPE_METERED
- کار به یک اتصال شبکه اندازهگیری شده نیاز دارد، مانند اکثر طرحهای داده تلفن همراه.
-
ذخیره سازی داده های سفارشی
Android 8.0 (سطح API 26) به شما امکان میدهد یک ذخیرهسازی داده سفارشی را به تنظیمات برگزیده خود ارائه دهید، که اگر برنامه شما تنظیمات برگزیده را در یک پایگاه داده ابری یا محلی ذخیره کند، یا اگر تنظیمات برگزیده مربوط به دستگاه باشد، میتواند مفید باشد. برای اطلاعات بیشتر در مورد اجرای ذخیرهسازی داده، به فروشگاه دادههای سفارشی مراجعه کنید.
پیشرفت های رسانه ای
VolumeShaper
یک کلاس VolumeShaper
جدید وجود دارد. از آن برای انجام انتقالهای خودکار کوتاه حجم صدا مانند fade-in، fade-out و cross fades استفاده کنید. برای اطلاعات بیشتر به کنترل دامنه با VolumeShaper مراجعه کنید.
بهبود فوکوس صوتی
برنامه های صوتی با درخواست و کنار گذاشتن فوکوس صوتی، خروجی صدا را در دستگاه به اشتراک می گذارند. یک برنامه با شروع یا توقف پخش یا کاهش صدای آن، تغییرات فوکوس را کنترل می کند. یک کلاس AudioFocusRequest
جدید وجود دارد. با استفاده از این کلاس بهعنوان پارامتر requestAudioFocus()
، برنامهها قابلیتهای جدیدی در هنگام مدیریت تغییرات در فوکوس صوتی دارند: دویدن خودکار و افزایش فوکوس با تأخیر .
معیارهای رسانه
یک متد getMetrics()
جدید یک شیء PersistableBundle
حاوی اطلاعات پیکربندی و عملکرد را برمیگرداند که به صورت نقشهای از ویژگیها و مقادیر بیان میشود. متد getMetrics()
برای این کلاس های رسانه تعریف شده است:
-
MediaPlayer.getMetrics()
-
MediaRecorder.getMetrics()
-
MediaCodec.getMetrics()
-
MediaExtractor.getMetrics()
معیارها برای هر نمونه به طور جداگانه جمعآوری میشوند و در طول عمر نمونه باقی میمانند. اگر هیچ معیاری در دسترس نباشد، روش صفر را برمیگرداند. معیارهای واقعی بازگشتی به کلاس بستگی دارد.
MediaPlayer
شروع در Android 8.0 (سطح API 26) MediaPlayer میتواند مواد محافظتشده با DRM و رسانه رمزگذاریشده در سطح نمونه HLS را پخش کند.
Android 8.0 یک فرمان seekTo()
اضافه بار را معرفی می کند که کنترل دقیقی را هنگام جستجوی یک فریم ارائه می دهد. این شامل یک پارامتر دوم است که یک حالت جستجو را مشخص می کند:
-
SEEK_PREVIOUS_SYNC
موقعیت رسانه را به یک قاب همگام (یا کلید) مرتبط با منبع داده ای که درست قبل یا در زمان معین قرار دارد، منتقل می کند. -
SEEK_NEXT_SYNC
موقعیت رسانه را به یک قاب همگام سازی (یا کلید) مرتبط با منبع داده که درست بعد از یا در زمان معین قرار دارد، منتقل می کند. -
SEEK_CLOSEST_SYNC
موقعیت رسانه را به یک قاب همگام سازی (یا کلید) مرتبط با منبع داده ای که نزدیکترین یا در زمان معین قرار دارد، منتقل می کند. -
SEEK_CLOSEST
موقعیت رسانه را به یک قاب ( نه لزوماً همگامسازی یا فریم کلیدی ) مرتبط با منبع دادهای که نزدیکترین یا در زمان معین قرار دارد، منتقل میکند.
هنگام جستجوی مداوم، برنامهها باید از هر یک از حالتهای SEEK_
به جای SEEK_CLOSEST
استفاده کنند که نسبتاً کندتر اجرا میشود اما میتواند دقیقتر باشد.
MediaRecorder
- MediaRecorder اکنون از فرمت MPEG2_TS پشتیبانی می کند که برای پخش جریانی مفید است:
کاتلین
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
جاوا
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
MediaRecorder.OutputFormat
را ببینید -
MediaMuxer
اکنون می تواند هر تعداد پخش صوتی و تصویری را مدیریت کند. شما دیگر محدود به یک آهنگ صوتی و/یا یک آهنگ ویدیویی نیستید. ازaddTrack()
برای ترکیب هر تعداد آهنگ که دوست دارید استفاده کنید. -
MediaMuxer
همچنین می تواند یک یا چند تراک فراداده حاوی اطلاعات تعریف شده توسط کاربر در هر فریم اضافه کند. فرمت ابرداده توسط برنامه شما تعریف می شود. آهنگ فراداده فقط برای کانتینرهای MP4 پشتیبانی می شود.
ابرداده می تواند برای پردازش آفلاین مفید باشد. به عنوان مثال، سیگنال های ژیروسکوپ از سنسور می تواند برای انجام تثبیت ویدئو استفاده شود.
هنگام افزودن یک تراک فراداده، فرمت mime آهنگ باید با پیشوند "application/" شروع شود. نوشتن ابرداده مانند نوشتن دادههای ویدیویی/صوتی است با این تفاوت که دادهها از MediaCodec
نمیآیند. در عوض، برنامه یک ByteBuffer
با مهر زمانی مرتبط به متد writeSampleData()
ارسال می کند. مُهر زمانی باید در پایه زمانی تراکهای ویدیویی و صوتی باشد.
فایل MP4 تولید شده از TextMetaDataSampleEntry
تعریف شده در بخش 12.3.3.2 ISOBMFF برای سیگنال دادن به فرمت mime فراداده استفاده می کند. هنگام استفاده از MediaExtractor
برای استخراج فایل با آهنگ فراداده، فرمت mime فراداده در MediaFormat
استخراج می شود.
دسترسی به فایل های رسانه ای بهبود یافته است
چارچوب دسترسی به حافظه (SAF) به برنامهها اجازه میدهد تا یک DocumentsProvider
سفارشی را در معرض دید قرار دهند، که میتواند دسترسی به فایلهای موجود در منبع داده را برای برنامههای دیگر فراهم کند. در واقع، ارائهدهنده اسناد حتی میتواند دسترسی به فایلهایی را که در فضای ذخیرهسازی شبکه قرار دارند یا از پروتکلی مانند پروتکل انتقال رسانه (MTP) استفاده میکنند، فراهم کند.
با این حال، دسترسی به فایلهای رسانهای بزرگ از یک منبع داده از راه دور، چالشهایی را ایجاد میکند:
- پخش کننده های رسانه نیاز به دسترسی قابل جستجو به یک فایل از یک ارائه دهنده اسناد دارند. در مواردی که یک فایل رسانه ای بزرگ در یک منبع داده از راه دور قرار دارد، ارائه دهنده اسناد باید همه داده ها را از قبل واکشی کند و یک توصیف کننده فایل فوری ایجاد کند. پخش کننده رسانه نمی تواند فایل را بدون توصیف کننده فایل پخش کند، بنابراین تا زمانی که ارائه دهنده اسناد دانلود فایل را به پایان نرساند، پخش نمی تواند آغاز شود.
- مدیران مجموعه رسانهها، مانند برنامههای عکس، باید یک سری از URIهای دسترسی را طی کنند تا از طریق پوشههای محدودهدار، به رسانهای برسند که روی کارت SD خارجی ذخیره شده است. این الگوی دسترسی، عملیات انبوه را روی رسانه ها - مانند جابجایی، کپی و حذف - بسیار کند می کند.
- مدیران مجموعه رسانه نمی توانند مکان سند را با توجه به URI آن تعیین کنند. این امر این نوع برنامهها را دشوار میسازد تا به کاربران اجازه دهند مکان ذخیره یک فایل رسانه را انتخاب کنند.
Android 8.0 با بهبود چارچوب دسترسی به فضای ذخیره سازی، به هر یک از این چالش ها رسیدگی می کند.
ارائه دهندگان اسناد سفارشی
با شروع Android 8.0، Storage Access Framework به ارائهدهندگان اسناد سفارشی اجازه میدهد تا توصیفکنندههای فایل قابل جستجو برای فایلهای موجود در منبع داده از راه دور ایجاد کنند. SAF میتواند یک فایل را برای دریافت توصیفگر فایل قابل جستجوی بومی باز کند. سپس SAF درخواست های بایت گسسته را به ارائه دهنده اسناد تحویل می دهد. این ویژگی به ارائهدهنده اسناد اجازه میدهد تا محدوده دقیق بایتهایی را که برنامه پخشکننده رسانه درخواست کرده است، بهجای ذخیره کردن کل فایل از قبل، برگرداند.
برای استفاده از این ویژگی، باید متد جدید StorageManager.openProxyFileDescriptor()
را فراخوانی کنید. متد openProxyFileDescriptor()
یک شی ProxyFileDescriptorCallback
را به عنوان یک تماس می پذیرد. SAF هر زمان که یک برنامه مشتری عملیات فایل را بر روی توصیفگر فایل بازگردانده شده از ارائه دهنده اسناد انجام می دهد، پاسخ تماس را فراخوانی می کند.
دسترسی مستقیم به اسناد
از Android 8.0 (سطح API 26)، میتوانید از متد getDocumentUri()
برای دریافت URI استفاده کنید که به همان سندی که mediaUri
داده شده ارجاع میدهد. با این حال، از آنجایی که URI بازگشتی توسط یک DocumentsProvider
پشتیبانی میشود، مدیران مجموعه رسانهها میتوانند مستقیماً به سند دسترسی داشته باشند، بدون اینکه نیازی به عبور از درختهای دایرکتوریهای محدودهدار باشند. در نتیجه، مدیران رسانه می توانند عملیات فایل روی سند را با سرعت قابل توجهی انجام دهند.
احتیاط: متد getDocumentUri()
فقط فایل های رسانه ای را مکان یابی می کند. به برنامه ها اجازه دسترسی به آن فایل ها را نمی دهد. برای کسب اطلاعات بیشتر در مورد نحوه دریافت مجوز دسترسی به فایل های رسانه ای، به مستندات مرجع مراجعه کنید.
مسیرهای رسیدن به اسناد
هنگام استفاده از Storage Access Framework در Android 8.0 (سطح API 26)، میتوانید از متد findDocumentPath()
که در هر دو کلاس DocumentsContract
و DocumentsProvider
موجود است، برای تعیین مسیر از ریشه یک سیستم فایل با شناسه سند استفاده کنید. متد این مسیر را در یک شی DocumentsContract.Path
برمی گرداند. در مواردی که یک سیستم فایل دارای چندین مسیر تعریف شده برای یک سند است، این روش مسیری را که اغلب برای رسیدن به سند با شناسه داده شده استفاده میشود، برمیگرداند.
این قابلیت به ویژه در حالات زیر مفید است:
- برنامه شما از یک گفتگوی "ذخیره به عنوان" استفاده می کند که مکان یک سند خاص را نشان می دهد.
- برنامه شما پوشهها را در نمای نتایج جستجو نشان میدهد و اگر کاربر آن پوشه را انتخاب کند، باید اسناد فرزند را که در یک پوشه خاص هستند بارگیری کند.
توجه: اگر برنامه شما اجازه دسترسی به برخی از اسناد موجود در مسیر را دارد، مقدار بازگشتی findDocumentPath()
فقط شامل پوشهها و اسنادی است که برنامه شما میتواند به آنها دسترسی داشته باشد.
نظارت بر پخش صدا
سرویس سیستم AudioManager
فهرستی از اشیاء AudioPlaybackConfiguration
فعال را نگهداری می کند که هر کدام حاوی اطلاعات مربوط به یک جلسه پخش صوتی خاص است. برنامه شما میتواند مجموعه پیکربندیهای فعال فعلی را با فراخوانی getActivePlaybackConfigurations()
بازیابی کند.
از Android 8.0 (سطح API 26)، میتوانید تماسی را ثبت کنید که در صورت تغییر یک یا چند شیء AudioPlaybackConfiguration
به برنامه شما اطلاع میدهد. برای انجام این کار، registerAudioPlaybackCallback()
را فراخوانی کنید که در نمونه ای از AudioManager.AudioPlaybackCallback
ارسال می شود. کلاس AudioManager.AudioPlaybackCallback
شامل روش onPlaybackConfigChanged()
است که سیستم هنگام تغییر پیکربندی پخش صدا ، آن را صدا می کند.
قابلیت اتصال
Wi-Fi آگاه است
Android 8.0 (API سطح 26) پشتیبانی از Wi-Fi را آگاه می کند ، که بر اساس مشخصات شبکه آگاهی همسایه (NAN) است. در دستگاه هایی با سخت افزار آگاه Wi-Fi مناسب ، برنامه ها و دستگاه های اطراف می توانند بدون داشتن نقطه دسترسی به اینترنت از طریق Wi-Fi کشف و ارتباط برقرار کنند. ما در حال کار با شرکای سخت افزاری خود هستیم تا در اسرع وقت فناوری آگاهی Wi-Fi را به دستگاه ها بیاوریم. برای کسب اطلاعات در مورد نحوه ادغام Wi-Fi در برنامه خود ، به Wi-Fi And مراجعه کنید.
بلوتوث
Android 8.0 (API سطح 26) با افزودن ویژگی های زیر ، پشتیبانی بلوتوث پلتفرم را غنی می کند:
- پشتیبانی از استاندارد AVRCP 1.4 ، که امکان مرور کتابخانه را امکان پذیر می کند.
- پشتیبانی از استاندارد بلوتوث کم انرژی (BLE) 5.0.
- ادغام کدک LDAC سونی در پشته بلوتوث.
جفت شدن دستگاه همراه
Android 8.0 (API سطح 26) API را فراهم می کند که به شما امکان می دهد هنگام تلاش برای جفت شدن با دستگاه های همراه از طریق بلوتوث ، BLE و Wi-Fi ، گفتگوی درخواست جفت شدن را سفارشی کنید. برای اطلاعات بیشتر ، به جفت شدن دستگاه همراه مراجعه کنید.
برای اطلاعات بیشتر در مورد استفاده از بلوتوث در Android ، به راهنمای بلوتوث مراجعه کنید. برای تغییر در بلوتوث که مختص Android 8.0 (API سطح 26) است ، به بخش بلوتوث صفحه تغییر رفتار Android 8.0 مراجعه کنید.
اشتراک گذاری
اشتراک گذاری هوشمند
Android 8.0 (API سطح 26) در مورد ترجیحات اشتراک گذاری شخصی کاربران می آموزد و برای هر نوع محتوا که برنامه های مناسبی برای به اشتراک گذاشتن با آنها هستند ، بهتر درک می کنند. به عنوان مثال ، اگر کاربر از یک رسید عکس بگیرد ، Android 8.0 می تواند یک برنامه ردیابی هزینه را پیشنهاد کند. اگر کاربر از سلفی استفاده کند ، یک برنامه رسانه های اجتماعی می تواند بهتر تصویر را اداره کند. Android 8.0 به طور خودکار تمام این الگوهای را با توجه به ترجیحات شخصی کاربران می آموزد.
به اشتراک گذاری هوشمند برای انواع محتوا غیر از image
، مانند audio
، video
، text
، URL
و غیره کار می کند.
برای فعال کردن اشتراک هوشمند ، یک ArrayList
حداکثر سه حاشیه نویسی را به قصد اشتراک محتوا اضافه کنید. حاشیه نویسی ها باید مؤلفه های اصلی یا مباحث موجود در محتوا را توصیف کنند. مثال کد زیر نحوه اضافه کردن حاشیه نویسی به قصد را نشان می دهد:
کاتلین
val annotations: ArrayList<String> = arrayListOf( "topic1", "topic2", "topic3" ) intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations )
جاوا
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
برای کسب اطلاعات دقیق در مورد حاشیه نویسی های اشتراک گذاری هوشمند ، به EXTRA_CONTENT_ANNOTATIONS
مراجعه کنید.
طبقه بندی کننده متن
در دستگاه های سازگار ، برنامه ها می توانند از یک طبقه بندی متن جدید استفاده کنند تا بررسی کنند که آیا یک رشته با یک نوع موجودیت طبقه بندی شناخته شده مطابقت دارد و گزینه های انتخاب پیشنهادی را دریافت می کند. اشخاص شناخته شده توسط سیستم شامل آدرس ، URL ، شماره تلفن و آدرس های ایمیل هستند. برای اطلاعات بیشتر ، به TextClassifier
مراجعه کنید.
قابلیت دسترسی
Android 8.0 (API سطح 26) از چندین ویژگی دسترسی جدید برای توسعه دهندگان که خدمات دسترسی خود را ایجاد می کنند پشتیبانی می کند:
- یک دسته از حجم جدید برای تنظیم حجم دسترسی .
- حرکات اثر انگشت به عنوان مکانیسم ورودی.
- متن چند زبانه به قابلیت های گفتار .
- یک میانبر دسترسی مبتنی بر سخت افزار برای دسترسی سریع به یک سرویس دسترسی ترجیحی.
- پشتیبانی از حرکات مداوم یا توالی برنامه ای سکته مغزی.
- یک دکمه دسترسی برای فراخوانی یکی از چندین ویژگی قابل دسترسی فعال (فقط در دستگاه هایی که از یک منطقه ناوبری با ارائه نرم افزار استفاده می کنند) موجود است.
- مقادیر محدوده یک طرفه استاندارد .
- چندین ویژگی برای پردازش متن راحت تر ، از جمله متن اشاره و مکان شخصیت های متن روی صفحه.
امنیت و حریم خصوصی
مجوزها
Android 8.0 (API سطح 26) چندین مجوز جدید مربوط به تلفن را معرفی می کند:
- مجوز
ANSWER_PHONE_CALLS
به برنامه شما اجازه می دهد تا به طور برنامه ای به تماس های تلفنی ورودی پاسخ دهد. برای رسیدگی به یک تماس تلفنی دریافتی در برنامه خود ، می توانید از روشacceptRingingCall()
استفاده کنید. - مجوز
READ_PHONE_NUMBERS
به برنامه شما دسترسی می دهد تا دسترسی به شماره تلفن های ذخیره شده در یک دستگاه را بخوانید.
این مجوز هر دو به عنوان خطرناک طبقه بندی می شوند و هر دو بخشی از گروه مجوز PHONE
هستند.
دسترسی جدید حساب و API های کشف
Android 8.0 (API سطح 26) چندین پیشرفت در نحوه دسترسی برنامه ها به حساب کاربری را ارائه می دهد. برای حسابهایی که آنها مدیریت می کنند ، تأیید کنندگان می توانند از خط مشی خود استفاده کنند تا تصمیم بگیرند که آیا حساب ها را از آن مخفی می کنند یا حسابها را به یک برنامه فاش می کنند. سیستم Android برنامه هایی را ردیابی می کند که می توانند به یک حساب خاص دسترسی پیدا کنند.
در نسخه های قبلی Android ، برنامه هایی که می خواستند لیست حساب های کاربری را ردیابی کنند ، باید در مورد همه حساب ها ، از جمله حساب های دارای انواع نامربوط ، به روزرسانی کنند. Android 8.0 افزودنی افزودنی addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
، که به برنامه ها اجازه می دهد لیستی از انواع حساب را تعیین کنند که برای آنها باید دریافت کنند.
API تغییر می کند
AccountManager شش روش جدید را برای کمک به تأیید اعتبار دهندگان ارائه می دهد که برنامه ها می توانند یک حساب را مشاهده کنند:
-
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: سطح دید را برای یک حساب کاربری خاص و ترکیب بسته تعیین می کند. -
getAccountVisibility(android.accounts.Account, java.lang.String)
: سطح دید برای یک حساب کاربری خاص و ترکیب بسته را بدست می آورد. -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: به تأیید کنندگان اجازه می دهد تا حساب ها و سطح دید برای یک بسته معین را بدست آورند. -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: به معتادان اجازه می دهد تا مقادیر دیدنی ذخیره شده را برای یک حساب معین دریافت کنند. -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: اجازه می دهد تا تأیید کنندگان بتوانند مقادیر دید یک حساب را آغاز کنند . -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
: یک شنوندهOnAccountsUpdateListener
را به موضوعAccountManager
اضافه می کند. این سیستم هر زمان که لیست حساب های موجود در دستگاه تغییر کند ، این شنونده را صدا می کند.
Android 8.0 (API سطح 26) برای مشخص کردن سطح دید برای برنامه های کاربردی که با استفاده از setAccountVisibility(android.accounts.Account, java.lang.String, int)
تنظیم نشده اند ، دو مقدار نام بسته ویژه را معرفی می کند. مقدار Visibility PACKAGE_NAME_KEY_LEGACY_VISIBLE
برای برنامه هایی که اجازه GET_ACCOUNTS
را دارند ، و نسخه های هدف Android پایین تر از Android 8.0 اعمال می شود ، یا امضای آنها با تأیید کننده هدفمند هر نسخه Android مطابقت دارد. PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
یک مقدار دید پیش فرض را برای برنامه هایی که قبلاً تنظیم نشده بودند فراهم می کند و برای کدام PACKAGE_NAME_KEY_LEGACY_VISIBLE
کاربردی نیست.
برای کسب اطلاعات بیشتر در مورد API های دسترسی جدید و کشف حساب جدید ، به مرجع AccountManager
و OnAccountsUpdateListener
مراجعه کنید.
تست کردن
تست ابزار دقیق
Android 8.0 (API سطح 26) بخش های زیر را برای پشتیبانی اضافی برای تست های ابزار دقیق برنامه شما ارائه می دهد.
در برابر فرآیندهای برنامه غیر پیش فرض اجرا کنید
اکنون می توانید مشخص کنید که یک تست ابزار دقیق باید در برابر یک فرآیند خارج از فرآیند پیش فرض برنامه شما اجرا شود. اگر برنامه شما شامل چندین فعالیت باشد که در فرآیندهای مختلف اجرا می شود ، این پیکربندی مفید است.
برای تعریف ابزار دقیق فرآیند غیر پیش فرض ، به پرونده مانیفست خود بروید ، سپس به عنصر مورد نظر <instrumentation>
. ویژگی android:targetProcess
را اضافه کنید و مقدار آن را روی یکی از موارد زیر تنظیم کنید:
- نام یک فرآیند خاص.
- لیستی از نام فرآیند جدا از کاما.
- یک کارت وحشی (
"*"
) ، که به ابزار دقیق اجازه می دهد تا در برابر هر فرآیند راه اندازی شده که کد را در بسته مشخص شده در ویژگیandroid:targetPackage
اجرا می کند ، اجرا کند.
در حالی که آزمون ابزار دقیق شما در حال اجرا است ، می توانید با فراخوانی getProcessName()
کدام فرآیند را آزمایش کنید.
گزارش نتایج در طول آزمون
اکنون می توانید نتایج را گزارش کنید در حالی که آزمون ابزار دقیق شما با فراخوانی addResults()
اجرا می شود.
اهداف را برای آزمایشات مسخره کنید
برای آسانتر کردن تست های جداگانه و مستقل UI برای فعالیت های برنامه خود ، Android 8.0 (API سطح 26) روش onStartActivity()
را معرفی می کند. شما این روش را در یک زیر کلاس سفارشی از کلاس Instrumentation.ActivityMonitor
نادیده می گیرید تا یک هدف خاص را که کلاس آزمون شما فراخوانی می کند ، انجام دهید.
هنگامی که کلاس آزمون شما از هدف فراخوانی می کند ، این روش به جای اجرای خود هدف ، یک Instrumentation.ActivityResult
خرد را باز می گرداند. با استفاده از این منطق هدف مسخره در تست های خود ، می توانید بر نحوه آماده سازی فعالیت خود و رسیدگی به قصد انتقال به یک فعالیت متفاوت یا یک برنامه کاملاً متفاوت تمرکز کنید.
زمان اجرا و ابزار
بهینه سازی های سکو
Android 8.0 (API سطح 26) زمان اجرا و سایر بهینه سازی ها را به سکو می آورد که منجر به تعدادی از بهبود عملکرد می شود. این بهینه سازی ها شامل جمع آوری زباله های سازش همزمان ، استفاده کارآمدتر از حافظه و محل کد است.
این بهینه سازی ها منجر به زمان بوت شدن سریعتر و همچنین عملکرد بهتر در سیستم عامل و برنامه ها می شود.
پشتیبانی از زبان جاوا به روز شده
Android 8.0 (API سطح 26) پشتیبانی از چندین API Java OpenJDK اضافی را اضافه می کند:
-
java.time
از OpenJDK 8. -
java.nio.file
وjava.lang.invoke
از OpenJDK 7.
برای کسب اطلاعات بیشتر در مورد کلاس ها و روش های موجود در این بسته های تازه اضافه شده ، به اسناد مرجع API مراجعه کنید.
اگر می خواهید از ویژگی های زبان Java 8 در Android Studio استفاده کنید ، باید آخرین نسخه پیش نمایش را بارگیری کنید .
API های چارچوب Android ICU4J به روز شده
Android 8.0 (API سطح 26) API های Android ICU4J را گسترش می دهد - که زیر مجموعه ای از API های ICU4J است - برای توسعه دهندگان برنامه برای استفاده از بسته android.icu
. این API ها از داده های محلی سازی موجود در دستگاه استفاده می کنند ، بنابراین می توانید با تدوین کتابخانه های ICU4J در APK خود ، ردپای APK خود را کاهش دهید.
سطح API Android | نسخه ICU | نسخه CLDR | نسخه یونیکد |
---|---|---|---|
Android 7.0 (API سطح 24) ، Android 7.1 (سطح API 25) | 56 | 28 | 8.0 |
Android 8.0 (API سطح 26) | 58.2 | 30.0.3 | 9.0 |
برای کسب اطلاعات بیشتر در مورد بین المللی سازی در اندروید ، از جمله پشتیبانی ICU4J ، به بین المللی سازی در Android مراجعه کنید.
شرکت اندرویدی
ویژگی های جدید شرکت ها و API ها برای دستگاه هایی که Android 8.0 را اجرا می کنند (API سطح 26) معرفی شده اند. نکات برجسته شامل موارد زیر است:
- پروفایل های کار در دستگاه های کاملاً مدیریت شده به شرکت ها اجازه می دهد تا ضمن مدیریت هر دو ، از داده های شخصی جدا شوند.
- نمایندگی API به صاحبان دستگاه و صاحبان پروفایل اجازه می دهد تا مدیریت برنامه را به برنامه های دیگر اختصاص دهند.
- بهبود تجربه کاربر در جریان تأمین (از جمله گزینه های سفارشی سازی جدید) زمان تنظیم را کاهش می دهد.
- کنترل های جدید بر روی بلوتوث ، Wi-Fi ، پشتیبان گیری و امنیت به شرکت ها اجازه می دهد تا بیشتر دستگاه را مدیریت کنند. ورود به سیستم فعالیت شبکه به شرکت ها کمک می کند تا مشکلات را ردیابی کنند.
برای کسب اطلاعات بیشتر در مورد این و سایر API ها و ویژگی های جدید Android Enterprise ، به Android در شرکت مراجعه کنید.