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

اندروید 9 (سطح API 28) ویژگی ها و قابلیت های بسیار خوبی را برای کاربران و توسعه دهندگان معرفی می کند. این سند موارد جدیدی را برای توسعه دهندگان برجسته می کند.

برای آشنایی با APIهای جدید، گزارش تفاوت API را بخوانید یا به مرجع Android API مراجعه کنید. همچنین حتماً تغییرات رفتار اندروید 9 را بررسی کنید تا در مورد مناطقی که تغییرات پلتفرم ممکن است بر برنامه های شما تأثیر بگذارد مطلع شوید.

موقعیت یابی داخلی با Wi-Fi RTT

API های RTT جدید از موقعیت یابی داخلی در برنامه های شما پشتیبانی می کنند.

Android 9 پشتیبانی پلتفرمی را برای پروتکل Wi-Fi IEEE 802.11-2016 – که به عنوان Wi-Fi Round-Trip-Time (RTT) نیز شناخته می شود – اضافه می کند تا به شما امکان دهد از موقعیت یابی داخلی در برنامه های خود استفاده کنید.

در دستگاه‌های دارای Android 9 با پشتیبانی سخت‌افزار، برنامه‌های شما می‌توانند از APIهای RTT برای اندازه‌گیری فاصله تا نقاط دسترسی Wi-Fi (AP) با قابلیت RTT استفاده کنند. دستگاه باید خدمات مکان را فعال کرده و اسکن Wi-Fi را روشن کرده باشد (در قسمت تنظیمات > مکان ) و برنامه شما باید مجوز ACCESS_FINE_LOCATION را داشته باشد. دستگاه برای استفاده از RTT نیازی به اتصال به نقاط دسترسی ندارد. برای حفظ حریم خصوصی، فقط تلفن قادر به تعیین فاصله تا نقطه دسترسی است. نقاط دسترسی این اطلاعات را ندارند.

اگر دستگاه شما فاصله 3 یا چند نقطه دسترسی را اندازه می‌گیرد، می‌توانید از یک الگوریتم چندلایه‌ای برای تخمین موقعیت دستگاهی که به بهترین وجه با این اندازه‌ها منطبق است، استفاده کنید. نتیجه معمولاً در فاصله 1 تا 2 متری دقیق است.

با این دقت، می‌توانید تجربه‌های جدیدی مانند پیمایش درون ساختمان و سرویس‌های مبتنی بر موقعیت مکانی دقیق، مانند کنترل صدای مبهم (به عنوان مثال، «این چراغ را روشن کنید» ) و اطلاعات مبتنی بر مکان (مانند «آیا») ایجاد کنید. پیشنهادات ویژه ای برای این محصول وجود دارد؟" ).

WiFi RTT API در حال استفاده در برنامه نمایشی Android WifiRttScan را ببینید.

برای اطلاعات بیشتر، مکان Wi-Fi را ببینید: محدوده با RTT .

پشتیبانی از بریدگی نمایش

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

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

اندروید 9 از جدیدترین صفحه‌نمایش‌های لبه به لبه که دارای بریدگی‌های نمایشگر برای دوربین‌ها و بلندگوها هستند، پشتیبانی می‌کند. کلاس DisplayCutout به شما امکان می دهد مکان و شکل مناطق غیر کاربردی را که در آن محتوا نباید نمایش داده شود، پیدا کنید. برای تعیین وجود و محل قرارگیری این مناطق برش، از متد getDisplayCutout() استفاده کنید.

یک ویژگی طرح‌بندی پنجره جدید، layoutInDisplayCutoutMode ، به برنامه شما اجازه می‌دهد محتوای خود را در اطراف برش‌های دستگاه قرار دهد. می توانید این ویژگی را به یکی از مقادیر زیر تنظیم کنید:

شما می توانید یک بریدگی صفحه را در هر دستگاه یا شبیه ساز دارای اندروید 9 به صورت زیر شبیه سازی کنید:

  1. گزینه های توسعه دهنده را فعال کنید.
  2. در صفحه گزینه‌های برنامه‌نویس ، به قسمت Drawing بروید و شبیه‌سازی نمایشگر با برش را انتخاب کنید.
  3. اندازه برش را انتخاب کنید.

اطلاعیه ها

اندروید 9 چندین پیشرفت را برای اعلان‌ها معرفی می‌کند که همه آن‌ها در دسترس توسعه‌دهندگانی هستند که سطح API 28 و بالاتر را هدف قرار می‌دهند.

اعلان های پیام رسانی

MessagingStyle با عکس پیوست شده است.

اطلاع رسانی پیام

سبک پیام رسانی با پاسخ و مکالمه.

برای نمونه کدی که از اعلان‌ها، از جمله ویژگی‌های Android 9 استفاده می‌کند، به نمونه افراد مراجعه کنید.

