ממשקי API של Android 5.0

רמת API: 21

Android 5.0 (LOLLIPOP) מציע תכונות חדשות למשתמשים ולמפתחי אפליקציות. במסמך הזה נספק מבוא לממשקי ה-API החדשים הבולטים ביותר.

אם יש לכם אפליקציה שפורסמה, חשוב לבדוק את השינויים בהתנהגות של Android 5.0 שצריך להביא בחשבון באפליקציה. השינויים האלה בהתנהגות עשויים להשפיע על האפליקציה שלכם במכשירי Android 5.0, גם אם אתם לא משתמשים בממשקי API חדשים או מטרגטים פונקציונליות חדשה.

כדי לראות סקירה כללית של תכונות הפלטפורמה החדשות, לראות את Android Lollipop המיטב.

התחילו לפתח

כדי להתחיל לפתח אפליקציות ל-Android 5.0, צריך קודם לקבל Android SDK. לאחר מכן משתמשים במנהל ה-SDK כדי להוריד את תמונות המערכת והפלטפורמה של 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.

ממשק משתמש

תמיכה בעיצוב חדשני תלת-ממדי

ב-Android 5.0 נוספה תמיכה בסגנון החדש של Android, עיצוב חומר. ניתן ליצור אפליקציות עם עיצוב חומרים דינמי מבחינה חזותית יש מעברים של רכיבים בממשק המשתמש שנראים טבעיים למשתמשים. התמיכה הזו כוללת:

  • עיצוב החומר
  • הצגת האזורים הכהים
  • הווידג'ט RecyclerView
  • אנימציה וקישורים לפריטי עיצוב
  • אנימציה של עיצוב חדשני ואפקטים של מעבר בין פעילויות
  • אנימציות לנכסי תצוגה על סמך המצב של התצוגה
  • ווידג'טים של ממשק משתמש ובר 'אפליקציות' שניתן להתאים אישית עם לוחות צבעים בשליטתכם
  • פריטים גרפיים שניתן לשרטוט עם אנימציה וללא אנימציה, המבוססים על גרפיקה וקטורית של XML

למידע נוסף על הוספת פונקציונליות של עיצוב חדש לאפליקציה: עיצוב חומרים (Material Design).

פעילויות ומסמכים בו-זמנית במסך האחרונים

במהדורות קודמות, המסך האחרון הם יכולים להציג רק משימה אחת לכל אפליקציה שהייתה למשתמש אינטראקציה איתה הכי חדשות. עכשיו האפליקציה יכולה לפתוח משימות נוספות לפי הצורך, כדי לבצע פעילויות נוספות במקביל במסמכים. התכונה הזו מאפשרת למשתמשים לבצע משימות מרובות בו-זמנית, על ידי מעבר מהיר בין פעילויות ומסמכים ספציפיים ממסך האפליקציות האחרונות, עם חוויית מעבר עקבית בכל האפליקציות. דוגמאות למשימות בו-זמנית עשויות לכלול כרטיסיות פתוחות באינטרנט אפליקציית דפדפן, מסמכים באפליקציית פרודוקטיביות, התאמות בו-זמנית ב- במשחק, או צ'אט באפליקציית הודעות. האפליקציה יכולה לנהל את המשימות שלה דרך הכיתה ActivityManager.AppTask.

להכניס הפסקה לוגית כדי שהמערכת תתייחס לפעילות שלכם כאירוע חדש משימה, יש להשתמש ב-FLAG_ACTIVITY_NEW_DOCUMENT כאשר מתחיל את הפעילות עם startActivity(). אפשר גם לקבל את ההתנהגות הזו על ידי הגדרת <activity> המאפיין documentLaunchMode של הרכיב ל-"intoExisting" או "always" במניפסט.

כדי להימנע מעומס במסך של הפריטים האחרונים, ניתן להגדיר את המספר המקסימלי של משימות מהאפליקציה שיכולות להופיע במסך הזה. כדי לעשות את זה, <application> מאפיין android:maxRecents. הערך הנוכחי אפשר לציין עד 50 משימות לכל משתמש (25 מכשירים עם זיכרון RAM נמוך).

אפשר להגדיר שמשימות במסך 'מהזמן האחרון' יישארו גם אחרי הפעלה מחדש. שליטה את ההתנהגות הקבועה, android:persistableMode . אפשר גם לשנות את המאפיינים החזותיים של פעילות במסך האחרון, כמו לצבע, לתווית ולסמל של הפעילות, על ידי שליחת קריאה setTaskDescription() .

