میاناهای برنامه‌سازی کاربردی Android 5.0

سطح ای‌پی‌آی: ۲۱

‫Android 5.0 (LOLLIPOP) ویژگی‌های جدیدی را برای کاربران و توسعه‌دهندگان برنامه ارائه می‌دهد. این سند مقدمه‌ای بر مهم‌ترین APIهای جدید ارائه می‌دهد.

اگر برنامه منتشرشده‌ای دارید، حتماً تغییرات رفتار Android 5.0 را که باید در برنامه‌تان لحاظ کنید بررسی کنید. این تغییرات رفتار ممکن است بر برنامه شما در دستگاه‌های Android 5.0 تأثیر بگذارد، حتی اگر از APIهای جدید استفاده نمی‌کنید یا عملکرد جدیدی را هدف‌یابی نمی‌کنید.

برای نگاهی کلی به ویژگی‌های جدید پلاتفرم، به‌جای آن نکات برجسته Android Lollipop را ببینید.

شروع توسعه

برای شروع ساختن برنامه برای Android 5.0، ابتدا باید کیت توسعه نرم‌افزار Android را دریافت کنید. سپس از مدیر کیت توسعه نرم‌افزار برای بارگیری «پلاتفرم کیت توسعه نرم‌افزار Android 5.0» و «تصاویر سیستم» استفاده کنید.

سطح میانای برنامه‌سازی کاربردی هدف را به‌روز کنید

برای بهینه‌سازی بهتر برنامه برای دستگاه‌های دارای Android 5.0، targetSdkVersion را روی "21" تنظیم کنید، برنامه‌تان را در تصویر سیستم Android 5.0 نصب کنید، آن را آزمایش کنید، سپس برنامه به‌روزشده را با این تغییر منتشر کنید.

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

برای کسب اطلاعات بیشتر درباره نحوه عملکرد سطوح API، سطح API چیست؟ را بخوانید.

تغییرات مهم در رفتار

اگر قبلاً برنامه‌ای برای Android منتشر کرده‌اید، توجه داشته باشید که ممکن است برنامه‌تان تحت تأثیر تغییرات Android 5.0 قرار بگیرد.

برای اطلاعات کامل، لطفاً تغییرات Android 5.0 را ببینید.

واسط کاربر

پشتیبانی از طراحی سه‌بعدی

‫Android 5.0 از سبک جدید طراحی مادی در Android پشتیبانی می‌کند. می‌توانید برنامه‌هایی با طراحی مادی بسازید که ازنظر بصری پویا هستند و انتقال‌های عنصر میانای کاربر دارند که برای کاربران طبیعی به‌نظر می‌رسد. این پشتیبانی شامل موارد زیر می‌شود:

  • زمینه Material
  • مشاهده سایه‌ها
  • ابزاره RecyclerView
  • پویانمایی کشیدنی و جلوه‌های سبک‌دهی
  • پویانمایی طراحی سه‌بعدی و جلوه‌های انتقال فعالیت
  • پویانمایی‌کننده‌ها برای مشاهده ویژگی‌ها براساس وضعیت نمای
  • ابزاره‌های میانای کاربر و نوارهای برنامه سفارشی‌شدنی با پالت‌های رنگی که کنترل می‌کنید
  • ترسیم‌های پویانمایی‌شده و غیرپویانمایی‌شده براساس گرافیک برداری XML

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

اسناد و فعالیت‌های هم‌زمان در صفحه اخیر

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

برای درج وقفه منطقی به‌طوری که سیستم فعالیت شما را به‌عنوان تکلیف جدیدی درنظر بگیرد، هنگام راه‌اندازی فعالیت با startActivity() از FLAG_ACTIVITY_NEW_DOCUMENT استفاده کنید. همچنین می‌توانید با تنظیم عنصر <activity> در دارایی documentLaunchMode به "intoExisting" یا "always" در مانیفست خود به این رفتار دست یابید.

برای جلوگیری از شلوغ شدن صفحه برنامه‌های اخیر، می‌توانید حداکثر تعداد تکالیف برنامه‌تان را که در آن صفحه نشان داده می‌شود تنظیم کنید. برای انجام این کار، <application> ویژگی android:maxRecents را تنظیم کنید. حداکثر مقدار قابل‌تعیین درحال‌حاضر ۵۰ کار در هر کاربر است (۲۵ کار برای دستگاه‌های دارای حافظه دسترسی تصادفی پایین).

می‌توان تکالیف موجود در صفحه اخیر را به‌گونه‌ای تنظیم کرد که پس‌از بازراه‌اندازی نیز باقی بمانند. برای کنترل کردن عملکرد ماندگاری، از مشخصه android:persistableMode استفاده کنید. همچنین می‌توانید با فراخوانی روش setTaskDescription() ، ویژگی‌های بصری فعالیت در صفحه اخیرها را تغییر دهید، مثلاً رنگ، برچسب، و نماد فعالیت.

به‌روزرسانی‌های «وب‌نما»

‫Android 5.0 WebView پیاده‌سازی را به Chromium M37 به‌روزرسانی می‌کند و بهبودهای امنیتی و پایداری و همچنین رفع اشکال‌ها را ارائه می‌دهد. رشته عامل کاربر پیش‌فرض برای WebView درحال اجرا در Android 5.0 به‌روزرسانی شده است تا 37.0.0.0 را به‌عنوان شماره نسخه دربرگیرد.

این نسخه کلاس PermissionRequest را معرفی می‌کند که به برنامه شما امکان می‌دهد اجازه WebView را برای دسترسی به منابع محافظت‌شده مثل دوربین و میکروفون ازطریق میاناهای برنامه‌سازی کاربردی وب مثل getUserMedia() اعطا کند. برنامه شما باید اجازه‌های Android مناسب برای این منابع را داشته باشد تا بتواند اجازه‌های WebView را اعطا کند.