تجربه پیام رسانی پیشرفته

با شروع Android 7.0 (سطح API 24)، می‌توانید اقدامی برای پاسخ دادن به پیام‌ها یا وارد کردن متن دیگر به طور مستقیم از یک اعلان اضافه کنید. اندروید 9 این ویژگی را با پیشرفت های زیر افزایش می دهد:

  • پشتیبانی ساده برای شرکت کنندگان در مکالمه: کلاس Person برای شناسایی افراد درگیر در یک مکالمه، از جمله آواتارها و URI آنها استفاده می شود. بسیاری از APIهای دیگر، مانند addMessage() اکنون از کلاس Person به جای CharSequence استفاده می کنند. کلاس Person از الگوی طراحی Builder نیز پشتیبانی می کند.

  • پشتیبانی از تصاویر: اندروید 9 اکنون تصاویر را در اعلان‌های پیام‌رسانی در گوشی‌ها نمایش می‌دهد. برای نمایش تصویر می توانید از setData() روی پیام استفاده کنید. قطعه کد زیر نحوه ایجاد یک Person و یک پیام حاوی یک تصویر را نشان می دهد.

کاتلین

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

جاوا

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
  • ذخیره پاسخ ها به صورت پیش نویس: برنامه شما می تواند EXTRA_REMOTE_INPUT_DRAFT ارسال شده توسط سیستم را هنگامی که کاربر ناخواسته یک اعلان پیام را می بندد، بازیابی کند. شما می توانید از این قسمت اضافی برای پر کردن فیلدهای متنی در برنامه از قبل استفاده کنید تا کاربران بتوانند پاسخ خود را به پایان برسانند.

  • تشخیص اینکه یک مکالمه یک مکالمه گروهی است: می توانید از setGroupConversation() برای شناسایی هدفمند یک مکالمه به عنوان یک مکالمه گروهی یا غیر گروهی استفاده کنید.

  • تنظیم کنش معنایی برای یک intent: متد setSemanticAction() به شما اجازه می دهد تا معنای معنایی را به یک عمل مانند "علامت گذاری به عنوان خوانده شده"، "حذف"، "پاسخ" و غیره بدهید.

  • SmartReply: Android 9 از همان پاسخ‌های پیشنهادی موجود در برنامه پیام‌رسانی شما پشتیبانی می‌کند. از RemoteInput.setChoices() برای ارائه آرایه ای از پاسخ های استاندارد به کاربر استفاده کنید.

تنظیمات کانال، پخش و مزاحم نشوید

Android 8.0 کانال های اعلان را معرفی کرد که به شما امکان می دهد برای هر نوع اعلانی که می خواهید نمایش دهید، یک کانال قابل تنظیم توسط کاربر ایجاد کنید. اندروید 9 تنظیمات کانال اطلاع رسانی را با این تغییرات ساده می کند:

  • مسدود کردن گروه‌های کانال: اکنون کاربران می‌توانند کل گروه‌های کانال را در تنظیمات اعلان یک برنامه مسدود کنند. شما می توانید از متد isBlocked() برای شناسایی زمانی که یک گروه مسدود شده است استفاده کنید و در نتیجه هیچ اعلانی برای کانال های آن گروه ارسال نکنید.

    علاوه بر این، برنامه شما می‌تواند تنظیمات گروه کانال فعلی را با استفاده از متد getNotificationChannelGroup() جدید جستجو کند.

  • انواع هدف پخش جدید: سیستم اندروید اکنون با تغییر وضعیت مسدود کردن کانال‌های اعلان و گروه‌های کانال، مقاصد پخش را ارسال می‌کند. اپلیکیشنی که کانال یا گروه مسدود شده را در اختیار دارد، می‌تواند به این اهداف گوش دهد و بر اساس آن واکنش نشان دهد. برای اطلاعات بیشتر در مورد این اقدامات قصد و موارد اضافی، به لیست ثابت های به روز شده در مرجع NotificationManager مراجعه کنید. برای اطلاعات در مورد واکنش به اهداف پخش، به Broadcasts مراجعه کنید.

  • NotificationManager.Policy دارای سه دسته اولویت جدید Do-Not-Disturb است:

  • NotificationManager.Policy همچنین دارای هفت ثابت Do-Not-Disturb جدید است که می توانید از آنها برای سرکوب وقفه بصری استفاده کنید:

    • SUPPRESSED_EFFECT_FULL_SCREEN_INTENT از راه اندازی اعلان فعالیت تمام صفحه جلوگیری می کند.
    • SUPPRESSED_EFFECT_LIGHTS چراغ های اعلان را مسدود می کند.
    • SUPPRESSED_EFFECT_PEEK از لغزش کوتاه اعلان‌ها به نمای ("نگاه کردن") جلوگیری می‌کند.
    • SUPPRESSED_EFFECT_STATUS_BAR از نمایش اعلان‌ها در نوار وضعیت دستگاه‌هایی که از نوار وضعیت پشتیبانی می‌کنند جلوگیری می‌کند.
    • SUPPRESSED_EFFECT_BADGE نشان‌ها را در دستگاه‌هایی که از نشان پشتیبانی می‌کنند مسدود می‌کند. برای اطلاعات بیشتر، به اصلاح نشان اعلان مراجعه کنید.
    • SUPPRESSED_EFFECT_AMBIENT اعلان‌ها را در دستگاه‌هایی که از نمایشگرهای محیطی پشتیبانی می‌کنند مسدود می‌کند.
    • SUPPRESSED_EFFECT_NOTIFICATION_LIST از نمایش اعلان‌ها در نمای فهرست در دستگاه‌هایی که از نمای فهرست پشتیبانی می‌کنند، مانند سایه اعلان یا صفحه قفل جلوگیری می‌کند.