עדכונים ל-WebView

ב-Android 5.0, ההטמעה של WebView מתעדכנת ל-Chromium M37, עם שיפורים באבטחה וביציבות ותיקוני באגים. מחרוזת ברירת המחדל של סוכן המשתמש ב-WebView שפועל ב-Android 5.0 עודכנה כך שתכלול את 37.0.0.0 כמספר הגרסה.

הגרסה הזו מציגה את הכיתה PermissionRequest, שמאפשר לאפליקציה להעניק את ההרשאה WebView כדי לגשת למשאבים מוגנים כמו המצלמה והמיקרופון, דרך ממשקי API לאינטרנט כמו getUserMedia(). האפליקציה צריכה לכלול את הרשאות Android למשאבים האלה כדי להעניק את ההרשאות WebView

באמצעות השיטה החדשה onShowFileChooser(), עכשיו תוכלו להשתמש בשדה להזנת קלט ב-WebView, ולהפעיל בורר קבצים כדי לבחור תמונות וקבצים ממכשיר Android.

בנוסף, גרסה זו כוללת תמיכה WebAudio, WebGL סטנדרטים פתוחים של WebRTC. מידע נוסף על התכונות החדשות שכלולות במהדורה הזו זמין במאמר WebView ל-Android.

צילום מסך ושיתוף שלו

בגרסה 5.0 של Android אפשר להוסיף לאפליקציה יכולות של צילום מסך ושיתוף מסך באמצעות ממשקי ה-API החדשים של android.media.projection. הפונקציונליות הזו שימושי, לדוגמה, אם רוצים להפעיל שיתוף מסך בסרטון אפליקציית שיחות ועידה.

ה-method החדש של createVirtualDisplay() מאפשרת לאפליקציה לצלם את התוכן של המסך הראשי (ברירת המחדל ) לאובייקט Surface, שאותו האפליקציה יכולה לשלוח דרך הרשת. ה-API מאפשר לצלם רק תוכן מסך לא מאובטח, ולא אודיו של המערכת. כדי להתחיל לצלם את המסך, האפליקציה צריכה קודם לבקש מהמשתמש הרשאה על ידי הפעלת תיבת דו-שיח של צילום מסך באמצעות Intent שהתקבל באמצעות השיטה createScreenCaptureIntent().

דוגמה לאופן השימוש בממשקי ה-API החדשים זמינה בכתובת MediaProjectionDemo המחלקה בפרויקט לדוגמה.

התראות

התראות במסך הנעילה

מסכי נעילה ב-Android 5.0 יכולים להציג התראות. המשתמשים יכולים לבחור דרך ההגדרות אם לאפשר תוכן רגיש של התראות שיוצג במסך נעילה מאובטח.

האפליקציה יכולה לקבוע את רמת הפירוט שמוצגת כשההתראות שלה מוצגות מעל מסך הנעילה המאובטח. כדי לשלוט ברמת החשיפה, התקשר setVisibility() והקבוצה לציין אחד מהערכים הבאים:

  • VISIBILITY_PRIVATE: מציגה מידע בסיסי, כמו סמל ההתראה, אבל מסתירה את את כל התוכן של ההתראה.
  • VISIBILITY_PUBLIC: תוצג ההודעה המלאה.
  • VISIBILITY_SECRET: לא מציגה שום דבר, אפילו לא כולל סמל ההתראה.

כשרמת החשיפה היא VISIBILITY_PRIVATE, אפשר גם לספק גרסה קודמת של תוכן ההתראה שבה הפרטים האישיים מוסתרים. לדוגמה, אפליקציית SMS עשויה להציג התראה על ההודעה 'יש לך 3 הודעות טקסט חדשות' אבל מסתיר את ההודעה תכנים ושולחים. כדי לספק את ההודעה החלופית הזו, קודם צריך ליצור התראה על החלפה באמצעות 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 כוללות:

  • תוכנות הצללה (shaders) ל-Compute
  • הפרדת אובייקטים של תוכנת ההצללה
  • פקודות ציור עקיפות
  • מרקמים של מספר דגימות ושבלונות
  • שיפורים בשפת ההצללה
  • תוספים למצבי מיזוג מתקדמים ולניפוי באגים
  • תאימות לאחור ל-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 אחד).

