اندروید 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
فراخوانی کنید. اگر سیستم درخواست اشتراکگذاری داده را بپذیرد، برنامه شما یک توصیفکننده فایل فقط برای نوشتن برای اشتراکگذاری با سرویس ضبط محتوا دریافت میکند.
اندروید 11 ویژگی های جدید و API های عالی را برای توسعه دهندگان معرفی می کند. بخشهای زیر به شما کمک میکند تا با ویژگیهای برنامههای خود آشنا شوید و با APIهای مرتبط شروع کنید.
برای فهرست دقیق APIهای جدید، اصلاح شده و حذف شده، گزارش تفاوت API را بخوانید. برای جزئیات بیشتر در مورد APIهای جدید به مرجع Android API مراجعه کنید - APIهای جدید برای مشاهده برجسته شده اند. همچنین، برای اطلاع از مناطقی که تغییرات پلت فرم ممکن است بر برنامههای شما تأثیر بگذارد، حتماً تغییرات رفتار Android 11 را برای برنامههایی که Android R را هدف قرار میدهند و برای همه برنامهها و همچنین تغییرات حریم خصوصی را بررسی کنید.
تجربیات جدید
کنترل های دستگاه
Android 11 شامل یک API ControlsProviderService
جدید است که می توانید از آنها برای نمایش کنترل برای دستگاه های متصل و خارجی استفاده کنید. این کنترل ها تحت کنترل دستگاه در منوی Android Power ظاهر می شوند. برای اطلاعات بیشتر ، به کنترل دستگاه های خارجی مراجعه کنید.
کنترل رسانه ها
Android 11 نحوه نمایش کنترل رسانه ها را به روز می کند. کنترل رسانه ها نزدیک به تنظیمات سریع ظاهر می شوند. جلسات از چندین برنامه در یک چرخ فلک قابل جابجایی ترتیب داده می شود که شامل جریانی است که به صورت محلی از طریق تلفن پخش می شود ، جریانهای از راه دور ، مانند آنهایی که در دستگاه های خارجی شناسایی شده اند یا جلسات بازیگران و جلسات قبلی و از سرگیری به ترتیب آخرین بار بازی شده اند.
کاربران می توانند بدون نیاز به شروع برنامه ، جلسات قبلی را از چرخ فلک مجدداً راه اندازی کنند. هنگامی که پخش شروع می شود، کاربر به روش معمول با کنترل های رسانه در تعامل است.
برای اطلاعات بیشتر ، به کنترل رسانه ها مراجعه کنید.
صفحه نمایش ها
پشتیبانی بهتر از نمایشگرهای آبشار
Android 11 چندین API را برای پشتیبانی از نمایشگرهای آبشار فراهم می کند ، نمایشگرهایی که در اطراف لبه دستگاه می پیچند. این نمایشگرها به عنوان نوعی نمایشگرها با برش های صفحه نمایش رفتار می شوند. DisplayCutout
.getSafeInset…()
اکنون برای جلوگیری از مناطق آبشار و همچنین بریدگی ، قسمت ایمن را باز می گرداند. برای ارائه محتوای برنامه خود در منطقه آبشار ، موارد زیر را انجام دهید:
برای به دست آوردن ابعاد دقیق از آبشار
DisplayCutout.getWaterfallInsets()
تماس بگیرید.ویژگی Window Layout Attribute
layoutInDisplayCutoutMode
را رویLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
تنظیم کنید تا پنجره بتواند در قسمتهای برش و آبشار در تمام لبه های صفحه گسترش یابد. شما باید اطمینان حاصل کنید که هیچ محتوای اساسی در مناطق قطع یا آبشار نیست.
سنسور زاویه لولا و تاشو
Android 11 این امکان را برای برنامه هایی که در دستگاه هایی با تنظیمات صفحه نمایش مبتنی بر لولا وجود دارد امکان پذیر می کند تا با تهیه یک سنسور جدید با TYPE_HINGE_ANGLE
، و یک SensorEvent
جدید که می تواند زاویه لولا را کنترل کند و اندازه گیری در درجه های بین دو انتگرال را اندازه گیری کند ، زاویه لولا را تعیین کنند. قطعات دستگاه می توانید از این اندازه گیری های خام برای انجام انیمیشن های گرانول استفاده کنید زیرا کاربر دستگاه را دستکاری می کند.
Foldables را ببینید.
گفتگوها
پیشرفت مکالمه
Android 11 در نحوه رسیدگی به مکالمات ، پیشرفت های زیادی را انجام می دهد. مکالمات در زمان واقعی ، ارتباطات دو طرفه بین دو یا چند نفر است. این مکالمات از برجستگی ویژه ای برخوردار است و کاربران چندین گزینه جدید در نحوه تعامل با آنها دارند.
برای کسب اطلاعات بیشتر در مورد مکالمات و اینکه چگونه برنامه شما می تواند از آنها پشتیبانی کند ، افراد و مکالمات را ببینید.
حباب های چت
اکنون حباب ها برای کمک به مکالمات سطحی در سراسر سیستم در دسترس توسعه دهندگان هستند. Bubbles یک ویژگی آزمایشی در Android 10 بود که از طریق گزینه توسعه دهنده فعال شد. در اندروید 11 ، این دیگر لازم نیست.
اگر یک برنامه Android 11 (API سطح 30) یا بالاتر را هدف قرار دهد ، اعلان های آن به عنوان حباب ارائه نمی شوند مگر اینکه الزامات جدید مکالمه را برآورده کنند. به طور خاص ، اعلان باید با میانبر همراه باشد.
قبل از Android 11 ، اگر می خواستید یک اعلان حباب شود ، باید صریحاً مشخص کنید که اعلان تنظیم شده است که همیشه در حالت UI Document راه اندازی شده است. با شروع Android 11 ، دیگر نیازی به صریح آن تنظیم نیست. اگر اعلان حباب شود ، این پلتفرم به طور خودکار اعلان را تنظیم می کند تا همیشه در حالت UI Document راه اندازی شود.
چندین پیشرفت در عملکرد حباب وجود دارد و کاربران انعطاف پذیری بیشتری در فعال کردن و غیرفعال کردن حباب ها از هر برنامه دارند. برای توسعه دهندگان که پشتیبانی آزمایشی را اجرا کرده اند ، در اندروید 11 تغییر در API ها وجود دارد:
- سازنده
BubbleMetadata.Builder()
بدون هیچ پارامتر کاهش می یابد. در عوض ، از هر دو سازنده جدیدBubbleMetadata.Builder(PendingIntent, Icon)
یاBubbleMetadata.Builder(String)
استفاده کنید. -
BubbleMetadata
از شناسه میانبر با فراخوانیBubbleMetadata.Builder(String)
ایجاد کنید. رشته گذشت باید با شناسه میانبر ارائه شده بهNotification.Builder
مطابقت داشته باشد. - نمادهای حباب را با
Icon.createWithContentUri()
یا با روش جدیدcreateWithAdaptiveBitmapContentUri()
ایجاد کنید.
شاخص های بصری 5G
برای اطلاعات در مورد نمایش شاخص های 5G در دستگاه های کاربران ، به کاربران خود بگویید که در 5G هستند .
حریم خصوصی
Android 11 تعداد زیادی از تغییرات و محدودیت ها را برای تقویت حریم شخصی کاربر معرفی می کند. برای کسب اطلاعات بیشتر ، به صفحه حریم خصوصی مراجعه کنید.
امنیت
به روزرسانی احراز هویت بیومتریک
برای کمک به شما در کنترل سطح امنیت برای داده های برنامه خود ، Android 11 چندین پیشرفت در احراز هویت بیومتریک ارائه می دهد. این تغییرات همچنین در کتابخانه بیومتریک Jetpack ظاهر می شود.
انواع احراز هویت
Android 11 رابط BiometricManager.Authenticators
را معرفی می کند ، که می توانید از آنها برای اعلام انواع احراز هویت که برنامه شما پشتیبانی می کند ، استفاده کنید.
تعیین کنید از نوع احراز هویت استفاده شده است
پس از تأیید اعتبار کاربر ، می توانید بررسی کنید که آیا کاربر با استفاده از اعتبار دستگاه یا اعتبار بیومتریک با فراخوانی getAuthenticationType()
تأیید شده است.
پشتیبانی اضافی از کلیدهای نویسنده برای هر استفاده
Android 11 با استفاده از کلیدهای Auth-برای استفاده ، پشتیبانی بیشتری را برای تأیید اعتبار ارائه می دهد.
روشهای مستهلک
Android 11 روشهای زیر را کاهش می دهد:
- روش
setDeviceCredentialAllowed()
. - روش
setUserAuthenticationValidityDurationSeconds()
. - نسخه بیش از حد
canAuthenticate()
که هیچ استدلالی لازم نیست.
به اشتراک گذاری امن مجموعه داده های بزرگ
در برخی شرایط ، مانند مواردی که شامل یادگیری ماشین یا پخش رسانه ها است ، برنامه شما ممکن است بخواهد از همان مجموعه داده های بزرگ مانند برنامه دیگر استفاده کند. در نسخه های قبلی Android ، برنامه شما و یک برنامه دیگر نیاز به بارگیری یک نسخه جداگانه از همان مجموعه داده ها دارند.
برای کمک به کاهش افزونگی داده ها ، چه از طریق شبکه و چه در دیسک ، Android 11 اجازه می دهد تا این مجموعه داده های بزرگ با استفاده از حباب های داده مشترک روی دستگاه ذخیره شوند. برای کسب اطلاعات بیشتر در مورد به اشتراک گذاری مجموعه داده ها ، به راهنمای عمیق در مورد به اشتراک گذاری مجموعه داده های بزرگ مراجعه کنید.
رمزگذاری مبتنی بر پرونده را پس از شروع مجدد OTA بدون اعتبار کاربر انجام دهید
پس از اتمام دستگاه به روزرسانی و راه اندازی مجدد OTA ، کلیدهای رمزگذاری شده اعتبار (CE) که در ذخیره سازی محافظت شده در اعتبار قرار می گیرند ، بلافاصله برای عملیات رمزگذاری مبتنی بر پرونده (FBE) در دسترس هستند. این بدان معنی است که ، پس از بروزرسانی OTA ، برنامه شما می تواند عملیاتی را که به کلیدهای CE نیاز دارند قبل از ورود کاربر به پین ، الگوی یا رمز عبور خود از سر ببرد.
عملکرد و کیفیت
اشکال زدایی بی سیم
Android 11 از استقرار و اشکال زدایی برنامه شما به صورت بی سیم از ایستگاه کاری شما از طریق Android Debug Bridge (ADB) پشتیبانی می کند. به عنوان مثال ، شما می توانید برنامه اشکال زدایی خود را در چندین دستگاه از راه دور مستقر کنید بدون اینکه از نظر جسمی دستگاه خود را از طریق USB وصل کنید و با مشکلات اتصال مشترک USB مانند نصب درایور استفاده کنید. برای اطلاعات بیشتر ، به برنامه های RUN در دستگاه سخت افزاری مراجعه کنید.
نصب APK افزایشی ADB
نصب APK های بزرگ (2 گیگابایت+) بر روی یک دستگاه می تواند مدت زمان زیادی طول بکشد ، حتی اگر فقط یک تغییر کوچک به یک برنامه ایجاد شود. نصب ADB (Android Debug Bridge) نصب APK افزایشی با نصب کافی از APK برای راه اندازی برنامه در حالی که داده های باقی مانده را در پس زمینه پخش می کند ، این روند را تسریع می کند. در صورت پشتیبانی از دستگاه adb install
به طور خودکار از این ویژگی استفاده می کند و شما جدیدترین ابزار SDK Platform را نصب کرده اید. در صورت پشتیبانی از آن ، از روش نصب پیش فرض در سکوت استفاده می شود.
برای استفاده از این ویژگی از دستور ADB زیر استفاده کنید. اگر دستگاه از نصب افزایشی پشتیبانی نکند ، این دستور با توضیحات کلامی انجام می شود و چاپ می کند.
adb install --incremental
قبل از اجرای نصب APK افزایشی ADB ، باید APK خود را امضا کرده و یک فایل Signature Signature V4 ایجاد کنید. برای کار این ویژگی ، پرونده امضا V4 باید در کنار APK قرار گیرد.
تشخیص خطا با استفاده از تخصیص دهنده حافظه بومی
GWP-ASAN یک ویژگی تخصیص حافظه بومی است که به یافتن اشکالات بدون استفاده و بافر-بافر بیش از حد کمک می کند. می توانید این ویژگی را در سطح جهان یا برای زیر فرآیندهای خاص برنامه خود فعال کنید. برای کسب اطلاعات بیشتر ، به راهنمای GWP-Asan مراجعه کنید.
شبکه های عصبی API 1.3
Android 11 API شبکه های عصبی (NNAPI) را گسترش داده و بهبود می بخشد.
عملیات جدید
NNAPI 1.3 برای پشتیبانی از طرح کمیت جدید TensorFlow Lite ، یک نوع عمل جدید ، TENSOR_QUANT8_ASYMM_SIGNED
را معرفی می کند.
علاوه بر این ، 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
می پذیرند. علاوه بر این ، این ویژگی عملکردهای جدید زیر را اضافه می کند:
API حرارتی NDK
هنگامی که دستگاه ها خیلی گرم می شوند ، ممکن است CPU و/یا GPU را کنترل کنند و این می تواند به روش های غیر منتظره بر برنامه ها تأثیر بگذارد. برنامه ها یا بازی هایی که شامل گرافیک های پیچیده ، محاسبات سنگین یا فعالیت شبکه پایدار هستند ، بیشتر با مشکلات روبرو می شوند.
برای نظارت بر تغییرات دما در دستگاه ، از API حرارتی NDK در Android 11 استفاده کنید و سپس برای حفظ مصرف انرژی پایین تر و دمای دستگاه خنک تر اقدام کنید. این API شبیه به API حرارتی جاوا است. شما می توانید از آن برای دریافت اعلان ها برای هرگونه تغییر وضعیت حرارتی یا به طور مستقیم برای نظرسنجی وضعیت فعلی استفاده کنید.
متن و ورودی
انتقال IME بهبود یافته
Android 11 API های جدید را برای بهبود انتقال برای ویرایشگرهای روش ورودی (IME) مانند صفحه کلید روی صفحه معرفی می کند. این API ها تنظیم محتوای برنامه شما در هماهنگ سازی با ظاهر و ناپدید شدن IME و با عناصر دیگر مانند وضعیت و میله های ناوبری را آسان تر می کنند.
برای نشان دادن IME در حالی که هر EditText
تمرکز دارد ، call view.getInsetsController(). show(Type.ime())
. (می توانید این روش را در هر دیدگاه در همان سلسله مراتب به عنوان EditText
متمرکز فراخوانی کنید ، لازم نیست آن را به طور خاص در EditText
بنامید.) برای پنهان کردن IME ، view.getInsetsController(). hide(Type.ime())
. می توانید بررسی کنید که آیا IME در حال حاضر با فراخوانی view.getRootWindowInsets(). isVisible(Type.ime())
.
برای همگام سازی دیدگاه های برنامه خود با ظاهر و ناپدید شدن IME ، با ارائه یک WindowInsetsAnimation.Callback
به View.setWindowInsetsAnimationCallback()
یک شنونده را روی منظره تنظیم کنید. (شما می توانید این شنونده را از هر دیدگاهی تنظیم کنید ، لازم نیست که یک EditText
باشد.) IME روش onPrepare()
شنونده شما را صدا می کند ، سپس در ابتدای انتقال آن را onStart()
می کند. سپس در هر پیشرفت در انتقال onProgress()
فراخوانی می کند. پس از اتمام انتقال ، IME onEnd()
تماس می گیرد. در هر نقطه از انتقال ، می توانید دریابید که انتقال با فراخوانی WindowInsetsAnimation.getFraction()
چقدر پیشرفت کرده است.
برای نمونه ای از نحوه استفاده از این API ها ، به نمونه کد New WindowsInsEtSanimation مراجعه کنید.
کنترل انیمیشن IME
همچنین می توانید کنترل انیمیشن IME یا انیمیشن نوار سیستم دیگری مانند نوار ناوبری را کنترل کنید. برای انجام این کار ، ابتدا با setOnApplyWindowInsetsListener()
تماس بگیرید تا یک شنونده جدید برای تغییرات در پنجره تنظیم کنید:
کاتلین
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 Locale و تعدادی از پیشرفت های پشتیبانی بین المللی در Android است.
تغییرات قابل توجه در نسخه های جدید کتابخانه شامل موارد زیر است:
- بسیاری از API های قالب بندی اکنون از یک نوع شیء برگشتی جدید پشتیبانی می کنند که
FormattedValue
گسترش می دهد. - API
LocaleMatcher
با یک کلاس سازنده ، پشتیبانی از نوعjava.util.Locale
، و یک کلاس نتیجه که دارای داده های اضافی در مورد یک مسابقه است ، تقویت می شود. - اکنون Unicode 13 پشتیبانی می شود.
رسانه ها
تخصیص بافر MediaCodec
Android 11 شامل یک API MediaCodec
جدید است که هنگام اختصاص بافر ورودی و خروجی ، کنترل بیشتری را به برنامه ها می دهد. این به برنامه شما اجازه می دهد تا حافظه را با کارآمدتر مدیریت کند.
کلاس های جدید:
روشهای جدید:
-
MediaCodec.getQueueRequest()
-
MediaCodec.getOutputFrame()
-
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
علاوه بر این ، رفتار دو روش در MediaCodec.Callback()
تغییر کرده است:
-
onInputBufferAvailable()
- به جای فراخوانی
MediaCodec.getInputBuffer()
وMediaCodec.queueInputBuffer()
با این فهرست ، اگر برای استفاده از API مدل بلوک پیکربندی شده باشد ، برنامه ها باید ازMediaCodec.getQueueRequest
با این فهرست استفاده کنند و یک خطی خطی/سخت افزار را به شکاف وصل می کنند. -
onOutputBufferAvailable()
- به جای تماس با
MediaCodec.getOutputBuffer()
با فهرست ، برنامه ها ممکن است ازMediaCodec.getOutputFrame()
با فهرست استفاده کنند تا شیءOutputFrame
را با اطلاعات بیشتر و بافر LinearBlock/HardwareBuffer دریافت کنند.
رمزگشایی کم تأخیر در MediaCodec
Android 11 MediaCodec
برای پشتیبانی از رمزگشایی کم تأخیر برای بازی ها و سایر برنامه های زمان واقعی تقویت می کند. شما می توانید بررسی کنید که آیا یک کدک با انتقال FEATURE_LowLatency
lowlatency به MediaCodecInfo.CodecCapabilities.isFeatureSupported()
از رمزگشایی کم تأخیر پشتیبانی می کند.
برای روشن کردن یا خاموش کردن کم تحرک ، هر یک از موارد زیر را انجام دهید:
-
KEY_LOW_LATENCY
جدید را با استفاده ازMediaCodec.configure()
روی 0 یا 1 تنظیم کنید. - پارامتر پارامتر جدید
PARAMETER_KEY_LOW_LATENCY
را روی 0 یا 1 با استفاده ازMediaCodec.setParameters()
تنظیم کنید.
عملکرد جدید AAUDIO AAUDIOSTREAM_RELEASE ()
تابع AAudioStream_close()
یک جریان صوتی را همزمان منتشر و بسته می کند. این می تواند خطرناک باشد. اگر یک روند دیگر پس از بسته شدن ، سعی در دسترسی به جریان داشته باشد ، این روند خراب می شود.
تابع جدید AAudioStream_release()
جریان را آزاد می کند اما آن را نمی بندد. این منابع خود را آزاد می کند و جریان را در یک حالت شناخته شده رها می کند. این شیء تا زمانی که با AAudioStream_close()
تماس بگیرید ادامه می یابد.
API MediaParser
MediaParser یک API سطح پایین جدید برای استخراج رسانه است. این انعطاف پذیر تر از MediaExtractor است و کنترل بیشتری بر عملکرد استخراج رسانه ها فراهم می کند.
ضبط صوتی از یک دستگاه USB
هنگامی که یک برنامه بدون مجوز RECORD_AUDIO
از UsbManager
برای درخواست دسترسی مستقیم به یک دستگاه صوتی USB با قابلیت ضبط صوتی (مانند هدست USB) استفاده می کند ، یک پیام هشدار دهنده جدید به نظر می رسد که از کاربر می خواهد مجوز استفاده از دستگاه را تأیید کند. این سیستم گزینه "همیشه استفاده" را نادیده می گیرد ، بنابراین کاربر باید هر بار که برنامه درخواست دسترسی داشته باشد ، هشدار را تصدیق کرده و مجوز اعطا کند.
برای جلوگیری از این رفتار، برنامه شما باید مجوز RECORD_AUDIO
را درخواست کند.
دسترسی میکروفون همزمان
Android 11 روشهای جدیدی را به API های AudioRecord
، MediaRecorder
و AAudioStream
اضافه می کند. این روشها بدون توجه به مورد استفاده انتخاب شده ، امکان ضبط همزمان را فراهم می کنند. به اشتراک گذاری صوتی به اشتراک گذاری مراجعه کنید.
تعویض کننده خروجی
Android 11 رفتار جدیدی را برای برنامه هایی که از API های بازیگران و Mediarouter استفاده می کنند ، پیاده سازی می کند.
علاوه بر دسترسی به گزینه های ریخته گری از داخل یک برنامه ، گزینه های سوئیچینگ نیز در سیستم پخش کننده سیستم ظاهر می شوند. این به کاربر کمک میکند هنگام حرکت بین دستگاهها سفری بینظیر داشته باشد، زیرا آنها زمینههای مشاهده و گوش دادن خود را تغییر میدهند، مانند تماشای ویدیو در آشپزخانه در مقابل تلفن، یا گوش دادن به صدا در خانه یا ماشین. به سوئیچ خروجی مراجعه کنید.
قابلیت اتصال
پیشرفت های پاس پاس Wi-Fi
برای کسب اطلاعات در مورد قابلیت های Passpoint که در Android 11 اضافه شده است ، به Passpoint مراجعه کنید.
API پیشنهاد Wi-Fi گسترش یافته است
Android 11 API پیشنهاد Wi-Fi را برای افزایش قابلیت های مدیریت شبکه برنامه شما ، از جمله موارد زیر گسترش می دهد:
- برنامه های مدیریت اتصال می توانند شبکه های خود را با اجازه درخواست های قطع ارتباط مدیریت کنند.
- شبکه های Passpoint در API پیشنهاد ادغام شده اند و می توان به کاربر پیشنهاد داد.
- API های Analytics شما را قادر می سازد تا در مورد کیفیت شبکه های خود اطلاعات کسب کنید.
به روزرسانی های ScreensingService
با شروع در Android 11 ، یک صفحه نمایش تماس می تواند اطلاعاتی در مورد وضعیت تأیید همزن/لرزش (VERSTAT) برای تماس های دریافتی درخواست کند. این اطلاعات به عنوان بخشی از جزئیات تماس برای تماس های دریافتی ارائه شده است.
اگر یک CallScreeningService
با مجوز READ_CONTACTS
را در اختیار داشته باشد ، در صورت تماس های دریافتی از یا تماس های خروجی به شماره در تماس های کاربر ، برنامه به برنامه اطلاع داده می شود.
برای اطلاعات بیشتر ، به جلوگیری از جعل شناسه تماس گیرنده مراجعه کنید.
به روزرسانی های API موبایل را باز کنید
برای کسب اطلاعات در مورد پشتیبانی OMAPI در Android 11 و بالاتر ، به پشتیبانی Open Mobile API Reader مراجعه کنید.
VPN های اجرا
برنامه هایی که API سطح 30 و بالاتر را هدف قرار می دهند یا در دستگاه های راه اندازی شده در سطح API سطح 29 و بالاتر می توانند IKEV2/IPSEC را برای VPN های تنظیم شده کاربر و مبتنی بر برنامه اعمال کنند.
VPN ها بومی سیستم عامل را اجرا می کنند و کد مورد نیاز برای ایجاد اتصالات IKEV2/IPSEC VPN را در یک برنامه ساده می کنند.
کنترل دسترسی به شبکه هر فرآیند
برای اطلاعات در مورد امکان دسترسی به شبکه به صورت هر فرآیند ، به مدیریت استفاده از شبکه مراجعه کنید.
اجازه دهید چندین پیکربندی Passpoint نصب شده با همان FQDN
با شروع Android 11 ، می توانید از PasspointConfiguration.getUniqueId()
برای دریافت یک شناسه منحصر به فرد برای یک شیء PasspointConfiguration
استفاده کنید ، که کاربران برنامه شما را قادر می سازد چندین پروفایل را با همان نام دامنه کاملاً واجد شرایط (FQDN) نصب کنند.
این قابلیت هنگامی که یک شرکت مخابراتی بیش از یک ترکیب از کد کشور تلفن همراه (MCC) و کد شبکه تلفن همراه (MNC) را در شبکه خود مستقر کند ، مفید است ، اما فقط یک FQDN واحد دارد. در Android 11 و بالاتر ، می توان بیش از یک پروفایل را با همان FQDN نصب کرد که وقتی کاربر یک سیم کارت را با MCC یا MNC نصب می کند ، با شبکه به عنوان ارائه دهنده خانه مطابقت خواهد داشت.
پشتیبانی از آنتن GNSS
Android 11 کلاس GnssAntennaInfo
را معرفی می کند ، که باعث می شود برنامه شما از موقعیت مکانی با دقت سانتیمتر استفاده کند که سیستم ماهواره ای ناوبری جهانی (GNSS) می تواند فراهم کند.
در راهنمای اطلاعات کالیبراسیون آنتن بیشتر بدانید.
گرافیک
رمزگذار تصویر NDK
NDK ImageDecoder
API یک API استاندارد برای برنامه های Android C/C ++ را برای رمزگشایی مستقیم تصاویر فراهم می کند. توسعه دهندگان برنامه دیگر نیازی به استفاده از API های Framework (از طریق JNI) یا کتابخانه های تصویربرداری تصویر شخص ثالث ندارند. برای اطلاعات بیشتر ، به راهنمای توسعه دهنده Decoder Image مراجعه کنید.
API نرخ فریم
Android 11 یک API را فراهم می کند که برنامه ها را قادر می سازد از سیستم فریم مورد نظر خود مطلع شوند ، تا قضاوت را در دستگاه هایی که از نرخ های تازه سازی چندگانه پشتیبانی می کنند ، کاهش دهد. برای اطلاعات در مورد نحوه استفاده از این API ، به راهنمای نرخ فریم مراجعه کنید.
درخواست و بررسی پشتیبانی از تأخیر کم
نمایشگرهای خاصی می توانند گرافیک پس از پردازش ، مانند برخی از نمایشگرهای خارجی و تلویزیون را انجام دهند. این پردازش پس از پردازش گرافیک را بهبود می بخشد اما می تواند تأخیر را افزایش دهد. نمایشگرهای جدیدتر که از HDMI 2.1 پشتیبانی می کنند ، دارای یک حالت تأخیر کم خودکار هستند ( ALLM ، همچنین به عنوان حالت بازی شناخته می شود) ، که با خاموش کردن این پردازش پس از تأخیر ، تأخیر را به حداقل می رساند. برای اطلاعات بیشتر در مورد ALLM ، به مشخصات HDMI 2.1 مراجعه کنید.
در صورت وجود یک پنجره می تواند از حالت تأخیر کم خودکار استفاده شود. ALLM به ویژه برای برنامه هایی مانند بازی ها و ویدئو کنفرانس ، که در آن تأخیر کم از داشتن بهترین گرافیک ممکن مهم است ، مفید است.
برای جابجایی حداقل پردازش پس از خاموش یا خاموش ، با Window.setPreferMinimalPostProcessing()
تماس بگیرید ، یا ویژگی preferMinimalPostProcessing
پنجره را روی true
تنظیم کنید. همه نمایش ها از حداقل پردازش پس از پشتیبانی پشتیبانی نمی کنند. برای اطلاع از اینکه آیا یک صفحه نمایش خاص از آن پشتیبانی می کند ، با روش جدید Display.isMinimalPostProcessingSupported()
تماس بگیرید.
تزریق لایه اشکال زدایی گرافیک
برنامه های کاربردی اکنون می توانند لایه های گرافیکی خارجی ( GLE ، Vulkan ) را در کد برنامه های بومی بارگذاری کنند تا عملکرد مشابهی با یک برنامه اشکال زدایی را در معرض دید خود قرار دهند ، اما بدون تحمل عملکرد سربار. این ویژگی در هنگام پروفایل برنامه خود با ابزارهایی مانند GAPID از اهمیت ویژه ای برخوردار است. برای پروفایل برنامه خود ، عنصر متا داده زیر را در پرونده مانیفست برنامه خود به جای ساخت اشکال زدایی برنامه درج کنید:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
تصاویر و دوربین
صداها و ارتعاشات بی صدا در هنگام ضبط فعال
با استفاده از Android 11 ، هنگام استفاده فعال از دوربین ، برنامه شما می تواند فقط لرزش ها ، صداها و ارتعاشات را نادیده بگیرد ، یا از setCameraAudioRestriction()
استفاده نکنید.
پشتیبانی از دوربین گسترش یافته در شبیه ساز اندرویدی
برای کسب اطلاعات در مورد پشتیبانی گسترده از دوربین های موجود در شبیه ساز که از Android 11 شروع می شود ، به پشتیبانی دوربین مراجعه کنید.
پشتیبانی از استفاده همزمان از بیش از یک دوربین
Android 11 API را برای استفاده از بیش از یک دوربین به طور همزمان ، از جمله دوربین جلوی و پشتی ، به پشتیبانی پرس و جو اضافه می کند.
برای بررسی پشتیبانی از دستگاهی که برنامه شما در حال اجرا است ، از روش های زیر استفاده کنید:
-
getConcurrentCameraIds()
Set
ای از ترکیبات دوربین را که می توانند همزمان با ترکیبات جریان تضمین شده در هنگام پیکربندی با همان فرآیند درخواست پخش شوند ، برمی گرداند. -
isConcurrentSessionConfigurationSupported()
پرس و جو می کند که آیا دستگاه های دوربین می توانند همزمان از تنظیمات جلسه مربوطه پشتیبانی کنند.
پشتیبانی بهتر از تصاویر HEIF با فریم های متعدد
با شروع Android 11 ، اگر شما با ImageDecoder.decodeDrawable()
و یک تصویر HEIF را که حاوی یک دنباله از فریم ها (مانند انیمیشن یا عکس پشت سر هم) است ، عبور دهید ، این روش یک AnimatedImageDrawable
شامل می شود که حاوی کل دنباله تصویر است. در نسخه های قبلی Android ، این روش فقط یک قاب واحد BitmapDrawable
را برگرداند.
اگر گرافیک HEIF حاوی چندین فریم است که در یک دنباله نیستند ، می توانید با فراخوانی MediaMetadataRetriever.getImageAtIndex()
یک قاب جداگانه را بازیابی کنید.
قابلیت دسترسی
به روزرسانی برای توسعه دهندگان خدمات دسترسی
اگر یک سرویس دسترسی به سفارشی ایجاد می کنید ، می توانید از ویژگی های زیر در Android 11 استفاده کنید:
- توضیح کاربر در مورد سرویس دسترسی اکنون علاوه بر متن ساده ، HTML و تصاویر را نیز امکان پذیر می کند. این انعطاف پذیری توضیح را برای کاربران نهایی آسانتر می کند که خدمات شما چه کاری انجام می دهد و چگونه می تواند به آنها کمک کند.
- برای کار با توضیحات از حالت یک عنصر UI که از نظر معنایی بیشتر از
contentDescription
معنی دار است ، با روشgetStateDescription()
تماس بگیرید. - برای درخواست آن رویدادهای لمسی از Explorer Touch System ، با
setTouchExplorationPassthroughRegion()
تماس بگیرید. به طور مشابه ، برای درخواست حرکات دور از ردیاب ژست سیستم ، باsetGestureDetectionPassthroughRegion()
تماس بگیرید. - شما می توانید اقدامات IME مانند "Enter" و "Next" و همچنین تصاویر ویندوز را درخواست کنید که پرچم
FLAG_SECURE
فعال نمی کنند.
ویژگی های اضافی
فرآیند برنامه دلایل خروج
Android 11 روش ActivityManager.getHistoricalProcessExitReasons()
معرفی می کند ، که دلایل خاتمه فرآیند اخیر را گزارش می کند. برنامه ها می توانند از این روش برای جمع آوری اطلاعات تشخیصی تصادف استفاده کنند ، از جمله اینکه آیا خاتمه فرآیند به دلیل ANR ، مشکلات حافظه یا دلایل دیگر است. علاوه بر این ، می توانید از روش جدید setProcessStateSummary()
برای ذخیره اطلاعات حالت سفارشی برای تجزیه و تحلیل بعدی استفاده کنید.
روش getHistoricalProcessExitReasons()
مواردی از کلاس ApplicationExitInfo
را باز می گرداند ، که حاوی اطلاعات مربوط به مرگ فرآیند برنامه است. با فراخوانی getReason()
در نمونه این کلاس ، می توانید تعیین کنید که چرا روند برنامه شما کشته شد. به عنوان مثال ، یک مقدار برگشتی از REASON_CRASH
نشان می دهد که یک استثناء نامعلوم در برنامه شما رخ داده است. اگر برنامه شما نیاز به اطمینان از منحصر به فرد برای رویدادهای خروج دارد ، می تواند یک شناسه خاص برنامه را مانند مقدار هش بر اساس زمان سنج از روش getTimestamp()
حفظ کند.
منابع اضافی
برای اطلاعات بیشتر ، مقاله را در مورد ابزارهای جدید Android 11 بخوانید تا برنامه ها خصوصی تر و پایدارتر در رسانه باشند .
لودرهای منبع
Android 11 یک API جدید را معرفی می کند که به برنامه ها اجازه می دهد تا نحوه جستجوی و بارگیری منابع را به صورت پویا گسترش دهند. کلاسهای جدید API ResourcesLoader
و ResourcesProvider
در درجه اول وظیفه ارائه عملکرد جدید را بر عهده دارند. آنها در کنار هم ، توانایی تأمین منابع و دارایی های اضافی را فراهم می کنند ، یا ارزش منابع و دارایی های موجود را تغییر می دهند.
اشیاء ResourcesLoader
ظروف هستند که ResourcesProvider
به عنوان نمونه Resources
برنامه ارائه می دهند. به نوبه خود ، اشیاء ResourcesProvider
روش هایی را برای بارگیری داده های منبع از APK ها و جداول منابع ارائه می دهند.
یک مورد اصلی برای این API بارگیری دارایی های سفارشی است. شما می توانید از loadFromDirectory()
برای ایجاد یک ResourcesProvider
استفاده کنید که وضوح منابع و دارایی های مبتنی بر پرونده را هدایت می کند و باعث می شود یک دایرکتوری خاص به جای برنامه کاربردی APK جستجو کند. شما می توانید از طریق خانواده open()
روش های AssetManager
API ، دقیقاً مانند دارایی های همراه در APK ، به این دارایی ها دسترسی پیدا کنید.
طرح امضای APK v4
Android 11 پشتیبانی از طرح امضای APK V4 را اضافه می کند. این طرح نوع جدیدی از امضای را در یک پرونده جداگانه ( apk-name .apk.idsig
) تولید می کند اما در غیر این صورت شبیه V2 و V3 است. هیچ تغییری در APK ایجاد نمی شود. این طرح از نصب APK افزایشی ADB پشتیبانی می کند ، که باعث افزایش نصب APK می شود.
فیلترهای قصد پویا
برای دریافت اهداف ، یک برنامه باید در زمان کامپایل اعلام کند که با تعریف یک فیلتر قصد در مانیفست برنامه ، چه نوع داده هایی را که قادر به دریافت آن است ، دریافت می کند. در Android 10 و پایین ، برنامه ها هیچ راهی برای تغییر فیلترهای قصد خود در زمان اجرا ندارند. این یک مشکل برای برنامه های مجازی سازی (مانند ماشینهای مجازی و دسک تاپ از راه دور) است زیرا آنها هیچ راهی برای دانستن دقیقاً چه نرم افزاری که کاربر در داخل آنها نصب خواهد کرد ، ندارند.
Android 11 گروه های MIME را معرفی می کند ، یک عنصر مانیفست جدید که به یک برنامه اجازه می دهد مجموعه ای پویا از انواع MIME را در یک فیلتر قصد اعلام کند و آن را در زمان اجرا به صورت برنامه ای تغییر دهد. برای استفاده از یک گروه 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 را در زمان اجرا مشخص می کند. با انتقال شناسه آن به روشهای جدید زیر در کلاس API PackageManager
می توانید به محتوای یک گروه MIME دسترسی پیدا کرده و به روز کنید:
هنگامی که شما یک نوع MIME را به صورت برنامه ای به یک گروه MIME اضافه می کنید ، دقیقاً همانند یک نوع MIME استاتیک است که صریحاً در مانیفست اعلام شده است.
پیشرفت های خودکار
Android 11 پیشرفت هایی را برای خدمات Autofill معرفی می کند.
شناسه های اشاره ای در structure.viewnode
غالباً برای سرویس های Autofill برای محاسبه هش امضاء برای نمای بر اساس خصوصیات نمایش مفید است. نکته نمایش یک ویژگی خاص خوب است که هنگام محاسبه یک هش امضاء شامل می شود ، اما رشته اشاره ممکن است با محل تلفن تغییر کند. برای حل این مشکل ، Android 11 با یک روش جدید getHintIdEntry()
، که شناسه منابع را برای متن اشاره ای به نمایش می گذارد ، AssistStructure.ViewNode
را گسترش می دهد. این روش یک مقدار مستقل از مکان را فراهم می کند که می توانید برای محاسبه هش های امضا از آن استفاده کنید.
مجموعه داده ها رویدادها را نشان می دهند
برای کمک به خدمات خودکار در بهبود پیشنهادات خود ، Android 11 راهی را برای شناسایی مواردی فراهم می کند که یک سرویس Autofill ارائه داده است اما کاربر هیچ یک از آنها را انتخاب نکرده است. در Android 11 ، FillEventHistory
نوع جدیدی از رویداد TYPE_DATASETS_SHOWN
را گزارش می کند. FillEventHistory
هر زمان که سرویس Autofill یک یا چند مجموعه داده را به کاربر ارائه می دهد ، رویدادی از این نوع را ثبت می کند. خدمات Autofill می توانند از این رویدادها در رابطه با رویداد TYPE_DATASET_SELECTED
موجود استفاده کنند تا مشخص شود آیا کاربر هر یک از گزینه های Autofill ارائه شده را انتخاب کرده است یا خیر.
ادغام IME
صفحه کلید و سایر IME ها هم اکنون می توانند به جای اینکه در یک منوی کشویی قرار بگیرند ، پیشنهادات Autofill را بصورت خطی ، در یک نوار پیشنهادی یا رابط مشابه نشان دهند. برای محافظت از اطلاعات حساس مانند رمزهای عبور و شماره کارت اعتباری ، پیشنهادات به کاربر نمایش داده می شود اما تا زمانی که کاربر یکی را انتخاب کند ، برای IME مشخص نیست. برای کسب اطلاعات در مورد چگونگی پشتیبانی از IME و مدیران رمز عبور ، می توانند از این ویژگی پشتیبانی کنند ، به ادغام Autofill با صفحه کلید مراجعه کنید.
به اشتراک گذاری داده ها با سرویس ضبط محتوا
با شروع در Android 11 ، برنامه شما می تواند داده ها را با سرویس ضبط محتوای دستگاه به اشتراک بگذارد. این قابلیت ، ارائه اطلاعات در یک دستگاه ، مانند نشان دادن نام آهنگی که در حال حاضر در محیط کاربر پخش می شود ، برای یک دستگاه آسان تر می کند.
برای اینکه داده های برنامه خود را در دسترس سرویس Content Capture در دسترس قرار دهید ، به عنوان نمونه از ContentCaptureManager
با روش shareData()
تماس بگیرید. اگر سیستم درخواست اشتراک داده را بپذیرد ، برنامه شما یک توصیف کننده پرونده فقط نوشتن را دریافت می کند تا با سرویس ضبط محتوا به اشتراک بگذارد.