پشتیبانی از چند دوربین و به روز رسانی دوربین

در دستگاه‌های دارای Android 9، می‌توانید به طور همزمان از دو یا چند دوربین فیزیکی به جریان‌ها دسترسی داشته باشید. در دستگاه‌های دارای دو دوربین جلو یا دوگانه پشت، می‌توانید ویژگی‌های نوآورانه‌ای ایجاد کنید که تنها با یک دوربین امکان‌پذیر نیست، مانند زوم بدون درز، بوکه، و دید استریو. API همچنین به شما امکان می دهد یک جریان دوربین منطقی یا ترکیبی را فراخوانی کنید که به طور خودکار بین دو یا چند دوربین جابجا می شود.

بهبودهای دیگر در دوربین شامل پارامترهای Session اضافی است که به کاهش تأخیر در هنگام ضبط اولیه کمک می‌کند و اشتراک‌گذاری سطحی که به مشتریان دوربین اجازه می‌دهد تا موارد استفاده مختلف را بدون نیاز به توقف و شروع پخش دوربین انجام دهند. ما همچنین APIهایی را برای پشتیبانی از فلاش مبتنی بر نمایشگر و دسترسی به مهرهای زمانی OIS برای تثبیت‌کننده تصویر در سطح برنامه و جلوه‌های ویژه اضافه کرده‌ایم.

در اندروید 9 ، API چند دوربینی از دوربین‌های تک رنگ برای دستگاه‌هایی با قابلیت FULL یا LIMITED پشتیبانی می‌کند. خروجی تک رنگ از طریق فرمت YUV_420_888 با Y به عنوان مقیاس خاکستری، U (Cb) به عنوان 128 و V (Cr) به عنوان 128 به دست می آید.

اندروید 9 همچنین پشتیبانی از دوربین های خارجی USB/UVC را در دستگاه های پشتیبانی شده فعال می کند.

ImageDecoder برای نقشه های ترسیمی و بیت مپ

اندروید 9 کلاس ImageDecoder را معرفی می کند که رویکردی مدرن برای رمزگشایی تصاویر ارائه می دهد. از این کلاس به جای API های BitmapFactory و BitmapFactory.Options استفاده کنید.

ImageDecoder به شما امکان می دهد یک Drawable یا یک Bitmap از یک بافر بایت، یک فایل یا یک URI ایجاد کنید. برای رمزگشایی یک تصویر، ابتدا createSource() با منبع تصویر کدگذاری شده فراخوانی کنید. سپس، decodeDrawable() یا decodeBitmap() را با عبور از شی ImageDecoder.Source برای ایجاد یک Drawable یا Bitmap فراخوانی کنید. برای تغییر تنظیمات پیش فرض، OnHeaderDecodedListener به decodeDrawable() یا decodeBitmap() منتقل کنید. ImageDecoder onHeaderDecoded() را با عرض و ارتفاع پیش‌فرض تصویر، پس از شناخته شدن فراخوانی می‌کند. اگر تصویر کدگذاری شده یک GIF یا WebP متحرک باشد، decodeDrawable() یک Drawable برمی‌گرداند که نمونه‌ای از کلاس AnimatedImageDrawable است.

روش های مختلفی وجود دارد که می توانید برای تنظیم ویژگی های تصویر استفاده کنید:

  • برای تغییر مقیاس تصویر رمزگشایی شده به اندازه دقیق، ابعاد هدف را به setTargetSize() منتقل کنید. شما همچنین می توانید تصاویر را با استفاده از اندازه نمونه مقیاس بندی کنید. اندازه نمونه را مستقیماً به setTargetSampleSize() منتقل کنید.
  • برای برش یک تصویر در محدوده تصویر کوچک شده، setCrop() را فراخوانی کنید.
  • برای ایجاد یک بیت مپ قابل تغییر، true به setMutableRequired() ارسال کنید.