חבילת התוספים תומכת באפשרויות הבאות:

  • תמיכה מובטחת ב-fragment shader למאגרי אחסון של שגיאות, תמונות ו-atomics (תמיכה ב-fragment shader היא אופציונלית ב-OpenGL ES 3.1).
  • תוכנות הצללה (shader) וגיאומטריה
  • פורמט דחיסה של טקסטורה ASTC‏ (LDR)
  • אינטרפולציה והצללה לכל דגימה
  • מצבי שילוב שונים לכל צבע שמצורף במאגר הנתונים הזמני

ממשק Java של חבילת התוספים מסופק עם 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 יכולים לבצע פעולות ידניות שליטה בצילום ואחרי העיבוד, וצילום תמונות ברזולוציה גבוהה בקצב פריימים גבוה.

כדי לראות איך להשתמש בגרסה המעודכנת מצלמה API, יש לעיין בהטמעה של Camera2Basic ו-Camera2Video דוגמאות בגרסה הזו.

הפעלת האודיו

הגרסה הזו כוללת את השינויים הבאים ב AudioTrack:

  • האפליקציה יכולה עכשיו לספק נתוני אודיו בפורמט נקודה צפה (floating-point) (ENCODING_PCM_FLOAT). הזה מאפשרת טווח דינמי גדול יותר, דיוק עקבי יותר ופוטנציאל גדול יותר. חשבונית של נקודה צפה (floating-point) שימושית במיוחד במהלך חישובי ביניים. נקודות הקצה להפעלה משתמשות בפורמט של מספרים שלמים לנתוני אודיו, עם עומק ביט נמוך יותר. (ב-Android 5.0, חלקים מצינור עיבוד הנתונים הפנימי עדיין לא מבוססים על נקודת צפה).
  • עכשיו האפליקציה יכולה לספק נתוני אודיו כ-ByteBuffer, באותו פורמט שבו הם מסופקים על ידי MediaCodec.
  • WRITE_NON_BLOCKING היא יכולה לפשט את אגירת הנתונים ואת ריבוי השרשורים באפליקציות מסוימות.

פקד הפעלת מדיה

משתמשים בממשקי ה-API החדשים של התראות ומדיה כדי לוודא שמערכת הממשק המשתמש יודעת על הפעלת המדיה שלכם, ויכולה לחלץ ולציג את הגרפיקה של האלבום. עכשיו קל יותר לשלוט בהפעלת המדיה בממשק משתמש ובשירותים, MediaSession והקבוצה MediaController כיתות.

הכיתה החדשה MediaSession מחליפה את הכיתה RemoteControlClient שהוצאה משימוש, ומספקת קבוצה אחת של שיטות קריאה חוזרת (callback) לטיפול בפקדי התעבורה ובלחצני המדיה. אם האפליקציה מספקת הפעלת מדיה ופועלת ב-Android טלוויזיה או בפלטפורמת Wear, צריך להשתמש כיתה אחת (MediaSession) לטיפול בנסיעה משתמשים באותן שיטות לקריאה חוזרת.

עכשיו אפשר ליצור אפליקציה משלך לבקרת מדיה באמצעות כיתה אחת (MediaController). הכיתה הזו מספקת דרך בטוחה לשרשורים ולעקוב אחרי הפעלת המדיה מתוך תהליך ממשק המשתמש של האפליקציה. כשיוצרים בקר, צריך לציין אובייקט MediaSession.Token כדי שהאפליקציה תוכל לקיים אינטראקציה עם ה-MediaSession הנתון. באמצעות ה-methods MediaController.TransportControls, אתם יכולים לשלוח פקודות כמו play(), stop(), skipToNext(), ו-setRating() כדי לשלוט בהפעלת המדיה בסשן הזה. באמצעות הבקר, אפשר גם לרשום אובייקט MediaController.Callback כדי להאזין למטא-נתונים ולשינויים במצב של הסשן.

בנוסף, אפשר ליצור התראות עשירות שמאפשרות לשלוט בהפעלה באמצעות סשן מדיה באמצעות הכיתה החדשה Notification.MediaStyle.

דפדוף במדיה

ב-Android 5.0 ניתן להוסיף לאפליקציות את האפשרות לדפדף בתוכן המדיה של אפליקציה אחרת, android.media.browse API. כדי לחשוף את תוכן המדיה באפליקציה, צריך להרחיב את הכיתה MediaBrowserService. ההטמעה של MediaBrowserService צריכה לספק גישה ל-MediaSession.Token כדי שאפליקציות יוכלו להפעיל תוכן מדיה שסופק דרך השירות שלכם.

