רמת 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
, שיש לה יכולות דומות לאלה של ממשק ה-APICamera
שהוצא משימוש. - מכשירים שתומכים ברמת החומרה של
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 או רשת לחיוב על ידי ספק, או אם רוצים לשלוח נתונים באמצעות פרוטוקול העברה מסוג מסוים.
כדי לבחור רשת ולהתחבר אליה באופן דינמי מתוך האפליקציה, פועלים לפי השלבים הבאים שלבים:
- יוצרים
ConnectivityManager
. - להשתמש בכיתוב
NetworkRequest.Builder
כדי ליצור אובייקטNetworkRequest
וציון תכונות הרשת וסוג התעבורה שהאפליקציה שלך מעוניינת בו. - כדי לסרוק לאיתור רשתות מתאימות, צריך להתקשר למספר
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>
כך שניתן לוודא שהאפליקציה מותקנת רק במכשירים
לספק את התכונות שדרושות לאפליקציה.
FEATURE_AUDIO_OUTPUT
FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
FEATURE_CAMERA_CAPABILITY_RAW
FEATURE_CAMERA_LEVEL_FULL
FEATURE_GAMEPAD
FEATURE_LIVE_TV
FEATURE_MANAGED_USERS
FEATURE_LEANBACK
FEATURE_OPENGLES_EXTENSION_PACK
FEATURE_SECURELY_REMOVES_USERS
FEATURE_SENSOR_AMBIENT_TEMPERATURE
FEATURE_SENSOR_HEART_RATE_ECG
FEATURE_SENSOR_RELATIVE_HUMIDITY
FEATURE_VERIFIED_BOOT
FEATURE_WEBVIEW
הרשאות המשתמשים
ההרשאה הבאה נתמכת עכשיו ב
<uses-permission>
להצהרה על ההרשאות הדרושות לאפליקציה כדי לגשת לממשקי API מסוימים.
BIND_DREAM_SERVICE
: כאשר מטרגטים API ברמה 21 ואילך, ההרשאה הזו נדרשת על ידי שירות Daydream, כדי להבטיח שרק המערכת תוכל לקשר אליו.