ImageDecoder همچنین به شما امکان می دهد جلوه های سفارشی و پیچیده را به یک تصویر مانند گوشه های گرد یا ماسک های دایره ای اضافه کنید. از setPostProcessor() با نمونه ای از کلاس PostProcessor برای اجرای هر دستور ترسیمی که می خواهید استفاده کنید.

انیمیشن

اندروید 9 کلاس AnimatedImageDrawable را برای طراحی و نمایش تصاویر متحرک GIF و WebP معرفی می کند. AnimatedImageDrawable مشابه AnimatedVectorDrawable عمل می کند، زیرا رشته رندر انیمیشن های AnimatedImageDrawable را هدایت می کند. نخ رندر همچنین از یک نخ کارگر برای رمزگشایی استفاده می کند، به طوری که رمزگشایی با سایر عملیات روی رشته رندر تداخلی ایجاد نمی کند. این پیاده سازی به برنامه شما اجازه می دهد تا یک تصویر متحرک را بدون مدیریت به روز رسانی های آن یا تداخل با رویدادهای دیگر در رشته رابط کاربری برنامه شما نمایش دهد.

AnimatedImageDrawable می توان با استفاده از یک نمونه از ImageDecoder رمزگشایی کرد. قطعه کد زیر نحوه استفاده از ImageDecoder برای رمزگشایی AnimatedImageDrawable را نشان می دهد:

کاتلین

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

جاوا

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

ImageDecoder چندین روش دارد که به شما امکان می دهد تصویر را بیشتر تغییر دهید. برای مثال، می‌توانید از متد setPostProcessor() برای تغییر ظاهر تصویر، مانند اعمال یک ماسک دایره‌ای یا گوشه‌های گرد استفاده کنید.

ویدیوی HDR VP9، فشرده‌سازی تصویر HEIF و APIهای رسانه

Android 9 پشتیبانی داخلی از VP9 Profile 2 با محدوده دینامیکی بالا (HDR) ارائه می‌کند، بنابراین می‌توانید فیلم‌های دارای HDR را از YouTube، Play Movies و سایر منابع در دستگاه‌های دارای HDR به کاربران خود تحویل دهید.

اندروید 9 همچنین برای رمزگذاری تصاویر با استفاده از فرمت فایل تصویری با کارایی بالا ( HEIF یا HEIC) پشتیبانی می‌کند که باعث بهبود فشرده‌سازی و کاهش فضای ذخیره‌سازی و استفاده از داده‌های شبکه می‌شود. نمونه های تصویر ثابت HEIF در کلاس های MediaMuxer و MediaExtractor پشتیبانی می شوند. با پشتیبانی پلتفرم در دستگاه‌های Android 9، ارسال و استفاده از تصاویر HEIF از سرور باطن شما آسان است. پس از اینکه مطمئن شدید که برنامه شما با این فرمت داده برای اشتراک‌گذاری و نمایش سازگار است، HEIF را به عنوان یک قالب ذخیره‌سازی تصویر در برنامه خود امتحان کنید. شما می توانید با استفاده از ImageDecoder یا BitmapFactory (که یک بیت مپ از یک فایل JPEG دریافت می کند) تبدیل jpeg به heic را انجام دهید. سپس می توانید از HeifWriter برای نوشتن تصاویر ثابت HEIF از بافرهای YUV بایت یا نمونه هایی از Surface یا Bitmap استفاده کنید.

معیارهای رسانه نیز از کلاس های AudioTrack ، AudioRecord و MediaDrm در دسترس هستند.

اندروید 9 روش هایی را برای دریافت معیارها، سطوح HDCP، سطوح امنیتی و تعداد جلسات و افزودن کنترل بیشتر بر سطوح امنیتی و توقف های ایمن به کلاس MediaDRM معرفی می کند. برای جزئیات به گزارش API Diff مراجعه کنید.

در اندروید 9، API AAudio از چندین ویژگی اضافی AAudioStream، از جمله استفاده، نوع محتوا و از پیش تعیین شده ورودی، پشتیبانی می‌کند. با استفاده از این ویژگی ها، می توانید جریان هایی ایجاد کنید که برای برنامه های VoIP یا دوربین فیلمبرداری تنظیم شده اند. همچنین می‌توانید شناسه جلسه را طوری تنظیم کنید که یک جریان صوتی AA را با یک میکس فرعی که می‌تواند شامل افکت‌ها باشد، مرتبط کند. برای کنترل افکت ها از AudioEffect API استفاده کنید.

اندروید 9 API AudioEffect را برای پردازش دینامیک معرفی می کند. با این کلاس، می‌توانید جلوه‌های صوتی مبتنی بر کانال - از جمله تساوی، فشرده‌سازی چند باند و محدودکننده - را در چندین مرحله ایجاد کنید. تعداد باندها و مراحل فعال قابل تنظیم است و اکثر پارامترها را می توان در زمان واقعی کنترل کرد.