כדי לבצע פעולות בשירות של דפדפן מדיה, משתמשים במחלקה MediaBrowser. מציינים את שם הרכיב של MediaSession כשיוצרים מכונה של MediaBrowser. באמצעות המופע של הדפדפן, שהאפליקציה יכולה להתחבר לשירות המשויך ולקבל אובייקט אחד (MediaSession.Token) כדי להפעיל את התוכן שנחשף באמצעות השירות הזה.

אחסון

בחירת ספרייה

Android 5.0 מרחיב את Storage Access Framework כדי לאפשר למשתמשים לבחור עץ משנה של הספרייה כולה, וכך לתת לאפליקציות גישת קריאה/כתיבה לכל המסמכים הכלולים בלי לדרוש אישור משתמש עבור כל פריט.

כדי לבחור עץ משנה של ספרייה, צריך ליצור ולשלוח OPEN_DOCUMENT_TREE בכוונה טובה. המערכת מציגה את כל DocumentsProvider מופעים שתומכים בבחירת עץ משנה, ולאפשר למשתמש לדפדף ולבחור ספרייה. ה-URI המוחזר מייצג גישה ל-subtree שנבחר. אחר כך אפשר יהיה להשתמש ב-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 מספק ממשקי API חדשים לרשתות מרובות שמאפשרים לאפליקציה שלך לבצע סריקה דינמית של רשתות זמינות עם יכולות ספציפיות, וגם ליצור חיבור אליהם. הפונקציונליות הזו מועילה כאשר האפליקציה דורשת רשת ספציפית, כגון רשת SUPL, MMS או רשת לחיוב על ידי ספק, או אם רוצים לשלוח נתונים באמצעות פרוטוקול העברה מסוג מסוים.

כדי לבחור רשת ולהתחבר אליה באופן דינמי מתוך האפליקציה, פועלים לפי השלבים הבאים שלבים:

  1. יוצרים ConnectivityManager.
  2. להשתמש בכיתוב NetworkRequest.Builder כדי ליצור אובייקט NetworkRequest וציון תכונות הרשת וסוג התעבורה שהאפליקציה שלך מעוניינת בו.
  3. כדי לסרוק לאיתור רשתות מתאימות, צריך להתקשר למספר requestNetwork() או registerNetworkCallback(), ונעביר את אובייקט NetworkRequest ויישום של ConnectivityManager.NetworkCallback משתמשים בשיטה requestNetwork() אם רוצים לעבור באופן פעיל לרשת מתאימה ברגע שהיא מזוהה. כדי לקבל התראות רק על רשתות שנסרקו בלי לעבור אליהן באופן פעיל, משתמשים בשיטה registerNetworkCallback().

כשהמערכת מזהה רשת מתאימה, היא מתחברת לרשת מפעיל את onAvailable() קריאה חוזרת. אפשר להשתמש באובייקט Network מהקריאה החוזרת (callback) כדי לקבל מידע נוסף על הרשת, או כדי לנתב את התנועה לשימוש ברשת שנבחרה.

Bluetooth עם צריכת אנרגיה נמוכה (BLE)

ב-Android 4.3 נוספה תמיכה בפלטפורמה ל-Bluetooth עם צריכת אנרגיה נמוכה (Bluetooth LE) בתפקיד המרכזי. ב-Android 5.0, מכשיר Android יכול לפעול כציוד היקפי עם Bluetooth LE. אפליקציות יכולות להשתמש ביכולת הזו כדי לחשוף את הנוכחות שלהם למכשירים בקרבת מקום. לדוגמה, אפשר לפתח אפליקציות שמאפשרות למכשיר לתפקד כמד צעדים או כניטור תקינות ולתקשר את הנתונים שלו עם מכשיר Bluetooth LE אחר.

ממשקי ה-API החדשים של android.bluetooth.le מאפשרים לאפליקציות שלכם לשדר מודעות, לסרוק תגובות וליצור חיבורים עם מכשירי Bluetooth LE בקרבת מקום. כדי להשתמש בתכונות החדשות של פרסום וסריקה, צריך להוסיף את הקוד BLUETOOTH_ADMIN במניפסט. כשמשתמשים מעדכנים או מורידים את האפליקציה מחנות Play, הוא יתבקש להעניק לאפליקציה את ההרשאה הבאה: מידע על חיבור Bluetooth: מאפשר לאפליקציה לשלוט ב-Bluetooth, כולל שידור למכשירי Bluetooth בקרבת מקום או קבלת מידע עליהם.'