با روش جدید onShowFileChooser()، اکنون می‌توانید از فیلد فرم ورودی در WebView استفاده کنید، و انتخاب‌گر فایل را برای انتخاب تصاویر و فایل‌ها از دستگاه Android راه‌اندازی کنید.

علاوه‌براین، این نسخه از استانداردهای باز WebAudio، WebGL، و WebRTC پشتیبانی می‌کند. برای کسب اطلاعات بیشتر درباره ویژگی‌های جدید موجود در این نسخه پخش، WebView برای Android را ببینید.

ضبط و هم‌رسانی صفحه‌نمایش

‫Android 5.0 به شما امکان می‌دهد بااستفاده از میاناهای برنامه‌سازی کاربردی جدید android.media.projection، قابلیت‌های ضبط صفحه و هم‌رسانی صفحه را به برنامه‌تان اضافه کنید. این عملکرد برای مثال زمانی مفید است که بخواهید هم‌رسانی صفحه‌نمایش را در برنامه کنفرانس ویدیویی فعال کنید.

روش جدید createVirtualDisplay() به برنامه شما امکان می‌دهد محتوای صفحه اصلی (نمایشگر پیش‌فرض) را در یک شیء Surface ضبط کند، که برنامه شما سپس می‌تواند آن را ازطریق شبکه ارسال کند. این میانای برنامه کاربردی فقط اجازه می‌دهد محتوای صفحه‌نمایش غیرامن ضبط شود، نه صدای سیستم. برای شروع ضبط صفحه‌نمایش، برنامه شما باید ابتدا با راه‌اندازی کادر گفتگوی ضبط صفحه‌نمایش بااستفاده از Intent به‌دست‌آمده از روش createScreenCaptureIntent()، اجازه کاربر را درخواست کند.

برای نمونه‌ای از نحوه استفاده از میاناهای برنامه‌سازی کاربردی جدید، MediaProjectionDemo کلاس را در پروژه نمونه ببینید.

اعلان‌ها

اعلان‌های صفحه قفل

صفحه‌های قفل در Android 5.0 قابلیت نمایش اعلان‌ها را دارند. کاربران می‌توانند ازطریق تنظیمات انتخاب کنند که آیا محتوای اعلان حساس در صفحه قفل ایمن نمایش داده شود یا نه.

برنامه شما می‌تواند سطح جزئیات قابل‌مشاهده را هنگام نمایش اعلان‌هایش در صفحه قفل ایمن کنترل کند. برای کنترل سطح رؤیت‌پذیری، setVisibility() را فراخوانی کنید و یکی از این مقادیر را مشخص کنید:

  • VISIBILITY_PRIVATE: اطلاعات پایه مثل نماد اعلان را نشان می‌دهد، اما محتوای کامل اعلان را پنهان می‌کند.
  • VISIBILITY_PUBLIC: محتوای کامل اعلان را نشان می‌دهد.
  • VISIBILITY_SECRET: هیچ‌چیز نشان داده نمی‌شود، حتی نماد اعلان.

وقتی سطح رؤیت‌پذیری VISIBILITY_PRIVATE باشد، می‌توانید نسخه ویرایش‌شده‌ای از محتوای اعلان ارائه دهید که جزئیات شخصی را پنهان می‌کند. برای مثال، برنامه پیامک ممکن است اعلانی نمایش دهد که نشان می‌دهد «۳ پیامک جدید دارید» اما محتوای پیام و فرستندگان را پنهان می‌کند. برای ارائه این اعلان جایگزین، ابتدا اعلان جایگزین را بااستفاده از Notification.Builder ایجاد کنید. وقتی شیء اعلان خصوصی را ایجاد می‌کنید، اعلان جایگزین را ازطریق روش setPublicVersion() به آن پیوست کنید.

فراداده اعلان‌ها

‫Android 5.0 از فرداده‌های مرتبط با اعلان‌های برنامه شما برای مرتب کردن هوشمندانه‌تر اعلان‌ها استفاده می‌کند. برای تنظیم فراداده، هنگام ساختن اعلان، روش‌های زیر را در Notification.Builder فراخوانی کنید:

  • setCategory(): به سیستم می‌گوید وقتی دستگاه در حالت اولویت‌دار است (برای مثال، اگر اعلانی نشان‌دهنده تماس ورودی، پیام فوری، یا زنگ هشدار باشد) چگونه اعلان‌های برنامه را مدیریت کند.
  • ‫setPriority(): اعلان را به‌عنوان مهم‌تر یا کم‌اهمیت‌تر از اعلان‌های عادی علامت‌گذاری می‌کند. اعلان‌هایی که فیلد اولویت آن‌ها روی PRIORITY_MAX یا PRIORITY_HIGH تنظیم شده است، اگر اعلان صدا یا لرزش هم داشته باشد، در یک پنجره شناور کوچک نشان داده می‌شود.
  • ‫addPerson(): به شما امکان می‌دهد یک یا چند نفر را که به اعلان مربوط هستند اضافه کنید. برنامه شما می‌تواند از این قابلیت برای علامت دادن به سیستم استفاده کند تا اعلان‌های افراد مشخص‌شده را با هم گروه‌بندی کند یا اعلان‌های این افراد را به‌عنوان مهم‌تر رتبه‌بندی کند.

گرافیک‌

پشتیبانی از OpenGL ES 3.1

‫Android 5.0 رابط‌های Java و پشتیبانی بومی از OpenGL ES 3.1 را اضافه می‌کند. قابلیت‌های جدید کلیدی ارائه‌شده در OpenGL ES 3.1 شامل موارد زیر است:

  • سایه‌زن‌های محاسباتی
  • جدا کردن اشیای سایه‌زن
  • فرمان‌های طراحی غیرمستقیم
  • بافت‌های چندنمونه‌ای و شابلونی
  • بهبودهای زبان سایه‌زنی
  • افزونه‌هایی برای حالت‌های ترکیبی پیشرفته و اشکال‌زدایی
  • سازگاری با نسخه قدیمی OpenGL ES 2.0 و 3.0