حساسیت به هزینه داده در JobScheduler

با شروع Android 9، JobScheduler می‌تواند از سیگنال‌های وضعیت شبکه ارائه شده توسط اپراتورها برای بهبود مدیریت مشاغل مرتبط با شبکه استفاده کند.

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

هنگام اضافه کردن کارها، مطمئن شوید که از setEstimatedNetworkBytes() ، setPrefetch() و setRequiredNetwork() در صورت مناسب استفاده کنید تا به JobScheduler کمک کند تا کار را به درستی انجام دهد. هنگامی که کار شما اجرا می شود، مطمئن شوید که از شیء Network برگردانده شده توسط JobParameters.getNetwork() استفاده کنید. در غیر این صورت به طور ضمنی از شبکه پیش‌فرض دستگاه استفاده می‌کنید که ممکن است نیازهای شما را برآورده نکند و باعث مصرف ناخواسته داده شود.

API شبکه های عصبی 1.1

Neural Networks API در اندروید 8.1 (سطح API 27) برای سرعت بخشیدن به یادگیری ماشین روی دستگاه در اندروید معرفی شد. Android 9 API را گسترش داده و بهبود می‌بخشد و از 9 عملیات جدید پشتیبانی می‌کند:

مشکل شناخته شده: هنگام انتقال تانسورهای ANEURALNETWORKS_TENSOR_QUANT8_ASYMM به عملیات ANEURALNETWORKS_PAD ، که در Android 9 و بالاتر موجود است، خروجی NNAPI ممکن است با خروجی چارچوب‌های یادگیری ماشین سطح بالاتر، مانند TensorFlow Lite مطابقت نداشته باشد. در عوض باید فقط از ANEURALNETWORKS_TENSOR_FLOAT32 عبور کنید تا مشکل حل شود.

علاوه بر این، API همچنین یک تابع جدید به نام ANeuralNetworksModel_relaxComputationFloat32toFloat16() را معرفی می کند که به شما امکان می دهد تعیین کنید که آیا ANEURALNETWORKS_TENSOR_FLOAT32 با محدوده و دقتی به اندازه فرمت IEEE 754 16-bit atingpoint محاسبه شود یا خیر.

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

اندروید 9 چندین پیشرفت را معرفی می کند که خدمات تکمیل خودکار می توانند برای بهبود بیشتر تجربه کاربر هنگام پر کردن فرم ها اعمال کنند. برای کسب اطلاعات بیشتر درباره نحوه استفاده از ویژگی های تکمیل خودکار در برنامه خود، به راهنمای چارچوب تکمیل خودکار مراجعه کنید.

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

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

تایید محافظت شده اندروید

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

اگر کاربر بیانیه را بپذیرد، Android Keystore یک امضای رمزنگاری را دریافت کرده و ذخیره می‌کند که توسط یک کد احراز هویت پیام هش کلید (HMAC) محافظت می‌شود. پس از اینکه Android Keystore اعتبار پیام را تأیید کرد، برنامه شما می‌تواند از کلید ایجاد شده از trustedConfirmationRequired در محیط اجرای مورد اعتماد (TEE) برای امضای پیامی که کاربر پذیرفته است استفاده کند. امضا با اطمینان بسیار بالا نشان می دهد که کاربر بیانیه را دیده و با آن موافقت کرده است.

احتیاط: تأیید محافظت شده Android یک کانال اطلاعاتی امن برای کاربر فراهم نمی کند. برنامه شما نمی‌تواند ضمانت‌های محرمانه‌ای را فراتر از ضمانت‌هایی که پلتفرم Android ارائه می‌دهد، در نظر بگیرد. به ویژه، از این گردش کار برای نمایش اطلاعات حساسی که معمولاً در دستگاه کاربر نشان نمی‌دهید استفاده نکنید.

برای راهنمایی در مورد افزودن پشتیبانی برای تأیید محافظت شده Android، راهنمای تأیید محافظت شده Android را ببینید.

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

در اندروید 9، سیستم گفتگوهای احراز هویت بیومتریک را از طرف برنامه شما ارائه می دهد. این عملکرد یک ظاهر، احساس و مکان استاندارد برای گفتگو ایجاد می‌کند و به کاربران اطمینان بیشتری می‌دهد که در برابر یک بررسی‌کننده اعتبار بیومتریک قابل اعتماد احراز هویت می‌شوند.

اگر برنامه شما از FingerprintManager برای نمایش یک گفتگوی احراز هویت اثر انگشت برای کاربران استفاده می کند، به جای آن به استفاده از BiometricPrompt بروید. BiometricPrompt برای نمایش گفتگوی احراز هویت به سیستم متکی است. همچنین رفتار خود را برای انطباق با نوع احراز هویت بیومتریک که کاربر انتخاب کرده است تغییر می دهد.