כדי להתחיל לפרסם ב-Bluetooth LE כדי שמכשירים אחרים יוכלו לגלות את האפליקציה, צריך להפעיל את השיטה startAdvertising() ולהעביר הטמעה של הכיתה AdvertiseCallback. אובייקט הקריאה החוזרת (callback) מקבל דוח בנוגע להצלחה או לכישלון של פעולת הפרסום.

ב-Android 5.0 נוספה הכיתה ScanFilter, כדי שהאפליקציה תוכל לסרוק רק את הסוגים הספציפיים של המכשירים שמעניינים אותה. כדי להתחיל לסרוק לאיתור Bluetooth מכשירי LE, שיחה אל startScan() ומעבירים רשימה של מסננים. בהפעלת ה-method עליך גם לציין של ScanCallback כדי לדווח כאשר נמצאה פרסומת Bluetooth LE.

שיפורי NFC

מערכת Android 5.0 מוסיפה את השיפורים האלה כדי לאפשר הרחבה ועוד שימוש גמיש ב-NFC:

  • Android Beam זמין עכשיו בתפריט שיתוף.
  • האפליקציה שלך יכולה להפעיל את Android Beam במכשיר של המשתמש כדי לשתף נתונים באמצעות מתבצעת התקשרות אל invokeBeam(). כך המשתמש לא יצטרך להצמיד את המכשיר למכשיר אחר מכשיר עם תמיכה ב-NFC כדי להשלים את העברת הנתונים.
  • אפשר להשתמש בשיטה החדשה createTextRecord() כדי ליצור רשומת NDEF שמכילה נתוני טקסט מסוג UTF-8.
  • אם מפתחים אפליקציית תשלומים, עכשיו יש לך אפשרות רישום מזהה אפליקציית NFC (AID) באופן דינמי באמצעות התקשרות registerAidsForService() אפשר גם להשתמש ב-setPreferredService() כדי להגדיר את שירות הדמיית הכרטיסים המועדף שאמור יכול לשמש כשפעילות ספציפית מתבצעת בחזית.

פרויקט וולטה

בנוסף לתכונות חדשות, מערכת Android 5.0 שמה דגש על שיפורים בסוללה חיים. אתם יכולים להשתמש בממשקי ה-API ובכלי החדשים כדי להבין את צריכת האנרגיה של האפליקציה ולבצע אופטימיזציה שלה.

תזמון משימות

ב-Android 5.0 יש ממשק API חדש בשם JobScheduler שמאפשר לכם לבצע אופטימיזציה של חיי הסוללה על ידי הגדרת משימות למערכת כך שתריץ אותן באופן אסינכרוני במועד מאוחר יותר או בתנאים מסוימים (למשל, כשהמכשיר נטען). תזמון משימות שימושי במצבים כמו:

  • באפליקציה יש עבודה שלא מוצגת למשתמשים, שאפשר לדחות.
  • האפליקציה מציעה את העבודה שהיית רוצה לבצע כשהיחידה מחוברת.
  • באפליקציה יש משימה שמחייבת גישה לרשת או חיבור ל-Wi-Fi חיבור כזה.
  • באפליקציה יש מספר משימות שאתם רוצים להריץ כקבוצה בלוח זמנים קבוע.

יחידת עבודה נכללת באובייקט JobInfo. האובייקט הזה מציין את הקריטריונים לתזמון.

משתמשים במחלקה JobInfo.Builder כדי להגדיר איך המשימה המתוזמנת אמורה לפעול. אפשר לתזמן את המשימה כך שתפעל לפי תנאים, כמו:

  • הפעלה כשהמכשיר בטעינה
  • הפעלה כשהמכשיר מחובר לרשת ללא חיוב לפי שימוש בנתונים
  • הפעלה כשהמכשיר לא פעיל
  • סיום לפני תאריך יעד מסוים או עם עיכוב מינימלי

לדוגמה, אפשר להוסיף קוד כזה כדי להריץ את המשימה ברשת ללא חיוב לפי נפח:

Kotlin

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)

Java

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 דקות, ורמת הטעינה של הסוללה רמה בריאה), המערכת תריץ כל משימה מתוזמנת שמוכנה להפעלה, גם אם המועד האחרון עדיין לא חלף.

כדי לראות דוגמה לאופן השימוש ב-API של JobScheduler, אפשר לעיין בדוגמת ההטמעה JobSchedulerSample בגרסה הזו.

כלים למפתחים למעקב אחרי השימוש בסוללה