میانای Java برای OpenGL ES 3.1 در Android با GLES31 ارائه می‌شود. هنگام استفاده از OpenGL ES 3.1، مطمئن شوید که آن را در فایل مانیفست خود با برچسب <uses-feature> و مشخصه android:glEsVersion تعریف کنید. برای مثال:

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

برای اطلاعات بیشتر درباره استفاده از OpenGL ES، ازجمله نحوه بررسی نسخه OpenGL ES پشتیبانی‌شده دستگاه در زمان اجرا، به راهنمای OpenGL ES API مراجعه کنید.

بسته افزونه Android

علاوه‌بر OpenGL ES 3.1، این نسخه پخش بسته افزونه‌ای با میاناهای Java و پشتیبانی بومی از عملکرد گرافیک پیشرفته ارائه می‌دهد. این افزونه‌ها توسط Android به‌عنوان یک بسته واحد درنظر گرفته می‌شوند. (اگر افزونه ANDROID_extension_pack_es31a وجود داشته باشد، برنامه شما می‌تواند فرض کند همه افزونه‌های موجود در بسته وجود دارند و ویژگی‌های زبان سایه‌زنی را با یک دستور #extension فعال کند.)

بسته افزونه از این موارد پشتیبانی می‌کند:

  • پشتیبانی تضمینی از سایه‌زن تکه‌تکه برای بافرهای ذخیره‌سازی سایه‌زن، تصاویر، و اتمیک‌ها (پشتیبانی از سایه‌زن تکه‌تکه در OpenGL ES 3.1 اختیاری است.)
  • سطح‌بندی و سایه‌زن‌های هندسی
  • قالب فشرده‌سازی بافت ASTC (LDR)
  • درون‌یابی و سایه‌زنی به‌ازای هر نمونه
  • حالت‌های ترکیبی مختلف برای هر پیوست رنگ در بافر قاب

میانای Java برای بسته افزونه با GLES31Ext ارائه می‌شود. در مانیفست برنامه می‌توانید اعلام کنید که برنامه شما باید فقط روی دستگاه‌هایی نصب شود که از بسته افزونه پشتیبانی می‌کنند. برای مثال:

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

رسانه

Camera API برای قابلیت‌های پیشرفته دوربین

‫Android 5.0 android.hardware.camera2 API جدیدی را برای تسهیل گرفتن عکس با جزئیات دقیق و پردازش تصویر معرفی می‌کند. اکنون می‌توانید با getCameraIdList() به‌صورت برنامه‌نویسی به دستگاه‌های دوربین دردسترس سیستم دسترسی داشته باشید و با openCamera() به دستگاه خاصی متصل شوید. برای شروع گرفتن تصویر، CameraCaptureSession ایجاد کنید و Surface شیء را برای ارسال تصاویر گرفته‌شده مشخص کنید. CameraCaptureSession را می‌توان به‌گونه‌ای پیکربندی کرد که تک‌عکس یا چند عکس به‌صورت رگباری بگیرد.

برای اینکه وقتی تصاویر جدیدی ضبط می‌شود اعلان دریافت کنید، شنونده CameraCaptureSession.CaptureCallback را پیاده‌سازی کنید و آن را در درخواست ضبط خود تنظیم کنید. اکنون وقتی سیستم درخواست ضبط تصویر را تکمیل می‌کند، شنونده شما در CameraCaptureSession.CaptureCallback تماسی دریافت می‌کند onCaptureCompleted()، فراداده ضبط تصویر را در CaptureResult به شما ارائه می‌دهد.

کلاس CameraCharacteristics به برنامه شما امکان می‌دهد تشخیص دهد چه ویژگی‌های دوربینی در دستگاه دردسترس است. دارایی INFO_SUPPORTED_HARDWARE_LEVEL شیء نشان‌دهنده سطح عملکرد دوربین است.

  • همه دستگاه‌ها حداقل از سطح سخت‌افزار INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY پشتیبانی می‌کنند که قابلیت‌های آن تقریباً معادل قابلیت‌های منسوخ‌شده Camera API است.
  • دستگاه‌هایی که از سطح سخت‌افزار INFO_SUPPORTED_HARDWARE_LEVEL_FULL پشتیبانی می‌کنند، قابلیت کنترل دستی ضبط و پس‌پردازش، و ضبط تصاویر با وضوح بالا با نرخ فریم بالا را دارند.

برای دیدن نحوه استفاده از Camera API به‌روزشده، به نمونه‌های پیاده‌سازی Camera2Basic و Camera2Video در این نسخه مراجعه کنید.

بازپخش پیام صوتی

این نسخه شامل تغییرات زیر در AudioTrack است:

  • اکنون برنامه شما می‌تواند داده‌های صوتی را در قالب ممیز شناور ارائه دهد (ENCODING_PCM_FLOAT). این امکان دامنه پویای بیشتر، دقت یکنواخت‌تر، و فضای سر بیشتر را فراهم می‌کند. محاسبات ممیز شناور به‌ویژه در محاسبات میانی مفید است. نقطه‌های پایانی بازپخش از قالب عدد صحیح برای داده‌های صوتی و با عمق بیت پایین‌تر استفاده می‌کنند. (در Android 5.0، بخش‌هایی از خط لوله داخلی هنوز نقطه شناور نیستند.)
  • اکنون برنامه شما می‌تواند داده‌های صوتی را به‌صورت ByteBuffer و با همان قالبی که MediaCodec ارائه می‌دهد تأمین کند.
  • گزینه WRITE_NON_BLOCKING می‌تواند بافرینگ و چندرشته‌ای را برای برخی برنامه‌ها ساده کند.

کنترل بازپخش رسانه

از میاناهای برنامه‌سازی کاربردی جدید اعلان و رسانه استفاده کنید تا مطمئن شوید واسط کاربر سیستم از بازپخش رسانه شما مطلع است و می‌تواند جلد آلبوم را استخراج و نمایش دهد. اکنون با کلاس‌های جدید MediaSession و MediaController، کنترل بازپخش رسانه در سراسر واسط کاربر و سرویس آسان‌تر است.

کلاس جدید MediaSession جایگزین کلاس منسوخ‌شده RemoteControlClient می‌شود و مجموعه واحدی از روش‌های برگشتی برای مدیریت کنترل‌های حمل‌ونقل و دکمه‌های رسانه ارائه می‌دهد. اگر برنامه شما بازپخش رسانه را ارائه می‌دهد و در پلاتفرم Android TV یا Wear اجرا می‌شود، از کلاس MediaSession برای مدیریت کنترل‌های انتقال بااستفاده از همان روش‌های تماس برگشتی استفاده کنید.

اکنون می‌توانید با کلاس جدید MediaController برنامه کنترل‌کننده رسانه خودتان را بسازید. این کلاس روشی ایمن برای نظارت و کنترل پخش رسانه از فرایند واسط کاربر برنامه شما ارائه می‌دهد. هنگام ایجاد کنترل‌کننده، MediaSession.Token شیئی را مشخص کنید تا برنامه‌تان بتواند با MediaSession داده‌شده تعامل داشته باشد. بااستفاده از روش‌های MediaController.TransportControls، می‌توانید فرمان‌هایی مثل play()، stop()، skipToNext()، و setRating() برای کنترل بازپخش رسانه در آن جلسه ارسال کنید. با کنترل‌کننده، همچنین می‌توانید یک شیء MediaController.Callback را ثبت کنید تا فراداده و تغییرات وضعیت را در جلسه گوش دهد.

علاوه‌براین، می‌توانید اعلان‌های غنی ایجاد کنید که کنترل بازپخش را به جلسه رسانه با کلاس جدید Notification.MediaStyle متصل می‌کنند.

مرور رسانه

‫Android 5.0 این امکان را برای برنامه‌ها فراهم می‌کند که ازطریق میانای برنامه‌سازی کاربردی جدید android.media.browse مجموعه محتوای رسانه‌ای برنامه دیگری را مرور کنند. برای آشکار کردن محتوای رسانه‌ای در برنامه‌تان، کلاس MediaBrowserService را گسترش دهید. پیاده‌سازی شما از MediaBrowserService باید دسترسی به MediaSession.Token را فراهم کند تا برنامه‌ها بتوانند محتوای رسانه‌ای ارائه‌شده ازطریق سرویس شما را پخش کنند.

برای تعامل با سرویس مرورگر رسانه، از کلاس MediaBrowser استفاده کنید. هنگام ایجاد نمونه MediaBrowser، نام عنصر را برای MediaSession مشخص کنید. برنامه شما بااستفاده از آن نمونه مرورگر می‌تواند به سرویس مرتبط متصل شود و یک شیء MediaSession.Token برای پخش محتوای نمایان‌شده ازطریق آن سرویس دریافت کند.

فضای ذخیره‌سازی

انتخاب فهرست راهنما

‫Android 5.0 چارچوب دسترسی به فضای ذخیره‌سازی را گسترش می‌دهد تا به کاربران امکان دهد زیردرخت کل دایرکتوری را انتخاب کنند و به برنامه‌ها اجازه دهد به همه سندهای موجود در آن دسترسی خواندن/نوشتن داشته باشند بدون اینکه برای هر مورد نیاز به تأیید کاربر باشد.

برای انتخاب زیردرخت دایرکتوری، یک OPEN_DOCUMENT_TREE هدف بسازید و ارسال کنید. سیستم همه DocumentsProvider نمونه‌هایی را که از انتخاب زیردرخت پشتیبانی می‌کنند نمایش می‌دهد و به کاربر اجازه می‌دهد دایرکتوری را مرور و انتخاب کند. «نشانی وب» برگشتی نشان‌دهنده دسترسی به زیردرخت انتخاب‌شده است. سپس می‌توانید از buildChildDocumentsUriUsingTree() و buildDocumentUriUsingTree() همراه با query() برای کاوش زیردرخت استفاده کنید.

روش جدید createDocument() به شما امکان می‌دهد در هر جایی از زیردرخت، سندها یا دایرکتوری‌های جدید ایجاد کنید. برای مدیریت کردن سندهای موجود، از renameDocument() و deleteDocument() استفاده کنید. برای تأیید پشتیبانی ارائه‌دهنده از این تماس‌ها قبل‌از صدور آن‌ها، COLUMN_FLAGS را علامت بزنید.

اگر DocumentsProvider را پیاده‌سازی می‌کنید و می‌خواهید از انتخاب زیردرخت پشتیبانی کنید، isChildDocument() را پیاده‌سازی کنید و FLAG_SUPPORTS_IS_CHILD را در COLUMN_FLAGS بگنجانید.

‫Android 5.0 همچنین فهرستگان‌های جدید مختص بسته را در فضای ذخیره‌سازی مشترک معرفی می‌کند که برنامه شما می‌تواند فایل‌های رسانه‌ای را در آن قرار دهد تا در MediaStore گنجانده شود. getExternalMediaDirs() جدید مسیرهای این دایرکتوری‌ها را در همه دستگاه‌های ذخیره‌سازی مشترک برمی‌گرداند. مشابه با getExternalFilesDir()، برنامه شما برای دسترسی به مسیرهای برگشتی به اجازه‌های اضافی نیاز ندارد. این پلاتفرم به‌صورت دوره‌ای رسانه‌های جدید را در این دایرکتوری‌ها اسکن می‌کند، اما شما همچنین می‌توانید از MediaScannerConnection برای اسکن صریح محتوای جدید استفاده کنید.

بی‌سیم و اتصال‌پذیری

اتصال‌های شبکه متعدد

‫Android 5.0 میاناهای برنامه‌سازی کاربردی چندشبکه‌ای جدیدی ارائه می‌دهد که به برنامه شما امکان می‌دهد به‌صورت پویا شبکه‌های دردسترس با قابلیت‌های خاص را اسکن کند و به آن‌ها متصل شود. این عملکرد زمانی مفید است که برنامه شما به شبکه تخصصی نیاز داشته باشد، مثل شبکه SUPL،‏ MMS، یا شبکه صدور صورت‌حساب شرکت مخابراتی، یا اگر بخواهید داده‌ها را بااستفاده از نوع خاصی از پروتکل انتقال ارسال کنید.

برای انتخاب و اتصال به شبکه به‌صورت پویا از برنامه‌تان، این مراحل را دنبال کنید:

  1. ‫ConnectivityManager ایجاد کنید.
  2. از کلاس NetworkRequest.Builder برای ایجاد شیء NetworkRequest و تعیین ویژگی‌های شبکه و نوع انتقالی که برنامه شما به آن علاقه دارد استفاده کنید.
  3. برای اسکن کردن شبکه‌های مناسب، با requestNetwork() یا registerNetworkCallback() تماس بگیرید و NetworkRequest شیء و پیاده‌سازی ConnectivityManager.NetworkCallback را ارسال کنید. اگر می‌خواهید پس‌از شناسایی شبکه مناسب، به‌طور فعال به آن شبکه بروید، از روش requestNetwork() استفاده کنید؛ برای دریافت فقط اعلان‌های شبکه‌های اسکن‌شده بدون رفتن فعال به آن‌ها، از روش registerNetworkCallback() استفاده کنید.

وقتی سیستم شبکه مناسبی را تشخیص دهد، به آن شبکه متصل می‌شود و onAvailable() بازخوان را فرا می‌خواند. می‌توانید از شیء Network در پاسخ‌به‌تماس برای دریافت اطلاعات بیشتر درباره شبکه یا هدایت ترافیک برای استفاده از شبکه انتخاب‌شده استفاده کنید.

بلوتوث کم‌مصرف

‫Android 4.3 پشتیبانی پلاتفرم برای بلوتوث کم‌مصرف (بلوتوث LE) در نقش مرکزی را معرفی کرد. در Android 5.0، دستگاه Android اکنون می‌تواند به‌عنوان دستگاه جانبی «بلوتوث کم‌مصرف» عمل کند. برنامه‌ها می‌توانند از این قابلیت برای شناساندن حضورشان به دستگاه‌های اطراف استفاده کنند. برای مثال، می‌توانید برنامه‌هایی بسازید که به دستگاه اجازه می‌دهد به‌عنوان گام‌شمار یا پایشگر سلامتی عمل کند و داده‌هایش را با دستگاه «بلوتوث کم‌مصرف» دیگری مبادله کند.

میاناهای برنامه‌سازی کاربردی جدید android.bluetooth.le به برنامه‌هایتان امکان می‌دهد تبلیغات پخش کنند، پاسخ‌ها را اسکن کنند، و با دستگاه‌های بلوتوث کم‌مصرف اطراف ارتباط برقرار کنند. برای استفاده از ویژگی‌های جدید تبلیغات و اسکن، اجازه BLUETOOTH_ADMIN را در مانیفست خود اضافه کنید. وقتی کاربران برنامه‌تان را از Play Store به‌روزرسانی یا بارگیری می‌کنند، از آن‌ها خواسته می‌شود اجازه زیر را به برنامه‌تان بدهند: "اطلاعات اتصال بلوتوث: به برنامه اجازه می‌دهد بلوتوث را کنترل کند، ازجمله پخش کردن در دستگاه‌های بلوتوث اطراف یا دریافت اطلاعات درباره آن‌ها."

برای شروع تبلیغات «بلوتوث کم‌مصرف» به‌طوری که سایر دستگاه‌ها بتوانند برنامه شما را پیدا کنند، startAdvertising() را فراخوانی کنید و پیاده‌سازی کلاس AdvertiseCallback را به آن ارسال کنید. شیء تماس برگشتی گزارشی از موفقیت یا عدم موفقیت عملیات تبلیغات دریافت می‌کند.

‫Android 5.0 کلاس ScanFilter را معرفی می‌کند تا برنامه شما بتواند فقط انواع خاصی از دستگاه‌ها را که به آن‌ها علاقه دارد اسکن کند. برای شروع اسکن کردن دستگاه‌های Bluetooth LE،‏ startScan() را فراخوانی کنید و فهرستی از فیلترها را ارسال کنید. در فراخوانی روش، باید پیاده‌سازی ScanCallback را نیز ارائه کنید تا هنگام یافتن تبلیغات «بلوتوث کم‌مصرف» گزارش شود.

بهبودهای NFC

‫Android 5.0 این بهبودها را اضافه می‌کند تا استفاده گسترده‌تر و انعطاف‌پذیرتر از NFC را ممکن کند:

  • «پخش محتوا از Android» اکنون در منو هم‌رسانی دردسترس است.
  • برنامه شما می‌تواند با فراخوانی invokeBeam()، «پخش محتوا» را در دستگاه کاربر فعال کند تا داده‌ها را هم‌رسانی کند. با این کار، کاربر دیگر نیازی ندارد برای تکمیل انتقال داده‌ها، دستگاه را به‌صورت دستی روی دستگاه NFC دیگری تک‌ضرب بزند.
  • می‌توانید از روش جدید createTextRecord() برای ایجاد کردن گزارش NDEF حاوی داده‌های نوشتاری UTF-8 استفاده کنید.
  • اگر درحال توسعه برنامه پرداخت هستید، اکنون می‌توانید با فراخوانی registerAidsForService()، شناسه برنامه NFC (AID) را به‌صورت پویا ثبت کنید. همچنین می‌توانید از setPreferredService() برای تنظیم سرویس شبیه‌سازی کارت ترجیحی که باید هنگام فعال بودن یک فعالیت خاص در پیش‌زمینه استفاده شود استفاده کنید.

Project Volta

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

زمان‌بندی کردن شغل‌ها

‫Android 5.0 JobSchedulerمیانای برنامه‌سازی کاربردی جدیدی ارائه می‌دهد که به شما امکان می‌دهد با تعریف کردن کارها برای سیستم، عمر باتری را بهینه کنید تا سیستم بتواند کارها را به‌صورت ناهمزمان در زمان دیگری یا تحت شرایط مشخص (مثلاً وقتی دستگاه درحال شارژ است) اجرا کند. زمان‌بندی کار در موقعیت‌های زیر مفید است:

  • برنامه کار غیرکاربرپسندی دارد که می‌توانید آن را به‌تعویق بیندازید.
  • برنامه کاری دارد که ترجیح می‌دهید وقتی دستگاه به پریز برق متصل است انجام شود.
  • برنامه وظیفه‌ای دارد که به دسترسی به شبکه یا اتصال Wi-Fi نیاز دارد.
  • برنامه تعدادی تکلیف دارد که می‌خواهید به‌صورت دسته‌ای در زمان‌بندی منظمی اجرا کنید.

واحد کار با شیء JobInfo کپسوله می‌شود. این شیء معیارهای زمان‌بندی را مشخص می‌کند.

از کلاس JobInfo.Builder برای پیکربندی نحوه اجرای وظیفه زمان‌بندی‌شده استفاده کنید. می‌توانید تکلیف را زمان‌بندی کنید تا تحت شرایط خاصی اجرا شود، مثلاً:

  • وقتی دستگاه درحال شارژ است شروع شود
  • وقتی دستگاه به شبکه بدون محدودیت متصل است شروع شود
  • وقتی دستگاه در حالت آماده به‌کار است شروع شود
  • پیش‌از مهلت معینی یا با حداقل تأخیر تمام شود

برای مثال، می‌توانید کدی مانند این را اضافه کنید تا تکلیف شما در شبکه بدون محدودیت اجرا شود:

کاتلین

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

جاوا

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

اگر دستگاه برق پایدار داشته باشد (یعنی بیش‌از ۲ دقیقه به برق متصل بوده باشد و باتری در سطح مناسبی باشد)، سیستم هر کار زمان‌بندی‌شده‌ای را که آماده اجرا باشد اجرا خواهد کرد، حتی اگر مهلت کار منقضی نشده باشد.

برای دیدن نمونه‌ای از نحوه استفاده از JobScheduler API، به نمونه پیاده‌سازی JobSchedulerSample در این نسخه مراجعه کنید.

ابزارهای توسعه‌دهندگان برای مصرف باتری

فرمان جدید dumpsys batterystats داده‌های آماری جالبی درباره مصرف باتری در دستگاه تولید می‌کند که براساس شناسه کاربر یکتا (UID) سازمان‌دهی شده است. آمار شامل موارد زیر است:

  • سابقه رویدادهای مربوط به باتری
  • آمار جهانی دستگاه
  • مصرف تقریبی برق براساس UID و مؤلفه سیستم
  • میلی‌ثانیه تلفن همراه به‌ازای هر بسته
  • آمار تجمیعی «شناسه کاربر سیستم»
  • آمار تجمیعی شناسه کاربر برنامه

از گزینه --help برای آشنایی با گزینه‌های مختلف سفارشی‌سازی برونداد استفاده کنید. برای مثال، برای چاپ آمار مصرف باتری برای بسته برنامه معینی از آخرین باری که دستگاه شارژ شده است، این فرمان را اجرا کنید:

$ adb shell dumpsys batterystats --charged <package-name>

می‌توانید از ابزار Battery Historian (سابقه باتری) در برونداد فرمان dumpsys برای تولید یک نمایان‌سازی HTML از رویدادهای مربوط به برق از گزارش‌ها استفاده کنید. این اطلاعات درک و تشخیص مشکلات مربوط به باتری را برای شما آسان‌تر می‌کند.

‫Android در محل کار و تحصیل

ارائه دسترسی مدیریت شده

‫Android 5.0 کارکردهای جدیدی برای اجرای برنامه‌ها در محیط سازمانی ارائه می‌دهد. اگر کاربر حساب شخصی موجودی داشته باشد، سرپرست دستگاه می‌تواند فرایند آماده‌سازی مدیریت‌شده‌ای را برای افزودن نمایه مدیریت‌شده هم‌حضور اما جداگانه به دستگاه آغاز کند. برنامه‌هایی که با نمایه‌های مدیریت‌شده مرتبط هستند در کنار برنامه‌های مدیریت‌نشده در «راه‌انداز»، صفحه برنامه‌های اخیر، و اعلان‌های کاربر نشان داده می‌شوند.

برای شروع فرایند آماده‌سازی مدیریت‌شده، ACTION_PROVISION_MANAGED_PROFILE را در Intent ارسال کنید. اگر تماس موفقیت‌آمیز باشد، سیستم onProfileProvisioningComplete() برگشت تماس را راه‌اندازی می‌کند. سپس می‌توانید با setProfileEnabled() تماس بگیرید تا این نمایه تحت‌مدیریت را فعال کنید.

به‌طور پیش‌فرض، فقط زیرمجموعه کوچکی از برنامه‌ها در نمایه مدیریت‌شده فعال است. با شماره‌گیری enableSystemApp() می‌توانید برنامه‌های بیشتری در نمایه مدیریت‌شده نصب کنید.

اگر درحال توسعه برنامه «راه‌انداز» هستید، می‌توانید از کلاس جدید LauncherApps برای دریافت فهرست فعالیت‌های قابل‌راه‌اندازی برای کاربر فعلی و هر نمایه مدیریت‌شده مرتبط استفاده کنید. «راه‌انداز» شما می‌تواند با افزودن نشان کار به نماد کشیدنی، برنامه‌های مدیریت‌شده را ازنظر بصری برجسته کند. برای بازیابی نماد نشان‌دار، getUserBadgedIcon() را فراخوانی کنید.

برای دیدن نحوه استفاده از عملکرد جدید، به نمونه پیاده‌سازی BasicManagedProfile در این نسخه مراجعه کنید.

مالک دستگاه

در Android 5.0 امکان استقرار برنامه مالک دستگاه معرفی شده است. مالک دستگاه نوعی تخصصی از سرپرست دستگاه است که توانایی اضافی ایجاد و حذف کاربران ثانویه و پیکربندی تنظیمات سراسری در دستگاه را دارد. برنامه مالک دستگاه شما می‌تواند از روش‌های موجود در کلاس DevicePolicyManager برای کنترل دقیق پیکربندی، امنیت، و برنامه‌های موجود در دستگاه‌های مدیریت‌شده استفاده کند. هر دستگاه در هر زمان فقط می‌تواند یک مالک دستگاه فعال داشته باشد.

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

سنجاق کردن صفحه

‫Android 5.0 «میانای برنامه‌سازی کاربردی سنجاق کردن صفحه» جدیدی معرفی می‌کند که به شما امکان می‌دهد موقتاً کاربران را از خروج از تکلیف خود یا مختل شدن توسط اعلان‌ها محدود کنید. برای مثال، اگر درحال توسعه برنامه آموزشی برای پشتیبانی از الزامات ارزیابی با اهمیت بالا در Android، یا برنامه تک‌منظوره یا کیوسک هستید، می‌توانید از این ویژگی استفاده کنید. وقتی برنامه‌تان سنجاق کردن صفحه را فعال می‌کند، کاربران نمی‌توانند اعلان‌ها را ببینند، به برنامه‌های دیگر دسترسی داشته باشند، یا به صفحه اصلی برگردند، تا زمانی که برنامه‌تان از این حالت خارج شود.

دو روش برای فعال کردن سنجاق کردن صفحه‌نمایش وجود دارد:

  • دستی: کاربران می‌توانند سنجاق کردن صفحه را در تنظیمات > امنیت > سنجاق کردن صفحه فعال کنند و با لمس کردن نماد سنجاق سبز در صفحه برنامه‌های اخیر، تکالیفی را که می‌خواهند سنجاق کنند انتخاب کنند.
  • برنامه‌نویسی: برای فعال کردن سنجاق کردن صفحه به‌صورت برنامه‌نویسی، startLockTask() را از برنامه‌تان فراخوانی کنید. اگر برنامه درخواست‌کننده مالک دستگاه نباشد، از کاربر خواسته می‌شود تأیید کند. برنامه مالک دستگاه می‌تواند setLockTaskPackages() روش را فراخوانی کند تا برنامه‌ها بدون مرحله تأیید کاربر قابل سنجاق کردن شوند.

وقتی قفل کردن تکلیف فعال باشد، رفتار زیر اتفاق می‌افتد:

  • نوار وضعیت خالی است و اعلان‌های کاربر و اطلاعات وضعیت پنهان است.
  • دکمه‌های «صفحه اصلی» و «برنامه‌های اخیر» پنهان هستند.
  • برنامه‌های دیگر نمی‌توانند فعالیت‌های جدید راه‌اندازی کنند.
  • برنامه فعلی می‌تواند فعالیت‌های جدیدی را شروع کند، به‌شرطی که انجام این کار وظایف جدیدی ایجاد نکند.
  • وقتی مالک دستگاه سنجاق کردن صفحه را فرا می‌خواند، کاربر تا زمانی که برنامه stopLockTask() را فراخوانی کند در برنامه شما قفل می‌ماند.
  • اگر سنجاق کردن صفحه توسط برنامه دیگری که مالک دستگاه نیست یا توسط کاربر به‌طور مستقیم فعال شود، کاربر می‌تواند با نگه داشتن دکمه‌های «بازگشت» و «اخیر» از آن خارج شود.

چارچوب چاپ

پرداز کردن PDF به‌عنوان بیت‌مپ

اکنون می‌توانید صفحه‌های سند PDF را بااستفاده از کلاس جدید PdfRenderer به تصاویر بیت‌مپ برای چاپ تبدیل کنید. باید ParcelFileDescriptor قابل‌جستجویی را مشخص کنید (یعنی محتوا قابل‌دسترسی تصادفی باشد) که سیستم محتوای چاپ‌شدنی را در آن می‌نویسد. برنامه شما می‌تواند صفحه‌ای را برای پرداز با openPage() دریافت کند، سپس render() را فراخوانی کند تا PdfRenderer.Page بازشده را به یک بیت‌مپ تبدیل کند. همچنین می‌توانید پارامترهای اضافی تنظیم کنید اگر فقط بخواهید بخشی از سند را به تصویر شطرنجی تبدیل کنید (برای مثال، برای پیاده‌سازی پردازنده کاشی‌دار برای زوم‌پیش کردن سند).

برای نمونه‌ای از نحوه استفاده از میاناهای برنامه‌سازی کاربردی جدید، به PdfRendererBasic نمونه مراجعه کنید.

سیستم

آمار کاربرد برنامه

اکنون می‌توانید با میانای برنامه‌سازی کاربردی جدید android.app.usage در دستگاه Android به سابقه استفاده از برنامه دسترسی داشته باشید. این «میانای برنامه‌سازی کاربردی» اطلاعات دقیق‌تری درباره استفاده از روش منسوخ‌شده getRecentTasks() ارائه می‌دهد. برای استفاده از این API، ابتدا باید اجازه "android.permission.PACKAGE_USAGE_STATS" را در مانیفست خود تعریف کنید. کاربر باید دسترسی به این برنامه را ازطریق تنظیمات > امنیت > برنامه‌ها با دسترسی به استفاده نیز فعال کند.

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

  • داده‌های روزانه: ۷ روز
  • داده‌های هفتگی: ۴ هفته
  • داده‌های ماهانه: ۶ ماه
  • داده‌های سالانه: ۲ سال

برای هر برنامه، سیستم داده‌های زیر را ضبط می‌کند:

  • آخرین باری که از برنامه استفاده شده است
  • کل مدت زمانی که برنامه در آن بازه زمانی در پیش‌زمینه بوده است (براساس روز، هفته، ماه، یا سال)
  • مهر زمان ضبط وقتی که یک عنصر (شناسایی‌شده با نام بسته و فعالیت) درطول روز به پیش‌زمینه یا پس‌زمینه منتقل می‌شود
  • ثبت مُهر زمان هنگام تغییر پیکربندی دستگاه (مثلاً وقتی جهت دستگاه به‌دلیل چرخش تغییر می‌کند)

آزمایش و دسترس‌پذیری

بهبودهای دسترس‌پذیری و آزمایش

‫Android 5.0 از موارد زیر برای آزمایش و دسترس‌پذیری پشتیبانی می‌کند:

  • روش‌های جدید getWindowAnimationFrameStats() و getWindowContentFrameStats() آمار قاب را برای پویانمایی‌های پنجره و محتوا ضبط می‌کنند. این روش‌ها به شما امکان می‌دهند آزمون‌های ابزار دقیق بنویسید تا ارزیابی کنید آیا برنامه با بسامد بازآوری کافی قاب‌بندی می‌کند تا تجربه کاربری روان ارائه دهد یا نه.
  • روش جدید executeShellCommand() به شما امکان می‌دهد فرمان‌های پوسته را از آزمون ابزار دقیق خود اجرا کنید. اجرای فرمان شبیه به اجرای adb shell از میزبان متصل به دستگاه است و به شما امکان می‌دهد از ابزارهای مبتنی بر پوسته مثل dumpsys، am، content، و pm استفاده کنید.
  • سرویس‌های دسترس‌پذیری و ابزارهای آزمایشی که از میاناهای برنامه‌سازی کاربردی دسترس‌پذیری استفاده می‌کنند (مثل UiAutomator) اکنون می‌توانند اطلاعات دقیقی درباره ویژگی‌های پنجره‌های روی صفحه‌نمایش که کاربران بینا می‌توانند با آن‌ها تعامل داشته باشند بازیابی کنند. برای بازیابی فهرست AccessibilityWindowInfo شیء، روش جدید getWindows() را فراخوانی کنید.
  • کلاس جدید AccessibilityNodeInfo.AccessibilityAction به شما امکان می‌دهد کنش‌های استاندارد یا سفارشی را برای اجرا روی AccessibilityNodeInfo تعریف کنید. کلاس جدید AccessibilityNodeInfo.AccessibilityAction جایگزین میاناهای برنامه‌سازی کاربردی مربوط به کنش‌ها می‌شود که قبلاً در AccessibilityNodeInfo وجود داشت.
  • ‫Android 5.0 کنترل دقیق‌تری بر ترکیب نوشتار به گفتار در برنامه شما ارائه می‌دهد. کلاس جدید Voice به برنامه شما امکان می‌دهد از نمایه‌های صوتی مرتبط با زبان‌های خاص، رده‌بندی کیفیت و تأخیر، و پارامترهای خاص موتور نوشتار به گفتار استفاده کند.

IME

جابه‌جایی آسان‌تر بین زبان‌های ورودی

از Android 5.0، کاربران می‌توانند راحت‌تر بین همه ویرایشگران روش ورودی (IME) پشتیبانی‌شده توسط پلاتفرم جابه‌جا شوند. انجام کنش جابه‌جایی تعیین‌شده (معمولاً لمس نماد «کره زمین» در صفحه‌کلید مجازی) در همه این «ویرایشگرهای روش ورودی» پیمایش می‌کند. این تغییر در رفتار با روش shouldOfferSwitchingToNextInputMethod() پیاده‌سازی می‌شود.

علاوه‌براین، چارچوب اکنون بررسی می‌کند که آیا «روش ورودی» بعدی اصلاً شامل سازوکار تعویض می‌شود یا نه (و بنابراین، آیا آن «روش ورودی» از تعویض به «روش ورودی» بعداز خودش پشتیبانی می‌کند یا نه). «روش ورودی» دارای سازوکار تعویض به «روش ورودی» بدون سازوکار تعویض چرخه نمی‌شود. این تغییر در رفتار با روش switchToNextInputMethod() پیاده‌سازی می‌شود.

برای دیدن نمونه‌ای از نحوه استفاده از «میاناهای برنامه‌سازی کاربردی» تعویض IME به‌روزرسانی‌شده، به نمونه پیاده‌سازی صفحه‌کلید نرم‌افزاری به‌روزرسانی‌شده در این نسخه مراجعه کنید. برای کسب اطلاعات بیشتر درباره نحوه پیاده‌سازی جابه‌جایی بین «روش‌های ورودی»، ایجاد روش ورودی را ببینید.

اظهارنامه‌های مانیفست

ویژگی‌های الزامی قابل‌اعلام

اکنون مقادیر زیر در عنصر <uses-feature> پشتیبانی می‌شود، بنابراین می‌توانید مطمئن شوید که برنامه‌تان فقط در دستگاه‌هایی نصب می‌شود که ویژگی‌های موردنیاز برنامه‌تان را ارائه می‌دهند.

اجازه‌های کاربر

اجازه زیر اکنون در عنصر <uses-permission> برای اعلام اجازه‌هایی که برنامه‌تان برای دسترسی به برخی‌از «میاناهای برنامه‌سازی کاربردی» نیاز دارد پشتیبانی می‌شود.

  • BIND_DREAM_SERVICE: هنگام هدف‌یابی سطح میانای برنامه‌سازی کاربردی ۲۱ و بالاتر، این اجازه توسط سرویس Daydream لازم است تا اطمینان حاصل شود که فقط سیستم می‌تواند به آن متصل شود.