ماژول امنیتی سخت افزار

دستگاه‌های پشتیبانی‌شده با نصب Android 9 یا بالاتر می‌توانند دارای StrongBox Keymaster باشند، پیاده‌سازی Keymaster HAL که در یک ماژول امنیتی سخت‌افزار قرار دارد. ماژول شامل موارد زیر است:

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

هنگام بررسی کلیدهای ذخیره شده در StrongBox Keymaster، سیستم یکپارچگی کلید را با محیط اجرای مورد اعتماد (TEE) تأیید می کند.

برای کسب اطلاعات بیشتر در مورد استفاده از Strongbox Keymaster، به ماژول امنیت سخت افزار مراجعه کنید.

وارد کردن کلید امن به Keystore

Android 9 با افزودن قابلیت وارد کردن کلیدهای رمزگذاری شده به طور ایمن به Keystore با استفاده از قالب کلید رمزگذاری شده ASN.1، امنیت رمزگشایی کلید اضافی را فراهم می کند. سپس Keymaster کلیدهای موجود در Keystore را رمزگشایی می کند، بنابراین محتوای کلیدها هرگز به صورت متن ساده در حافظه میزبان دستگاه ظاهر نمی شود.

درباره نحوه وارد کردن کلیدهای رمزگذاری شده با امنیت بیشتر بیاموزید.

طرح امضای APK با چرخش کلید

اندروید 9 پشتیبانی از APK Signature Scheme نسخه 3 را اضافه می کند. این طرح این امکان را دارد که برای هر گواهی امضا، یک رکورد اثبات چرخش در بلوک امضای خود لحاظ کند. این قابلیت به برنامه شما امکان می‌دهد با پیوند دادن گواهی‌های امضای گذشته فایل APK به گواهی‌نامه‌ای که اکنون با آن امضا شده است، با یک گواهی امضای جدید امضا شود.

درباره نحوه چرخاندن کلیدها با استفاده از apksigner بیشتر بیاموزید.

گزینه ای برای مجاز کردن رمزگشایی کلید فقط در دستگاه های قفل نشده

اندروید 9 پرچم unlockedDeviceRequired را معرفی می کند. این گزینه تعیین می‌کند که آیا Keystore باید قبل از رمزگشایی هر گونه داده در حین پرواز یا ذخیره شده با استفاده از کلید مشخص شده، قفل صفحه را باز کند یا خیر. این نوع کلیدها برای رمزگذاری داده های حساس برای ذخیره روی دیسک، مانند داده های سلامت یا سازمانی مناسب هستند. این پرچم به کاربران اطمینان بیشتری می دهد که در صورت گم شدن یا دزدیده شدن تلفن، در زمانی که دستگاه قفل است، نمی توان داده ها را رمزگشایی کرد.

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

پشتیبانی از رمزگذاری قدیمی

دستگاه‌های Android 9 که با Keymaster 4 عرضه می‌شوند، از الگوریتم رمزگذاری داده‌های سه‌گانه یا Triple DES پشتیبانی می‌کنند. اگر برنامه شما با سیستم‌های قدیمی که به DES سه‌گانه نیاز دارند کار می‌کند، از این نوع رمز هنگام رمزگذاری اطلاعات کاربری حساس استفاده کنید.

برای آشنایی بیشتر با نحوه ایمن‌تر کردن برنامه‌تان، به امنیت برای برنامه‌نویسان Android مراجعه کنید.

منسوخ شدن WPS

راه اندازی محافظت شده Wi-Fi (WPS) به دلایل امنیتی منسوخ شده است.

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

اندروید 9 عملکرد و گزینه های توسعه دهنده جدیدی را در رابطه با پشتیبان گیری و بازیابی اضافه می کند. جزئیات مربوط به این تغییرات در بخش های بعدی نمایش داده می شود.

پشتیبان‌گیری رمزگذاری سمت کلاینت

اندروید 9 پشتیبانی از رمزگذاری پشتیبان‌گیری‌های اندروید با یک راز سمت مشتری را اضافه می‌کند. این پشتیبانی در صورت وجود شرایط زیر به صورت خودکار فعال می شود:

هنگامی که این معیار حفظ حریم خصوصی فعال است، برای بازیابی اطلاعات از نسخه‌های پشتیبان تهیه شده توسط دستگاه کاربر، پین، الگو یا رمز عبور دستگاه مورد نیاز است. برای کسب اطلاعات بیشتر در مورد فناوری پشت این ویژگی، کاغذ سفید سرویس Google Cloud Key Vault را ببینید.

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

اگر داده‌های برنامه شما شامل اطلاعات حساس یا تنظیمات برگزیده باشد، Android 9 به شما این امکان را می‌دهد که شرایط دستگاهی را که تحت آن داده‌های برنامه شما در پشتیبان‌گیری کاربر گنجانده می‌شود، تعریف کنید ، مانند زمانی که رمزگذاری سمت سرویس گیرنده فعال است یا دستگاه محلی به دستگاه محلی است. انتقال در حال انجام است.

