اندروید 11 ویژگی های جدید و API های عالی را برای توسعه دهندگان معرفی می کند. بخشهای زیر به شما کمک میکند تا با ویژگیهای برنامههای خود آشنا شوید و با APIهای مرتبط شروع کنید.
برای فهرست دقیق APIهای جدید، اصلاح شده و حذف شده، گزارش تفاوت API را بخوانید. برای جزئیات بیشتر در مورد APIهای جدید به مرجع Android API مراجعه کنید - APIهای جدید برای مشاهده برجسته شده اند. همچنین، برای اطلاع از مناطقی که تغییرات پلت فرم ممکن است بر برنامههای شما تأثیر بگذارد، حتماً تغییرات رفتار Android 11 را برای برنامههایی که Android R را هدف قرار میدهند و برای همه برنامهها و همچنین تغییرات حریم خصوصی را بررسی کنید.
تجربیات جدید
کنترل های دستگاه
Android 11 شامل یک ControlsProviderService
API جدید است که میتوانید از آن برای نمایش کنترلهای دستگاههای متصل و خارجی استفاده کنید. این کنترلها در قسمت کنترلهای دستگاه در منوی پاور اندروید ظاهر میشوند. برای اطلاعات بیشتر، به کنترل دستگاه های خارجی مراجعه کنید.
کنترل رسانه ها
اندروید 11 نحوه نمایش کنترل های رسانه را به روز می کند. کنترل های رسانه در نزدیکی تنظیمات سریع ظاهر می شوند. جلسات از چند برنامه در یک چرخ فلک قابل کشیدن مرتب شده اند که شامل پخش جریانی به صورت محلی در تلفن، پخش جریانی از راه دور، مانند مواردی که در دستگاه های خارجی یا جلسات پخش پخش می شوند، و جلسات قبلی و قابل ازسرگیری به ترتیبی که آخرین بار پخش شده اند، مرتب می شوند.
کاربران می توانند جلسات قبلی را بدون نیاز به راه اندازی برنامه از چرخ فلک مجدداً راه اندازی کنند. هنگامی که پخش شروع می شود، کاربر به روش معمول با کنترل های رسانه در تعامل است.
برای اطلاعات بیشتر، به کنترلهای رسانه مراجعه کنید.
صفحه نمایش ها
پشتیبانی بهتر از نمایشگرهای آبشار
اندروید 11 چندین API را برای پشتیبانی از نمایشگرهای آبشاری ارائه میکند، نمایشگرهایی که در اطراف لبه دستگاه قرار میگیرند. این نمایشگرها به عنوان گونه ای از نمایشگرهای دارای بریدگی نمایشگر در نظر گرفته می شوند. متدهای موجود DisplayCutout
.getSafeInset…()
اکنون ورودی ایمن را برمی گرداند تا از مناطق آبشار و همچنین برش ها جلوگیری شود. برای ارائه محتوای برنامه خود در منطقه آبشار، موارد زیر را انجام دهید:
با
DisplayCutout.getWaterfallInsets()
تماس بگیرید تا ابعاد دقیق آبشار را بدست آورید.ویژگی layout پنجره
layoutInDisplayCutoutMode
را رویLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
تنظیم کنید تا به پنجره اجازه دهد تا در قسمت های برش و آبشار در تمام لبه های صفحه گسترش یابد. باید مطمئن شوید که هیچ محتوای ضروری در قسمت های برش یا آبشار وجود ندارد.
سنسور زاویه لولا و تاشو
Android 11 این امکان را برای برنامههایی که روی دستگاههایی با پیکربندی صفحهنمایش مبتنی بر لولا اجرا میکنند، با ارائه یک حسگر جدید با TYPE_HINGE_ANGLE
و یک SensorEvent
جدید که میتواند زاویه لولا را نظارت کند و اندازهگیری در درجهای بین دو انتگرال ارائه میدهد، زاویه لولا را تعیین کند، ممکن میسازد. قطعات دستگاه میتوانید از این اندازهگیریهای خام برای اجرای انیمیشنهای دانهای در حالی که کاربر دستگاه را دستکاری میکند، استفاده کنید.
Foldables را ببینید.
گفتگوها
بهبود مکالمه
اندروید 11 تعدادی بهبود در نحوه مدیریت مکالمات ایجاد می کند. مکالمات، ارتباطات دوطرفه و بلادرنگ بین دو یا چند نفر هستند. به این مکالمات اهمیت ویژه ای داده می شود و کاربران چندین گزینه جدید در نحوه تعامل با آنها دارند.
برای اطلاعات بیشتر درباره مکالمات و نحوه پشتیبانی برنامه شما از آنها، به افراد و مکالمات مراجعه کنید.
حباب های چت
حبابها اکنون در دسترس توسعهدهندگان هستند تا به مکالمات در سراسر سیستم کمک کنند. Bubbles یک ویژگی آزمایشی در اندروید 10 بود که از طریق یک گزینه توسعه دهنده فعال شد. در اندروید 11، این دیگر ضروری نیست.
اگر برنامهای Android 11 (سطح API 30) یا بالاتر را هدف قرار دهد، اعلانهای آن بهصورت حباب نشان داده نمیشوند مگر اینکه الزامات مکالمه جدید را برآورده کنند. به طور خاص، اعلان باید با یک میانبر همراه باشد.
قبل از اندروید 11، اگر میخواستید یک اعلان حباب شود، باید به صراحت مشخص میکردید که اعلان همیشه در حالت رابط کاربری سند راهاندازی میشود. با شروع اندروید 11، دیگر نیازی به انجام صریح آن تنظیمات ندارید. اگر اعلان حباب دار باشد، پلتفرم به طور خودکار اعلان را طوری تنظیم می کند که همیشه در حالت رابط کاربر سند راه اندازی شود.
تعدادی بهبود در عملکرد حباب وجود دارد و کاربران در فعال کردن و غیرفعال کردن حباب ها از هر برنامه انعطاف پذیری بیشتری دارند. برای توسعهدهندگانی که پشتیبانی آزمایشی را اجرا کردهاند، چند تغییر در APIها در Android 11 وجود دارد:
- سازنده
BubbleMetadata.Builder()
بدون پارامتر منسوخ شده است. در عوض، از یکی از دو سازنده جدیدBubbleMetadata.Builder(PendingIntent, Icon)
یاBubbleMetadata.Builder(String)
استفاده کنید. - با فراخوانی
BubbleMetadata.Builder(String)
BubbleMetadata
از شناسه میانبر ایجاد کنید. رشته ارسال شده باید با شناسه میانبر ارائه شده بهNotification.Builder
مطابقت داشته باشد. - آیکون های حباب را با
Icon.createWithContentUri()
یا با متد جدیدcreateWithAdaptiveBitmapContentUri()
ایجاد کنید.
نشانگرهای بصری 5G
برای اطلاعات در مورد نمایش نشانگرهای 5G در دستگاههای کاربران، به کاربران خود بگویید چه زمانی از 5G استفاده میکنند .
حریم خصوصی
اندروید 11 تعداد زیادی تغییرات و محدودیت ها را برای افزایش حریم خصوصی کاربران معرفی می کند. برای کسب اطلاعات بیشتر به صفحه حریم خصوصی مراجعه کنید.
امنیت
به روز رسانی احراز هویت بیومتریک
برای کمک به کنترل سطح امنیت دادههای برنامهتان، اندروید 11 چندین پیشرفت را برای احراز هویت بیومتریک ارائه میکند. این تغییرات همچنین در کتابخانه بیومتریک Jetpack ظاهر می شود.
انواع احراز هویت
اندروید 11 رابط کاربری BiometricManager.Authenticators
را معرفی می کند که می توانید از آن برای اعلام انواع احراز هویتی که برنامه شما پشتیبانی می کند استفاده کنید.
تعیین کنید که کدام نوع احراز هویت استفاده شده است
پس از احراز هویت کاربر، می توانید با فراخوانی getAuthenticationType()
بررسی کنید که آیا کاربر با استفاده از اعتبار دستگاه یا اعتبار بیومتریک احراز هویت کرده است.
پشتیبانی اضافی از کلیدهای تأیید اعتبار در ازای هر استفاده
اندروید 11 پشتیبانی بیشتری برای احراز هویت با استفاده از کلیدهای احراز هویت به ازای استفاده فراهم می کند.
روش های منسوخ شده
اندروید 11 روش های زیر را منسوخ می کند:
- متد
setDeviceCredentialAllowed()
. - متد
setUserAuthenticationValidityDurationSeconds()
. - نسخه بارگذاری شده
canAuthenticate()
که هیچ آرگومان نمی گیرد.
به اشتراک گذاری امن مجموعه داده های بزرگ
در برخی موقعیتها، مانند مواردی که شامل یادگیری ماشینی یا پخش رسانهها میشود، برنامه شما ممکن است بخواهد از همان مجموعه داده بزرگ به عنوان یک برنامه دیگر استفاده کند. در نسخههای قبلی اندروید، برنامه شما و یک برنامه دیگر هر کدام باید یک نسخه جداگانه از همان مجموعه داده را دانلود کنند.
برای کمک به کاهش افزونگی دادهها، هم از طریق شبکه و هم روی دیسک، Android 11 به این مجموعه دادههای بزرگ اجازه میدهد تا با استفاده از حبابهای داده به اشتراک گذاشته شده در حافظه پنهان روی دستگاه ذخیره شوند. برای کسب اطلاعات بیشتر درباره اشتراکگذاری مجموعههای داده، راهنمای عمیق اشتراکگذاری مجموعههای داده بزرگ را ببینید.
رمزگذاری مبتنی بر فایل را پس از راه اندازی مجدد OTA بدون اعتبار کاربر انجام دهید
پس از تکمیل بهروزرسانی OTA و راهاندازی مجدد دستگاه، کلیدهای رمزگذاری شده اعتبار (CE) که در فضای ذخیرهسازی محافظت شده با اعتبار قرار میگیرند، فوراً برای عملیات رمزگذاری مبتنی بر فایل (FBE) در دسترس هستند. این بدان معناست که پس از بهروزرسانی OTA، برنامه شما میتواند عملیاتی را که به کلیدهای CE نیاز دارند، قبل از وارد کردن پین، الگو یا رمز عبور کاربر از سر بگیرد.
عملکرد و کیفیت
اشکال زدایی بی سیم
Android 11 از استقرار و اشکال زدایی برنامه شما به صورت بی سیم از ایستگاه کاری شما از طریق Android Debug Bridge (adb) پشتیبانی می کند. به عنوان مثال، میتوانید برنامه قابل اشکالزدایی خود را بدون اتصال فیزیکی دستگاه خود از طریق USB و درگیری با مشکلات رایج اتصال USB، مانند نصب درایور، در چندین دستگاه راه دور اجرا کنید. برای اطلاعات بیشتر، به اجرای برنامه ها در دستگاه سخت افزاری مراجعه کنید.
نصب APK افزایشی ADB
نصب فایلهای APK بزرگ (+2 گیگابایت) روی دستگاه میتواند زمان زیادی طول بکشد، حتی اگر فقط یک تغییر کوچک در یک برنامه ایجاد شود. ADB (Android Debug Bridge) نصب تدریجی APK با نصب کافی APK برای راهاندازی برنامه در حالی که دادههای باقیمانده را در پسزمینه پخش میکند، این فرآیند را تسریع میکند. adb install
اگر توسط دستگاه پشتیبانی شود و آخرین SDK Platform-Tools را نصب کرده باشید، به طور خودکار از این ویژگی استفاده می کند. اگر پشتیبانی نمی شود، روش نصب پیش فرض به صورت بی صدا استفاده می شود.
برای استفاده از این ویژگی از دستور adb زیر استفاده کنید. اگر دستگاه از نصب تدریجی پشتیبانی نمیکند، دستور از کار میافتد و توضیحی مفصل چاپ میکند.
adb install --incremental
قبل از اجرای یک نصب افزایشی APK ADB، باید APK خود را امضا کنید و یک فایل APK Signature Scheme v4 ایجاد کنید. فایل امضای v4 باید در کنار APK قرار گیرد تا این ویژگی کار کند.
تشخیص خطا با استفاده از تخصیص دهنده حافظه بومی
GWP-ASan یک ویژگی تخصیص دهنده حافظه بومی است که به یافتن اشکالات استفاده پس از استفاده رایگان و سرریز بافر پشته کمک می کند. می توانید این ویژگی را به صورت سراسری یا برای فرآیندهای فرعی خاص برنامه خود فعال کنید. برای کسب اطلاعات بیشتر، راهنمای GWP-Asan را ببینید.
API شبکه های عصبی 1.3
Android 11 API شبکه های عصبی (NNAPI) را گسترش و بهبود می بخشد.
عملیات جدید
NNAPI 1.3 یک نوع عملوند جدید، TENSOR_QUANT8_ASYMM_SIGNED
را برای پشتیبانی از طرح کوانتیزهسازی جدید TensorFlow Lite معرفی میکند.
علاوه بر این، NNAPI 1.3 عملیات جدید زیر را معرفی می کند:
-
QUANTIZED_LSTM
-
IF
-
WHILE
-
ELU
-
HARD_SWISH
-
FILL
-
RANK
کنترل های جدید ML
NNAPI 1.3 کنترلهای جدیدی را برای کمک به اجرای روان یادگیری ماشین معرفی میکند:
QoS API: API کیفیت خدمات جدید شامل پشتیبانی از اولویت بندی و ضرب الاجل در NNAPI با عملکردهای جدید زیر است:
ورودی/خروجی دامنه حافظه: NNAPI 1.3 شامل پشتیبانی از دامنه های حافظه به عنوان ورودی و خروجی برای اجرا می باشد. این کار کپی های غیر ضروری از داده های مشابه را در بین اجزای مختلف سیستم حذف می کند و عملکرد زمان اجرا شبکه های عصبی اندروید را بهبود می بخشد. این ویژگی مجموعه ای از API های NDK جدید را برای استفاده با اشیاء
ANeuralNetworksMemoryDesc
وANeuralNetworkMemory
اضافه می کند، از جمله توابع زیر:-
ANeuralNetworksMemoryDesc_create()
-
ANeuralNetworksMemoryDesc_free()
-
ANeuralNetworksMemoryDesc_addInputRole()
-
ANeuralNetworksMemoryDesc_addOutputRole()
-
ANeuralNetworksMemoryDesc_setDimensions()
-
ANeuralNetworksMemoryDesc_finish()
-
ANeuralNetworksMemory_createFromDesc()
-
ANeuralNetworksMemory_copy()
برای کسب اطلاعات بیشتر، نمونه دامنه حافظه شبکه عصبی را ببینید.
-
API وابستگی و پشتیبانی از حصار همگامسازی: NNAPI 1.3 شامل پشتیبانی از محاسبات ناهمزمان با وابستگیها میشود که باعث میشود هنگام فراخوانی مدلهای زنجیرهای کوچک، هزینههای سربار تا حد زیادی کاهش یابد. این ویژگی توابع جدید زیر را اضافه می کند:
جریان کنترل: NNAPI 1.3 شامل پشتیبانی از جریان کنترل کلی با عملیات نمودار جدید
ANEURALNETWORKS_IF
وANEURALNETWORKS_WHILE
است که مدل های دیگر را به عنوان آرگومان با استفاده از نوع عملوند جدیدANEURALNETWORKS_MODEL
می پذیرد. علاوه بر این، این ویژگی توابع جدید زیر را اضافه می کند:
NDK Thermal API
وقتی دستگاهها بیش از حد گرم میشوند، ممکن است CPU و/یا GPU را تحت تأثیر قرار دهند و این میتواند به روشهای غیرمنتظرهای روی برنامهها تأثیر بگذارد. برنامهها یا بازیهایی که گرافیک پیچیده، محاسبات سنگین یا فعالیت پایدار شبکه را در خود جای دادهاند، بیشتر با مشکلاتی مواجه میشوند.
از NDK Thermal API در Android 11 برای نظارت بر تغییرات دما در دستگاه استفاده کنید و سپس برای حفظ مصرف انرژی کمتر و دمای خنکتر دستگاه اقدام کنید. این API شبیه به Java Thermal API است. می توانید از آن برای دریافت اعلان برای هرگونه تغییر وضعیت حرارتی یا نظرسنجی مستقیم وضعیت فعلی استفاده کنید.
متن و ورودی
انتقال IME بهبود یافته است
Android 11 API های جدیدی را برای بهبود انتقال برای ویرایشگرهای روش ورودی (IME) مانند صفحه کلیدهای روی صفحه معرفی می کند. این APIها تنظیم محتوای برنامه شما را در هماهنگی با ظاهر و ناپدید شدن IME و سایر عناصر مانند وضعیت و نوارهای پیمایش آسان تر می کنند.
برای نشان دادن یک IME در حالی که هر EditText
تمرکز دارد، view.getInsetsController(). show(Type.ime())
. (شما می توانید این متد را در هر نمای در همان سلسله مراتب EditText
متمرکز شده فراخوانی کنید، لازم نیست آن را به طور خاص در EditText
فراخوانی کنید.) برای مخفی کردن IME، view.getInsetsController(). hide(Type.ime())
. با فراخوانی view.getRootWindowInsets(). isVisible(Type.ime())
.
برای همگام سازی نماهای برنامه خود با ظاهر و ناپدید شدن IME، یک شنونده را با ارائه یک WindowInsetsAnimation.Callback
به View.setWindowInsetsAnimationCallback()
تنظیم کنید. (شما می توانید این شنونده را روی هر نمایی تنظیم کنید، لازم نیست که یک EditText
باشد.) IME متد onPrepare()
شنونده شما را فراخوانی می کند، سپس در ابتدای انتقال onStart()
را فراخوانی می کند. سپس onProgress()
در هر پیشرفت در انتقال فراخوانی می کند. هنگامی که انتقال به پایان رسید، IME onEnd()
فرا می خواند. در هر نقطه از انتقال، می توانید با فراخوانی WindowInsetsAnimation.getFraction()
متوجه شوید که انتقال چقدر پیشرفت کرده است.
برای مثالی از نحوه استفاده از این APIها، نمونه کد جدید WindowInsetsAnimation را ببینید.
کنترل انیمیشن IME
همچنین میتوانید انیمیشن IME یا انیمیشن نوار سیستم دیگری مانند نوار ناوبری را کنترل کنید. برای انجام این کار، ابتدا setOnApplyWindowInsetsListener()
را فراخوانی کنید تا یک شنونده جدید برای تغییرات inset پنجره تنظیم شود:
کاتلین
rootView.setOnApplyWindowInsetsListener { rootView, windowInsets -> val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime()) rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom) // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. WindowInsets.CONSUMED }
جاوا
mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime()); mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom); // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. return WindowInsets.CONSUMED; } });
برای جابجایی IME یا نوار سیستم دیگر، متد controlWindowInsetsAnimation()
کنترلر را فراخوانی کنید:
کاتلین
view.windowInsetsController.controlWindowInsetsAnimation( Type.ime(), 1000, LinearInterpolator(), cancellationSignal, object : WindowInsetsAnimationControlListener() { fun onReady(controller: WindowInsetsAnimationController, types: Int) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */) } } );
جاوا
mRoot.getWindowInsetsController().controlWindowInsetsAnimation( Type.ime(), 1000, new LinearInterpolator(), cancellationSignal, new WindowInsetsAnimationControlListener() { @Override public void onReady( @NonNull WindowInsetsAnimationController controller, int types ) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */); } @Override public void onCancelled() {} });
به روز رسانی کتابخانه های ICU
Android 11 بسته android.icu
را برای استفاده از نسخه 66 کتابخانه ICU در مقایسه با نسخه 63 در Android 10 به روز می کند. نسخه جدید کتابخانه شامل داده های محلی CLDR به روز شده و تعدادی پیشرفت در پشتیبانی بین المللی در Android است.
تغییرات قابل توجه در نسخه های جدید کتابخانه شامل موارد زیر است:
- بسیاری از APIهای قالببندی اکنون از یک نوع شی بازگشتی جدید پشتیبانی میکنند که
FormattedValue
گسترش میدهد. -
LocaleMatcher
API با یک کلاس سازنده، پشتیبانی از نوعjava.util.Locale
و یک کلاس نتیجه حاوی داده های اضافی درباره یک تطابق بهبود یافته است. - اکنون یونیکد 13 پشتیبانی می شود.
رسانه ها
تخصیص بافرهای MediaCodec
Android 11 شامل یک API MediaCodec
جدید است که به برنامهها کنترل بیشتری در هنگام تخصیص بافرهای ورودی و خروجی میدهد. این به برنامه شما امکان می دهد حافظه را به طور موثرتری مدیریت کند.
کلاس های جدید:
روش های جدید:
-
MediaCodec.getQueueRequest()
-
MediaCodec.getOutputFrame()
-
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
علاوه بر این، رفتار دو متد در MediaCodec.Callback()
تغییر کرده است:
-
onInputBufferAvailable()
- بهجای فراخوانی
MediaCodec.getInputBuffer()
وMediaCodec.queueInputBuffer()
با این شاخص، اگر برای استفاده از Block Model API پیکربندی شدهاند، برنامهها باید ازMediaCodec.getQueueRequest
با ایندکس استفاده کنند و یک LinearBlock/HardwareBuffer را به شکاف متصل کنند. -
onOutputBufferAvailable()
- بهجای فراخوانی
MediaCodec.getOutputBuffer()
با این فهرست، برنامهها ممکن است ازMediaCodec.getOutputFrame()
همراه با فهرست استفاده کنند تا شیOutputFrame
با اطلاعات بیشتر و بافرهای LinearBlock/HardwareBuffer دریافت کنند.
رمزگشایی با تاخیر کم در MediaCodec
Android 11 MediaCodec
برای پشتیبانی از رمزگشایی با تاخیر کم برای بازی ها و سایر برنامه های بلادرنگ تقویت می کند. با ارسال FEATURE_LowLatency
به MediaCodecInfo.CodecCapabilities.isFeatureSupported()
می توانید بررسی کنید که آیا یک کدک از رمزگشایی با تاخیر کم پشتیبانی می کند یا خیر.
برای روشن یا خاموش کردن رمزگشایی با تأخیر کم، یکی از موارد زیر را انجام دهید:
- با استفاده از
MediaCodec.configure()
کلید جدیدKEY_LOW_LATENCY
را روی 0 یا 1 تنظیم کنید. - با استفاده از
MediaCodec.setParameters()
کلید پارامتر جدیدPARAMETER_KEY_LOW_LATENCY
را روی 0 یا 1 تنظیم کنید.
تابع جدید AAudio AAudioStream_release()
تابع AAudioStream_close()
یک جریان صوتی را آزاد می کند و می بندد. این می تواند خطرناک باشد. اگر فرآیند دیگری پس از بسته شدن جریان سعی کند به آن دسترسی پیدا کند، فرآیند از کار می افتد.
تابع جدید AAudioStream_release()
جریان را آزاد می کند اما آن را نمی بندد. این منابع آن را آزاد می کند و جریان را در یک وضعیت شناخته شده رها می کند. شیء تا زمانی که AAudioStream_close()
را فراخوانی نکنید باقی می ماند.
MediaParser API
MediaParser یک API سطح پایین جدید برای استخراج رسانه است. نسبت به MediaExtractor انعطاف پذیرتر است و کنترل بیشتری بر عملکرد استخراج رسانه ارائه می دهد.
ضبط صدا از یک دستگاه USB
هنگامی که یک برنامه بدون مجوز RECORD_AUDIO
از UsbManager
برای درخواست دسترسی مستقیم به یک دستگاه صوتی USB با قابلیت ضبط صدا (مانند هدست USB) استفاده می کند، یک پیام هشدار جدید ظاهر می شود که از کاربر می خواهد مجوز استفاده از دستگاه را تأیید کند. سیستم هر گزینه "همیشه استفاده" را نادیده می گیرد، بنابراین کاربر باید هر بار که یک برنامه درخواست دسترسی می کند، هشدار را تایید کرده و اجازه دهد.
برای جلوگیری از این رفتار، برنامه شما باید مجوز RECORD_AUDIO
را درخواست کند.
دسترسی همزمان به میکروفون
اندروید 11 روشهای جدیدی را به AudioRecord
، MediaRecorder
و APIهای AAudioStream
اضافه میکند. این روشها امکان عکسبرداری همزمان را بدون توجه به مورد استفاده انتخابی، فعال و غیرفعال میکنند. به اشتراک گذاری ورودی صوتی مراجعه کنید.
سوئیچر خروجی
Android 11 رفتار جدیدی را برای برنامههایی که از APIهای Cast و Mediarouter استفاده میکنند، پیادهسازی میکند.
علاوه بر دسترسی به گزینههای ارسال محتوا از داخل یک برنامه، گزینههای تعویض نیز در پخش کننده رسانه سیستم ظاهر میشوند. این به کاربر کمک میکند هنگام حرکت بین دستگاهها سفری بینظیر داشته باشد، زیرا آنها زمینههای مشاهده و گوش دادن خود را تغییر میدهند، مانند تماشای ویدیو در آشپزخانه در مقابل تلفن، یا گوش دادن به صدا در خانه یا ماشین. سوییچر خروجی را ببینید.
قابلیت اتصال
پیشرفت های Wi-Fi Passpoint
برای اطلاعات در مورد قابلیتهای Passpoint اضافه شده در Android 11، Passpoint را ببینید.
Wi-Fi Suggestion API گسترش یافته است
Android 11 برای افزایش قابلیتهای مدیریت شبکه برنامه شما، از جمله موارد زیر، API پیشنهاد Wi-Fi را گسترش میدهد:
- برنامه های مدیریت اتصال می توانند با اجازه دادن به درخواست های قطع ارتباط، شبکه های خود را مدیریت کنند.
- شبکههای Passpoint در Suggestion API ادغام شدهاند و میتوانند به کاربر پیشنهاد شوند.
- API های Analytics شما را قادر می سازد اطلاعاتی در مورد کیفیت شبکه های خود به دست آورید.
به روز رسانی CallScreeningService
با شروع Android 11، یک CallScreeningService میتواند اطلاعاتی درباره وضعیت تأیید STIR/SHAKEN (verstat) برای تماسهای ورودی درخواست کند. این اطلاعات به عنوان بخشی از جزئیات تماس برای تماس های دریافتی ارائه می شود.
اگر یک CallScreeningService
مجوز READ_CONTACTS
را داشته باشد، زمانی که تماسهای ورودی یا تماسهای خروجی از شمارهای در مخاطبین کاربر وجود داشته باشد، برنامه مطلع میشود.
برای اطلاعات بیشتر، به جلوگیری از جعل شماره تماس گیرنده مراجعه کنید.
به روز رسانی Mobile API را باز کنید
برای کسب اطلاعات در مورد پشتیبانی OMAPI در Android 11 و بالاتر، به پشتیبانی از Open Mobile API reader مراجعه کنید.
VPN های عملکردی
برنامههایی که سطح API 30 و بالاتر را هدف قرار میدهند یا روی دستگاههای راهاندازی شده در سطح API 29 و بالاتر اجرا میشوند، میتوانند IKEv2/IPsec را برای VPNهای پیکربندیشده کاربر و VPNهای مبتنی بر برنامه اعمال کنند.
VPN ها بومی سیستم عامل هستند و کد مورد نیاز برای ایجاد اتصالات IKEv2/IPsec VPN را در یک برنامه ساده می کنند.
کنترل دسترسی به شبکه در هر فرآیند
برای اطلاعات در مورد فعال کردن دسترسی به شبکه بر اساس هر فرآیند، به مدیریت استفاده از شبکه مراجعه کنید.
چندین پیکربندی Passpoint نصب شده با یک FQDN را مجاز کنید
با شروع اندروید 11، میتوانید از PasspointConfiguration.getUniqueId()
برای دریافت یک شناسه منحصربهفرد برای یک شی PasspointConfiguration
استفاده کنید، که به کاربران برنامه شما امکان میدهد چندین نمایه با یک نام دامنه کاملاً واجد شرایط (FQDN) نصب کنند.
این عملکرد زمانی مفید است که یک شرکت مخابراتی بیش از یک ترکیب از کد کشور تلفن همراه (MCC) و کد شبکه تلفن همراه (MNC) را در شبکه خود مستقر کند، اما تنها یک FQDN دارد. در Android 11 و بالاتر، نصب بیش از یک نمایه با FQDN یکسان امکان پذیر است که وقتی کاربر سیم کارتی را با MCC یا MNC نصب می کند، با شبکه به عنوان ارائه دهنده Home مطابقت دارد.
پشتیبانی از آنتن GNSS
اندروید 11 کلاس GnssAntennaInfo
را معرفی میکند، که این امکان را برای برنامه شما فراهم میکند تا از موقعیتیابی با دقت سانتیمتری که سیستم ماهوارهای ناوبری جهانی (GNSS) میتواند ارائه دهد، استفاده بیشتری کند.
در راهنمای اطلاعات کالیبراسیون آنتن بیشتر بیاموزید.
گرافیک
رسیور تصویر NDK
NDK ImageDecoder
API یک API استاندارد برای برنامههای Android C/C++ برای رمزگشایی مستقیم تصاویر ارائه میکند. توسعهدهندگان برنامه دیگر نیازی به استفاده از APIهای چارچوب (از طریق JNI) یا بستهبندی کتابخانههای رمزگشایی تصویر شخص ثالث ندارند. برای اطلاعات بیشتر، راهنمای توسعه دهنده رمزگشای تصویر را ببینید.
API نرخ فریم
اندروید 11 یک API ارائه میکند که به برنامهها امکان میدهد تا سیستم را از نرخ فریم مورد نظر خود مطلع کنند تا لرزش را در دستگاههایی که از چندین نرخ بهروزرسانی پشتیبانی میکنند، کاهش دهد. برای اطلاعات در مورد نحوه استفاده از این API، به راهنمای نرخ فریم مراجعه کنید.
درخواست و بررسی پشتیبانی با تاخیر کم
برخی از نمایشگرها می توانند پردازش گرافیکی را پس از پردازش انجام دهند، مانند برخی از نمایشگرها و تلویزیون های خارجی. این پس پردازش گرافیک را بهبود می بخشد اما می تواند تاخیر را افزایش دهد. نمایشگرهای جدیدتر که از HDMI 2.1 پشتیبانی میکنند دارای حالت تأخیر کم خودکار هستند ( ALLM که به عنوان حالت بازی نیز شناخته میشود)، که با خاموش کردن این پس پردازش تأخیر را به حداقل میرساند. برای جزئیات بیشتر در مورد ALLM، به مشخصات HDMI 2.1 مراجعه کنید.
یک پنجره میتواند درخواست کند که حالت تأخیر کم خودکار، در صورت وجود، استفاده شود. ALLM به ویژه برای برنامههایی مانند بازیها و ویدئو کنفرانس مفید است، جایی که تأخیر کم مهمتر از داشتن بهترین گرافیک ممکن است.
برای روشن یا خاموش کردن حداقل پس پردازش، با Window.setPreferMinimalPostProcessing()
تماس بگیرید یا ویژگی preferMinimalPostProcessing
پنجره را روی true
تنظیم کنید. همه نمایشگرها از حداقل پس پردازش پشتیبانی نمی کنند. برای اطلاع از اینکه آیا نمایشگر خاصی از آن پشتیبانی میکند، روش جدید Display.isMinimalPostProcessingSupported()
را فراخوانی کنید.
تزریق لایه اشکال زدایی گرافیکی عملکردی
برنامهها اکنون میتوانند لایههای گرافیکی خارجی ( GLES ، Vulkan ) را در کد برنامههای بومی بارگیری کنند تا عملکردی مشابه یک برنامه اشکالزدایی را نشان دهند، اما بدون تحمیل هزینههای بالای عملکرد. این ویژگی به ویژه هنگام پروفایل کردن برنامه خود با ابزارهایی مانند GAPID بسیار مهم است. برای نمایه کردن برنامه خود، به جای اینکه برنامه را قابل اشکالزدایی کنید، عنصر متا داده زیر را در فایل مانیفست برنامه خود قرار دهید:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
تصاویر و دوربین
صداها و ارتعاشات اعلان را در حین ضبط فعال قطع کنید
با شروع Android 11، هنگام استفاده فعال از دوربین، برنامه شما میتواند فقط لرزشها، صداها و ارتعاشها را بیصدا کند، یا هیچ کدام را با استفاده از setCameraAudioRestriction()
قطع کند.
پشتیبانی گسترده از دوربین در شبیه ساز اندروید
برای اطلاعات در مورد پشتیبانی گسترده از دوربینها در شبیهساز که با Android 11 شروع میشود، به پشتیبانی دوربین مراجعه کنید.
پشتیبانی از استفاده همزمان از بیش از یک دوربین
اندروید 11 به پشتیبانی درخواست برای استفاده همزمان از بیش از یک دوربین، از جمله دوربین جلو و عقب، APIها را اضافه می کند.
برای بررسی پشتیبانی در دستگاهی که برنامه شما در آن اجرا می شود، از روش های زیر استفاده کنید:
-
getConcurrentCameraIds()
Set
از ترکیبات شناسههای دوربین را برمیگرداند که میتوانند همزمان با ترکیبهای جریان تضمینشده در صورت پیکربندی توسط همان فرآیند برنامه، پخش شوند. -
isConcurrentSessionConfigurationSupported()
پرس و جو می کند که آیا دستگاه های دوربین می توانند به طور همزمان از تنظیمات جلسه مربوطه پشتیبانی کنند یا خیر.
پشتیبانی بهتر از تصاویر HEIF با فریم های متعدد
با شروع Android 11، اگر ImageDecoder.decodeDrawable()
را فراخوانی کنید و یک تصویر HEIF حاوی دنباله ای از فریم ها (مانند یک انیمیشن یا یک عکس پشت سر هم) را ارسال کنید، روش یک AnimatedImageDrawable
حاوی کل دنباله تصویر را برمی گرداند. در نسخههای قبلی اندروید، این روش یک BitmapDrawable
تنها یک فریم را برگرداند.
اگر گرافیک HEIF حاوی چندین فریم است که در یک دنباله نیستند، میتوانید با فراخوانی MediaMetadataRetriever.getImageAtIndex()
یک فریم جداگانه را بازیابی کنید.
قابلیت دسترسی
به روز رسانی برای توسعه دهندگان خدمات دسترس پذیری
اگر یک سرویس دسترسپذیری سفارشی ایجاد میکنید، میتوانید از ویژگیهای زیر در Android 11 استفاده کنید:
- توضیح کاربر در مورد یک سرویس دسترسپذیری، اکنون علاوه بر متن ساده، امکان HTML و تصاویر را نیز فراهم میکند. این انعطافپذیری باعث میشود که به کاربران نهایی توضیح دهید که خدمات شما چه میکند و چگونه میتواند به آنها کمک کند.
- برای کار با توصیف حالت عنصر UI که از نظر معنایی معنادارتر از
contentDescription
است، متدgetStateDescription()
را فراخوانی کنید. - برای درخواست دور زدن رویدادهای لمسی از کاوشگر لمسی سیستم،
setTouchExplorationPassthroughRegion()
را فراخوانی کنید. به طور مشابه، برای درخواست دور زدن ژستها از آشکارساز اشارهای سیستم،setGestureDetectionPassthroughRegion()
فراخوانی کنید. - میتوانید اقدامات IME مانند «ورود» و «بعدی» و همچنین تصاویری از پنجرههایی را که پرچم
FLAG_SECURE
را فعال نمیکنند، درخواست کنید.
ویژگی های اضافی
دلایل خروج از فرآیند برنامه
اندروید 11 متد ActivityManager.getHistoricalProcessExitReasons()
را معرفی میکند که دلایل پایانهای اخیر فرآیند را گزارش میکند. برنامهها میتوانند از این روش برای جمعآوری اطلاعات تشخیص خرابی استفاده کنند، مانند اینکه آیا پایان فرآیند به دلیل ANR، مشکلات حافظه یا دلایل دیگر است. علاوه بر این، می توانید از متد جدید setProcessStateSummary()
برای ذخیره اطلاعات حالت سفارشی برای تجزیه و تحلیل بعدی استفاده کنید.
متد getHistoricalProcessExitReasons()
نمونه هایی از کلاس ApplicationExitInfo
را برمی گرداند که حاوی اطلاعات مربوط به مرگ فرآیند برنامه است. با فراخوانی getReason()
در نمونه ای از این کلاس، می توانید تعیین کنید که چرا فرآیند برنامه شما از بین رفته است. به عنوان مثال، مقدار بازگشتی REASON_CRASH
نشان می دهد که یک استثنا کنترل نشده در برنامه شما رخ داده است. اگر برنامه شما نیاز به اطمینان از منحصر به فرد بودن رویدادهای خروج دارد، میتواند یک شناسه خاص برنامه، مانند یک مقدار هش بر اساس مهر زمانی از متد getTimestamp()
حفظ کند.
منابع اضافی
برای اطلاعات بیشتر، مقاله ابزارهای جدید اندروید 11 را بخوانید تا برنامه ها را خصوصی تر و پایدارتر در Medium کنید .
لودرهای منابع
اندروید 11 یک API جدید معرفی می کند که به برنامه ها اجازه می دهد به صورت پویا نحوه جستجو و بارگذاری منابع را گسترش دهند. کلاس های API جدید ResourcesLoader
و ResourcesProvider
در درجه اول مسئول ارائه عملکرد جدید هستند. آنها با هم توانایی تامین منابع و دارایی های اضافی یا تغییر ارزش منابع و دارایی های موجود را فراهم می کنند.
اشیاء ResourcesLoader
محفظه هایی هستند که اشیاء ResourcesProvider
را به نمونه Resources
برنامه ارائه می کنند. به نوبه خود، اشیاء ResourcesProvider
روش هایی را برای بارگیری داده های منبع از APK ها و جداول منابع ارائه می دهند.
یکی از موارد استفاده اصلی برای این API، بارگیری دارایی سفارشی است. میتوانید از loadFromDirectory()
برای ایجاد یک ResourcesProvider
استفاده کنید که وضوح منابع و داراییهای مبتنی بر فایل را هدایت میکند و باعث میشود به جای APK برنامه، یک دایرکتوری خاص را جستجو کند. میتوانید از طریق خانواده متدهای open()
از کلاس AssetManager
API به این داراییها دسترسی داشته باشید، درست مانند داراییهای همراه در APK.
طرح امضای APK نسخه 4
اندروید 11 پشتیبانی از APK Signature Scheme v4 را اضافه می کند. این طرح نوع جدیدی از امضا را در یک فایل جداگانه تولید می کند ( apk-name .apk.idsig
) اما در غیر این صورت شبیه به v2 و v3 است. هیچ تغییری در APK ایجاد نمی شود. این طرح از نصب افزایشی APK ADB پشتیبانی می کند که سرعت نصب APK را افزایش می دهد.
فیلترهای هدف پویا
برای دریافت intent، یک برنامه باید در زمان کامپایل اعلام کند که چه نوع دادههایی را میتواند با تعریف فیلتر قصد در مانیفست برنامه دریافت کند. در اندروید 10 و پایینتر، برنامهها راهی برای تغییر فیلترهای هدف خود در زمان اجرا ندارند. این یک مشکل برای برنامه های مجازی سازی (مانند ماشین های مجازی و دسکتاپ های راه دور) است، زیرا آنها هیچ راهی برای دانستن اینکه کاربر دقیقاً چه نرم افزاری را داخل آنها نصب خواهد کرد، ندارند.
اندروید 11 گروههای MIME را معرفی میکند، یک عنصر مانیفست جدید که به برنامه اجازه میدهد مجموعهای پویا از انواع MIME را در یک فیلتر intent اعلام کند و آن را به صورت برنامهریزی در زمان اجرا تغییر دهد. برای استفاده از یک گروه MIME، یک عنصر داده در مانیفست برنامه خود با ویژگی جدید android:mimeGroup
اضافه کنید:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
مقدار ویژگی android:mimeGroup
یک شناسه رشته دلخواه است که گروه MIME را در زمان اجرا شناسایی می کند. میتوانید با ارسال شناسه آن به روشهای جدید زیر در کلاس PackageManager
API به محتویات یک گروه MIME دسترسی پیدا کرده و بهروزرسانی کنید:
وقتی یک نوع MIME را به صورت برنامهریزی به یک گروه MIME اضافه میکنید، دقیقاً مانند نوع MIME ایستا که به صراحت در مانیفست اعلام شده است عمل میکند.
پیشرفت های تکمیل خودکار
اندروید 11 بهبودهایی را برای خدمات تکمیل خودکار معرفی می کند.
شناسه های راهنمایی در AssistStructure.ViewNode
اغلب برای سرویس های تکمیل خودکار مفید است که یک هش امضا را برای یک view بر اساس ویژگی های view محاسبه کنند. view hint یک ویژگی بسیار خوب است که هنگام محاسبه هش امضا باید در آن گنجانده شود، اما رشته راهنمایی ممکن است با محلی بودن تلفن تغییر کند. برای حل این مشکل، اندروید 11 AssistStructure.ViewNode
را با متد getHintIdEntry()
جدید گسترش می دهد، که شناسه منبع را برای متن راهنمایی یک view برمی گرداند. این روش یک مقدار مستقل از محلی را ارائه می دهد که می توانید از آن برای محاسبه هش امضا استفاده کنید.
مجموعه داده ها رویدادها را نشان می دهد
برای کمک به سرویسهای تکمیل خودکار برای بهبود پیشنهادات خود، Android 11 راهی برای شناسایی مواردی ارائه میکند که در آن سرویس تکمیل خودکار مجموعههای داده ارائه میدهد اما کاربر هیچ یک از آنها را انتخاب نکرده است. در Android 11، FillEventHistory
یک نوع رویداد جدید TYPE_DATASETS_SHOWN
را گزارش میکند. FillEventHistory
هر زمان که سرویس تکمیل خودکار یک یا چند مجموعه داده را به کاربر ارائه می دهد، رویدادی از این نوع را ثبت می کند. سرویسهای تکمیل خودکار میتوانند از این رویدادها در ارتباط با رویداد TYPE_DATASET_SELECTED
موجود استفاده کنند تا تعیین کنند آیا کاربر یکی از گزینههای تکمیل خودکار ارائه شده را انتخاب کرده است یا خیر.
ادغام IME
صفحهکلیدها و سایر IMEها اکنون میتوانند پیشنهادهای تکمیل خودکار را بهجای یک منوی کشویی به صورت درون خطی، در نوار پیشنهاد یا رابط مشابه نمایش دهند. برای محافظت از اطلاعات حساس مانند گذرواژهها و شمارههای کارت اعتباری، پیشنهادها به کاربر نمایش داده میشوند اما تا زمانی که کاربر یکی را انتخاب نکند، برای IME شناخته نمیشوند. برای کسب اطلاعات در مورد اینکه چگونه IME ها و مدیران رمز عبور می توانند از این ویژگی پشتیبانی کنند، به یکپارچه سازی تکمیل خودکار با صفحه کلید مراجعه کنید.
اشتراک گذاری داده با سرویس ضبط محتوا
با شروع Android 11، برنامه شما میتواند دادهها را با سرویس ضبط محتوای دستگاه به اشتراک بگذارد. این قابلیت باعث میشود دستگاهی بتواند اطلاعات درون زمینهای، مانند نمایش نام آهنگی که در حال پخش در محیط کاربر است، آسانتر کند.
برای در دسترس قرار دادن دادههای برنامه خود برای سرویس ضبط محتوا، متد shareData()
در نمونهای از ContentCaptureManager
فراخوانی کنید. اگر سیستم درخواست اشتراکگذاری داده را بپذیرد، برنامه شما یک توصیفکننده فایل فقط برای نوشتن برای اشتراکگذاری با سرویس ضبط محتوا دریافت میکند.