הפקודה החדשה dumpsys batterystats יוצרת נתונים סטטיסטיים מעניינים על השימוש בסוללה במכשיר, שמאורגנים לפי מזהה משתמש ייחודי (UID). הנתונים הסטטיסטיים כוללים:

  • היסטוריה של אירועים שקשורים לסוללה
  • נתונים סטטיסטיים גלובליים של המכשיר
  • צריכת חשמל משוערת לכל UID ורכיב מערכת
  • זמן אחזור (ms) לכל חבילה בנייד לכל אפליקציה
  • נתונים סטטיסטיים מצטברים על UID של המערכת
  • נתונים סטטיסטיים מצטברים לגבי UID של האפליקציה

באפשרות --help אפשר לקבל מידע על האפשרויות השונות של בהתאמה אישית של הפלט. לדוגמה, כדי להדפיס נתונים סטטיסטיים על השימוש בסוללה של חבילת אפליקציות מסוימת מאז הטעינה האחרונה של המכשיר, מריצים את הפקודה הבאה:

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

אפשר להשתמש בכלי Battery Historian על הפלט של הפקודה dumpsys כדי ליצור ויזואליזציה של אירועים שקשורים לחשמל מהיומנים בפורמט HTML. הזה השימוש במידע מקל עליך להבין ולאבחן את הסוללה של בעיות קשורות.

Android במקום העבודה ובמערכת החינוך

ניהול תצורה מנוהל

ב-Android 5.0 יש פונקציונליות חדשה להרצת אפליקציות בסביבת הארגון. א' מנהל המכשיר יכול להתחיל תהליך של הקצאת הרשאות ידנית כדי להוסיף הצגה משותפת אבל נפרדת פרופיל מנוהל למכשיר, אם למשתמש יש חשבון אישי קיים. אפליקציות שמשויכות לפרופילים מנוהלים מופיעות לצד אפליקציות לא מנוהלות במרכז האפליקציות, במסך 'מה חדש' ובהתראות של המשתמש.

כדי להתחיל את תהליך הקצאת המשאבים המנוהל, שולחים את הערך ACTION_PROVISION_MANAGED_PROFILE ב-Intent. אם הקריאה תתבצע בהצלחה, המערכת תפעיל את קריאת החזרה (callback) onProfileProvisioningComplete(). לאחר מכן תוכלו להתקשר למספר setProfileEnabled() כדי להפעיל את הפרופיל המנוהל הזה.

כברירת מחדל, רק קבוצת משנה קטנה של אפליקציות מופעלת בפרופיל המנוהל. אפשר להתקין אפליקציות נוספות בפרופיל המנוהל באמצעות התקשרות enableSystemApp()

אם אתם מפתחים אפליקציית Launcher, תוכלו להשתמש בכיתה החדשה LauncherApps כדי לקבל רשימה של פעילויות שניתן להפעיל עבור המשתמש הנוכחי וכל הפרופילים המנוהלים המשויכים. כדי להבליט את האפליקציות המנוהלות באופן ויזואלי, אפשר לצרף תג של עבודה לקובץ ה-drawable של הסמל במרכז האפליקציות. כדי לאחזר את הסמל עם התג, צריך להתקשר getUserBadgedIcon()

כדי להבין איך להשתמש בפונקציונליות החדשה, אפשר לעיין בדוגמה להטמעה של BasicManagedProfile בגרסה הזו.

בעלי המכשיר

ב-Android 5.0 נוספה האפשרות לפרוס אפליקציה של בעלי מכשיר. מכשיר owner הוא סוג מיוחד של אדמין של מכשיר יכולת ליצור ולהסיר משתמשים משניים לקבוע הגדרות גלובליות במכשיר. האפליקציה של בעל המכשיר יכולה להשתמש שיטות בכיתה DevicePolicyManager לקחת שליטה פרטנית בתצורה, באבטחה ובאפליקציות במכשירים מנוהלים. למכשיר יכול להיות רק בעלים פעיל אחד בכל פעם.

כדי לפרוס ולהפעיל בעלי מכשיר, צריך לבצע העברת נתונים באמצעות NFC מאפליקציית תכנות אל המכשיר בזמן שהמכשיר לא הוקצה . העברת הנתונים הזו שולחת את אותו מידע כמו ב-Intent של הקצאת ההרשאות שמתואר במאמר ניהול תצורה מנוהל.

הקפאת מסך