برای کسب اطلاعات بیشتر درباره پشتیبان‌گیری از داده‌ها در دستگاه‌های Android، به نمای کلی پشتیبان‌گیری داده‌ها مراجعه کنید.

قابلیت دسترسی

اندروید 9 بهبودهایی را در چارچوب دسترس‌پذیری ارائه می‌کند که ارائه تجربیات بهتر به کاربران برنامه شما را آسان‌تر می‌کند.

معناشناسی ناوبری

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

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

عناوین قاب دسترسی

در Android 8.1 (سطح API 27) و پایین‌تر، سرویس‌های دسترس‌پذیری همیشه نمی‌توانند تعیین کنند که چه زمانی یک صفحه خاص به‌روزرسانی شده است، مانند زمانی که یک فعالیت یک قطعه را با قطعه دیگری جایگزین می‌کند. پانل ها از عناصر رابط کاربری مرتبط با بصری با گروه بندی منطقی تشکیل شده اند که معمولاً یک قطعه را تشکیل می دهند.

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

برای تعیین عنوان یک صفحه، از ویژگی android:accessibilityPaneTitle استفاده کنید. همچنین می‌توانید با استفاده از setAccessibilityPaneTitle() عنوان یک صفحه رابط کاربری را که در زمان اجرا جایگزین می‌شود، به‌روزرسانی کنید. به عنوان مثال، می توانید عنوانی برای ناحیه محتوای یک شی Fragment ارائه دهید.

ناوبری مبتنی بر عنوان

اگر برنامه شما محتوای متنی حاوی عناوین منطقی را نمایش می‌دهد، ویژگی android:accessibilityHeading را برای نمونه‌هایی از View که آن عناوین را نشان می‌دهند، روی true تنظیم کنید. با افزودن این سرفصل‌ها، به سرویس‌های دسترس‌پذیری اجازه می‌دهید تا به کاربران کمک کنند مستقیماً از یک عنوان به عنوان دیگر پیمایش کنند. هر سرویس دسترس‌پذیری می‌تواند از این قابلیت برای بهبود تجربه ناوبری UI کاربران استفاده کند.

ناوبری گروهی و خروجی

خوانندگان صفحه به طور سنتی از ویژگی android:focusable برای تعیین اینکه چه زمانی باید یک ViewGroup یا مجموعه ای از اشیاء View را به عنوان یک واحد بخوانند، استفاده می کردند. به این ترتیب، کاربران می توانستند بفهمند که نماها از نظر منطقی با یکدیگر مرتبط هستند.

در اندروید 8.1 و پایین‌تر، باید هر شیء View در یک ViewGroup به‌عنوان غیرقابل تمرکز و خود ViewGroup را به‌عنوان قابل فوکوس علامت‌گذاری کنید. این ترتیب باعث شد که برخی از نمونه‌های View قابل فوکوس شدن علامت‌گذاری شوند به نحوی که پیمایش صفحه‌کلید را دست و پاگیرتر کند.

با شروع در اندروید 9، می‌توانید از ویژگی android:screenReaderFocusable به جای ویژگی android:focusable در شرایطی استفاده کنید که ایجاد یک شی View قابل فوکوس عواقب نامطلوبی دارد. صفحه‌خوان‌ها روی تمام عناصری تمرکز می‌کنند که android:screenReaderFocusable یا android:focusable روی true تنظیم کرده‌اند.

اقدامات راحتی

اندروید 9 برای انجام اقدامات راحتی از جانب کاربران پشتیبانی می‌کند:

تعامل با راهنمای ابزار
ویژگی‌های اضافه شده در چارچوب دسترس‌پذیری به شما امکان می‌دهد به نکات ابزار در رابط کاربری برنامه دسترسی داشته باشید. از getTooltipText() برای خواندن متن یک راهنمای ابزار استفاده کنید و از ACTION_SHOW_TOOLTIP و ACTION_HIDE_TOOLTIP برای دستور دادن به نمونه هایی از View برای نمایش یا پنهان کردن نکات ابزارشان استفاده کنید.
اقدامات جهانی اضافه شده است
اندروید 9 از دو عملکرد دستگاه اضافی در کلاس AccessibilityService پشتیبانی می کند. سرویس شما می‌تواند به کاربران کمک کند دستگاه‌های خود را قفل کنند و به ترتیب با استفاده از عملکردهای GLOBAL_ACTION_LOCK_SCREEN و GLOBAL_ACTION_TAKE_SCREENSHOT عکس بگیرند.

جزئیات تغییر پنجره

