API های اندروید 5.0

سطح API: 21

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

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

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

شروع به توسعه کنید

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

سطح API هدف خود را به روز کنید

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

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

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

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

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

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

رابط کاربری

پشتیبانی از طراحی مواد

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

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

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

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

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

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

برای جلوگیری از بهم ریختگی صفحه نمایش اخیر، می توانید حداکثر تعداد کارها را از برنامه خود تنظیم کنید که می توانند در آن صفحه نمایش داده شوند. برای انجام این کار، ویژگی <application> android:maxRecents را تنظیم کنید. حداکثر فعلی که می توان تعیین کرد 50 کار برای هر کاربر است (25 کار برای دستگاه های رم کم).

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

به روز رسانی WebView

Android 5.0 پیاده‌سازی WebView را به Chromium M37 به‌روزرسانی می‌کند و بهبودهای امنیتی و پایداری و همچنین رفع اشکال‌ها را به همراه دارد. رشته پیش‌فرض user-agent برای WebView که روی Android 5.0 اجرا می‌شود، به‌روزرسانی شده است تا 37.0.0.0 را به عنوان شماره نسخه درج کند.

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

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

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

تصویربرداری و اشتراک گذاری صفحه نمایش

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

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

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

اطلاعیه ها

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

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

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

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

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

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

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

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

گرافیک

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

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

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

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

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

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

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

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

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

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

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

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

رسانه ها

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

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

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

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

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

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

پخش صدا

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

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

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

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

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

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

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

مرور رسانه ها

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

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

ذخیره سازی

انتخاب دایرکتوری

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

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

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

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

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

بی سیم و اتصال

اتصالات شبکه چندگانه

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

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

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

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

بلوتوث کم انرژی

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

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

برای شروع تبلیغات بلوتوث LE به طوری که دستگاه‌های دیگر بتوانند برنامه شما را پیدا کنند، با startAdvertising() تماس بگیرید و از کلاس AdvertiseCallback عبور کنید. شئ callback گزارشی از موفقیت یا شکست عملیات تبلیغاتی دریافت می کند.

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

بهبود NFC

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

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

پروژه ولتا

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

برنامه ریزی مشاغل

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

  • این برنامه دارای کارهای غیر کاربر است که می توانید آن را به تعویق بیندازید.
  • این برنامه کاری دارد که ترجیح می دهید وقتی دستگاه به برق وصل است انجام دهید.
  • این برنامه وظیفه ای دارد که به دسترسی به شبکه یا اتصال 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);

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

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

ابزارهای توسعه دهنده برای استفاده از باتری

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

  • تاریخچه رویدادهای مرتبط با باتری
  • آمار جهانی دستگاه
  • مصرف تقریبی انرژی برای هر UID و جزء سیستم
  • MS تلفن همراه هر برنامه در هر بسته
  • آمار جمع آوری UID سیستم
  • آمار جمع آوری UID برنامه

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

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

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

اندروید در محیط کار و آموزش

تامین مدیریت شده

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

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

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

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

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

صاحب دستگاه

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

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

سنجاق صفحه

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

دو راه برای فعال کردن پین کردن صفحه وجود دارد:

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

هنگامی که قفل وظیفه فعال است، رفتار زیر رخ می دهد:

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

چارچوب چاپ

PDF را به صورت بیت مپ رندر کنید

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

برای مثالی از نحوه استفاده از APIهای جدید، نمونه PdfRendererBasic را ببینید.

سیستم

آمار استفاده از اپلیکیشن

اکنون می توانید با استفاده از android.app.usage API جدید به تاریخچه استفاده از برنامه در دستگاه Android دسترسی داشته باشید. این API اطلاعات استفاده دقیق تری را نسبت به متد getRecentTasks() منسوخ شده ارائه می دهد. برای استفاده از این API، ابتدا باید مجوز "android.permission.PACKAGE_USAGE_STATS" در مانیفست خود اعلام کنید. کاربر همچنین باید از طریق Settings > Security > Apps with usage access را برای این برنامه فعال کند.

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

  • داده های روزانه: 7 روز
  • داده های هفتگی: 4 هفته
  • داده های ماهانه: 6 ماه
  • اطلاعات سالانه: 2 سال

برای هر برنامه، سیستم داده های زیر را ثبت می کند:

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

تست و دسترسی

تست و بهبود دسترسی

Android 5.0 پشتیبانی زیر را برای آزمایش و دسترسی اضافه می کند:

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

IME

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

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

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

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

اعلامیه های آشکار

ویژگی های مورد نیاز قابل اعلام

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

مجوزهای کاربر

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

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