ב-Android 5.0 יש ממשק API חדש להצמדת מסך שמאפשר להגביל באופן זמני את היכולת של המשתמשים לצאת מהמשימה או להפריע להם באמצעות התראות. לדוגמה, אם אתם מפתחים אפליקציה חינוכית, או דרישות הערכה מורכבות ב-Android, או יישום "קיוסק". אחרי שהאפליקציה מפעילה את הצמדת המסך, המשתמשים לא יכולים לראות התראות, לגשת לאפליקציות אחרות או לחזור למסך הבית, עד שהאפליקציה תצא מהמצב.

יש שתי דרכים להפעיל את הצמדת המסך:

  • באופן ידני: המשתמשים יכולים להפעיל את הקפאת המסך בקטע הגדרות > אבטחה > הקפאת מסך, ולבחור את המשימות שהם רוצים להצמיד על ידי הקשה על סמל הסיכה הירוק במסך 'האחרונים'.
  • באופן פרוגרמטי: כדי להפעיל את הצמדת המסך באופן פרוגרמטי, יש להפעיל את startLockTask() מהאפליקציה. אם האפליקציה ששלחה את הבקשה היא לא הבעלים של המכשיר, תוצג למשתמש הודעה לאישור. אפליקציה של בעל המכשיר יכולה להתקשר אל setLockTaskPackages() כדי לאפשר הצמדה של אפליקציות ללא שלב אישור המשתמש.

כשנעילת המשימה פעילה, קורים הדברים הבאים:

  • שורת הסטטוס ריקה, וההתראות ומידע הסטטוס של המשתמש מוסתרים.
  • הלחצנים 'דף הבית' ו'אפליקציות אחרונות' מוסתרים.
  • אפליקציות אחרות לא יכולות להפעיל פעילויות חדשות.
  • האפליקציה הנוכחית יכולה להתחיל פעילויות חדשות, כל עוד הפעולה הזו לא יוצרת משימות חדשות.
  • כשבעל המכשיר מפעיל את הצמדת המסך, המשתמש נשאר נעול באפליקציה שלכם עד שהאפליקציה קוראת ל-stopLockTask().
  • אם האפליקציה שמקבעת את המסך היא לא אפליקציה של הבעלים של המכשיר או שהיא מופעלת ישירות על ידי המשתמש, המשתמש יכול לצאת מהאפליקציה על ידי לחיצה ארוכה על הלחצנים 'הקודם' ו'הקודם'.

מסגרת הדפסה

עיבוד PDF כמפת סיביות (bitmap)

עכשיו אפשר להשתמש בכיתה החדשה PdfRenderer כדי ליצור תמונות בפורמט bitmap מדפי מסמכי PDF ולהדפיס אותן. עליך לציין ParcelFileDescriptor שניתן לחפש (כלומר, התוכן) שבו המערכת כותבת את התוכן להדפסה. האפליקציה יכולה לקבל דף לעיבוד באמצעות openPage(), ואז התקשרות render() כדי להפוך את השדה PdfRenderer.Page הפתוח למפת סיביות (bitmap). אפשר גם להגדיר פרמטרים נוספים אם רוצים להמיר רק חלק מהמסמך לתמונה בפורמט bitmap (לדוגמה, כדי להטמיע עיבוד באמצעות פריסת משבצות כדי להתקרב למסמך).

דוגמה לשימוש בממשקי ה-API החדשים מופיעה בדוגמה PdfRendererBasic.

מערכת

סטטיסטיקת שימוש באפליקציות

עכשיו אפשר לגשת להיסטוריית השימוש באפליקציות במכשיר Android באמצעות API חדש של android.app.usage. ה-API הזה מספק מידע מפורט יותר מאשר אמצעי תשלום אחד (getRecentTasks()). כדי להשתמש ב-API הזה, צריך קודם להצהיר על הרשאה "android.permission.PACKAGE_USAGE_STATS" במניפסט. המשתמש צריך גם להפעיל את הגישה לאפליקציה הזו דרך הגדרות > אבטחה > אפליקציות עם גישה לנתוני שימוש.

המערכת אוספת את נתוני השימוש לפי אפליקציה, ומצטברים נתונים במרווחי זמן יומיים, שבועיים, חודשיים ועונתיים. משך הזמן המקסימלי שהמערכת שומרת את הנתונים האלה:

  • נתונים יומיים: 7 ימים
  • נתונים שבועיים: 4 שבועות
  • נתונים חודשיים: 6 חודשים
  • נתונים שנתיים: שנתיים