Android 9 ردیابی به‌روزرسانی‌های ویندوز برنامه را آسان‌تر می‌کند، زمانی که یک برنامه چندین پنجره را به طور همزمان دوباره ترسیم می‌کند. هنگامی که یک رویداد TYPE_WINDOWS_CHANGED رخ می دهد، از getWindowChanges() API برای تعیین اینکه چگونه پنجره ها تغییر کرده اند استفاده کنید. در طول یک به روز رسانی چند پنجره ای، هر پنجره مجموعه ای از رویدادها را تولید می کند. متد getSource() نمای ریشه پنجره مرتبط با هر رویداد را برمی گرداند.

اگر برنامه‌ای عناوین قاب دسترس‌پذیری را برای اشیاء View خود تعریف کرده باشد، سرویس شما می‌تواند تشخیص دهد که چه زمانی رابط کاربری برنامه به‌روزرسانی می‌شود. هنگامی که یک رویداد TYPE_WINDOW_STATE_CHANGED رخ می دهد، از انواع برگردانده شده توسط getContentChangeTypes() برای تعیین اینکه پنجره چگونه تغییر کرده است استفاده کنید. برای مثال، فریم ورک می تواند تشخیص دهد که یک صفحه عنوان جدیدی دارد یا زمانی که یک صفحه ناپدید شده است.

چرخش

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

تأثیرات سازگاری برای برنامه ها در بیشتر موارد حداقل است. با این حال، اگر برنامه شما رفتار چرخش سفارشی‌شده‌ای دارد یا از تنظیمات غیرعادی جهت‌گیری صفحه استفاده می‌کند، ممکن است با مشکلاتی مواجه شوید که قبلاً مورد توجه قرار نمی‌گرفت، زمانی که اولویت چرخش کاربر همیشه روی عمودی تنظیم می‌شد. ما شما را تشویق می‌کنیم که نگاهی به رفتار چرخش در تمام فعالیت‌های کلیدی برنامه خود بیندازید و مطمئن شوید که تمام تنظیمات جهت‌گیری صفحه نمایش شما هنوز هم تجربه بهینه را ارائه می‌کنند.

برای جزئیات بیشتر، تغییرات رفتار مرتبط را ببینید.

موبایل در حال چرخش حالت چرخش جدید را نشان می‌دهد که به کاربران امکان می‌دهد چرخش را به صورت دستی فعال کنند

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

متن

اندروید 9 ویژگی های مرتبط با متن زیر را به پلتفرم می آورد:

  • Precomputed Text: کلاس PrecomputedText با امکان محاسبه و ذخیره اطلاعات مورد نیاز قبل از موعد، عملکرد رندر متن را بهبود می بخشد. همچنین به برنامه شما امکان می دهد طرح بندی متن را خارج از رشته اصلی انجام دهد.

  • ذره بین: کلاس Magnifier یک ویجت پلتفرمی است که یک API ذره بین را ارائه می دهد و به شما امکان می دهد یک تجربه ثابت از ویژگی ذره بین در همه برنامه ها داشته باشید.

  • Smart Linkify: اندروید 9 کلاس TextClassifier را تقویت می کند، که از یادگیری ماشینی برای شناسایی برخی از موجودات در متن انتخاب شده و پیشنهاد اقدامات استفاده می کند. به عنوان مثال، TextClassifier می تواند برنامه شما را فعال کند تا تشخیص دهد که کاربر شماره تلفنی را انتخاب کرده است. سپس برنامه شما می تواند به کاربر پیشنهاد کند با استفاده از آن شماره تماس تلفنی برقرار کند. ویژگی های موجود در TextClassifier جایگزین عملکرد کلاس Linkify می شود.

  • طرح‌بندی متن: چندین روش و ویژگی‌های راحت، پیاده‌سازی طراحی UI شما را آسان‌تر می‌کنند. برای جزئیات، به مستندات مرجع TextView مراجعه کنید.

تبدیل ART پیش از زمان فایل های DEX

در دستگاه‌هایی که Android 9 یا بالاتر دارند، کامپایلر پیش از زمان اجرای Android (ART) فایل‌های فرمت اجرایی Dalvik فشرده (DEX) را با تبدیل فایل‌های DEX در یک بسته برنامه به نمایشی فشرده‌تر، بهینه‌سازی می‌کند. این تغییر به برنامه شما امکان می دهد سریعتر راه اندازی شود و فضای دیسک و رم کمتری مصرف کند.

این بهبود به ویژه برای دستگاه‌های سطح پایین با سرعت ورودی/خروجی دیسک پایین‌تر مفید است.

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

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

با جمع‌آوری این ردیابی‌ها، می‌توانید داده‌های زمان‌بندی مربوط به فرآیندها و رشته‌های برنامه‌تان را ضبط کنید و انواع دیگری از وضعیت‌های دستگاه با اهمیت جهانی را مشاهده کنید.

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