نمای کلی ویژگی ها و API ها

اندروید 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 وجود دارد:

نشانگرهای بصری 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 کنترل‌های جدیدی را برای کمک به اجرای روان یادگیری ماشین معرفی می‌کند:

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.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() می توانید بررسی کنید که آیا یک کدک از رمزگشایی با تاخیر کم پشتیبانی می کند یا خیر.

برای روشن یا خاموش کردن رمزگشایی با تأخیر کم، یکی از موارد زیر را انجام دهید:

تابع جدید 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 فراخوانی کنید. اگر سیستم درخواست اشتراک‌گذاری داده را بپذیرد، برنامه شما یک توصیف‌کننده فایل فقط برای نوشتن برای اشتراک‌گذاری با سرویس ضبط محتوا دریافت می‌کند.