המערכת מתעדת את הנתונים הבאים לכל אפליקציה:

  • הפעם האחרונה שבה נעשה שימוש באפליקציה
  • משך הזמן הכולל שבו האפליקציה הייתה בחזית בפרק הזמן הזה (לפי יום, שבוע, חודש או שנה)
  • תיעוד חותמות הזמן כשרכיב (המזוהה לפי חבילה ושם פעילות) הועברו לחזית או לרקע במהלך יום
  • תיעוד חותמת זמן כשהגדרת המכשיר השתנתה (למשל, כשכיוון המכשיר השתנה בגלל סיבוב)

בדיקות ונגישות

שיפורי בדיקה ונגישות

ב-Android 5.0 נוספה התמיכה הבאה לבדיקות ולנגישות:

  • השיטות החדשות getWindowAnimationFrameStats() ו-getWindowContentFrameStats() מתעדות נתונים סטטיסטיים של פריימים לגבי אנימציות ותוכן של חלונות. השיטות האלה מאפשרות לכתוב בדיקות אינסטרומנטציה כדי להעריך אם אפליקציה מבצעת רינדור של פריימים בתדירות רענון מספקת כדי לספק חוויית משתמש חלקה.
  • השיטה החדשה executeShellCommand() מאפשרת להריץ פקודות מעטפת מבדיקת המדידה. ביצוע הפקודה דומה להרצת adb shell ממארח שמחובר למכשיר, ומאפשר לכם להשתמש בכלים מבוססי מעטפת כמו dumpsys, am, content וגם pm.
  • שירותי נגישות וכלי בדיקה המשתמשים בממשקי API לנגישות (למשל UiAutomator) יכול עכשיו לאחזר מידע מפורט על המאפיינים של חלונות מסך שמשתמשים גלויים יכולים לבצע בו אינטראקציה. כדי לאחזר רשימה של AccessibilityWindowInfo אובייקטים, קוראים לפונקציה החדשה getWindows() .
  • הכיתה החדשה AccessibilityNodeInfo.AccessibilityAction מאפשרת להגדיר פעולות רגילות או מותאמות אישית לביצוע על AccessibilityNodeInfo. הכיתה החדשה AccessibilityNodeInfo.AccessibilityAction מחליפה את ממשקי ה-API שקשורים לפעולות, שהיו בעבר ב-AccessibilityNodeInfo.
  • Android 5.0 מספק שליטה פרטנית יותר בסינתזה של טקסט לדיבור באפליקציה שלך. הכיתה החדשה ב-Voice מאפשרת לאפליקציה משתמשים בפרופילים קוליים שמשויכים ללוקאלים, לאיכות ולזמן אחזור ספציפיים ופרמטרים ספציפיים למנוע טקסט לדיבור.

IME

מעבר קל יותר בין שפות הקלט

החל מגרסה 5.0 של Android, המשתמשים יכולים לעבור בקלות רבה יותר בין כל עורכי שיטות הקלט (IME) הנתמכים בפלטפורמה. ביצוע פעולת המעבר הייעודית (בדרך כלל מגע בסמל הגלובוס במקלדת הווירטואלית) מאפשר לעבור בין כל ממשקי ה-IME האלה. השינוי הזה בהתנהגות מוטמע באמצעות השיטה shouldOfferSwitchingToNextInputMethod().

בנוסף, המסגרת בודקת עכשיו אם ממשק ה-IME הבא כולל מנגנון מעבר בכלל (ולכן אם הוא תומך במעבר ל-IME הבא אחריו). IME עם מנגנון החלפה לא יחזור ל-IME ללא מנגנון החלפה. הזה יישום של שינוי בהתנהגות על ידי switchToNextInputMethod() .

דוגמה לשימוש בממשקי ה-API המעודכנים למעבר בין IME מופיעה בדוגמה המעודכנת להטמעת מקלדת וירטואלית במהדורה הזו. מידע נוסף על הטמעת מעבר בין שיטות קלט זמין במאמר יצירת שיטת קלט.

הצהרות מניפסט

תכונות נדרשות שניתנות להצהרה

הערכים הבאים נתמכים עכשיו ב <uses-feature> כך שניתן לוודא שהאפליקציה מותקנת רק במכשירים לספק את התכונות שדרושות לאפליקציה.

הרשאות המשתמשים

ההרשאה הבאה נתמכת עכשיו ב <uses-permission> להצהרה על ההרשאות הדרושות לאפליקציה כדי לגשת לממשקי API מסוימים.

  • BIND_DREAM_SERVICE: כאשר מטרגטים API ברמה 21 ואילך, ההרשאה הזו נדרשת על ידי שירות Daydream, כדי להבטיח שרק המערכת תוכל לקשר אליו.