רמת API: 21
ב-Android 5.0 (LOLLIPOP) יש תכונות חדשות למשתמשים ולמפתחי אפליקציות. במסמך הזה מוצג מבוא לממשקי ה-API החדשים והחשובים ביותר.
אם יש לכם אפליקציה שפורסמה, חשוב לבדוק את השינויים בהתנהגות של Android 5.0 שצריך להביא בחשבון באפליקציה. השינויים האלה בהתנהגות עשויים להשפיע על האפליקציה שלכם במכשירי Android 5.0, גם אם אתם לא משתמשים בממשקי API חדשים או מטרגטים פונקציונליות חדשה.
כדי לקבל הצצה כללית על התכונות החדשות בפלטפורמה, כדאי לעיין בנקודות השימוש ב-Android Lollipop.
התחילו לפתח
כדי להתחיל לפתח אפליקציות ל-Android 5.0, קודם צריך להוריד את Android SDK. לאחר מכן, משתמשים ב-SDK Manager כדי להוריד את פלטפורמת ה-SDK ואת קובצי האימג' של המערכת של Android 5.0.
עדכון רמת ה-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. אתם יכולים ליצור אפליקציות בעיצוב Material Design שיהיו דינמיות מבחינה חזותית ויש בהן מעברים של רכיבי ממשק המשתמש שנראים טבעיים למשתמשים. התמיכה הזו כוללת:
- העיצוב של החומר
- הצגת האזורים הכהים
- הווידג'ט
RecyclerView
- אנימציה וקישורים לאפקטים של עיצוב
- אנימציה של עיצוב Material ואפקטים של מעבר בין פעילויות
- אנימציות לנכסי תצוגה על סמך המצב של התצוגה
- ווידג'טים של ממשק המשתמש וסרגלי אפליקציות שניתנים להתאמה אישית עם לוחות צבעים שנמצאים בשליטתך
- פריטים גרפיים שניתן לשרטוט עם אנימציה וללא אנימציה, המבוססים על גרפיקה וקטורית של XML
למידע נוסף על הוספת פונקציונליות של Material Design לאפליקציה, ראו Material Design.
פעילויות ומסמכים בו-זמנית במסך האחרונים
בגרסאות קודמות, במסך 'מהזמן האחרון' הוצגה רק משימה אחת לכל אפליקציה שהמשתמש יצר איתה אינטראקציה לאחרונה. עכשיו האפליקציה יכולה לפתוח עוד משימות לפי הצורך לפעילויות נוספות במקביל לגבי מסמכים. התכונה הזו מאפשרת למשתמשים לבצע משימות מרובות בו-זמנית, על ידי מעבר מהיר בין פעילויות ומסמכים ספציפיים ממסך האפליקציות האחרונות, עם חוויית מעבר עקבית בכל האפליקציות.
דוגמאות למשימות כאלה יכולות להיות כרטיסיות פתוחות באפליקציית דפדפן אינטרנט, מסמכים באפליקציית פרודוקטיביות, משחקים שמתקיימים בו-זמנית או צ'אטים באפליקציית הודעות. האפליקציה יכולה לנהל את המשימות שלה באמצעות הכיתה ActivityManager.AppTask
.
כדי להוסיף הפסקה לוגית שהמערכת תתייחס לפעילות שלכם כמשימה חדשה, תוכלו להשתמש ב-FLAG_ACTIVITY_NEW_DOCUMENT
כשמפעילים את הפעילות עם startActivity()
. אפשר לקבל את ההתנהגות הזו גם על ידי הגדרת המאפיין documentLaunchMode
של הרכיב <activity> לערך "intoExisting"
או "always"
במניפסט.
כדי לא להעמיס על המסך של האפליקציות האחרונות, תוכלו להגדיר את המספר המקסימלי של משימות באפליקציה שיכולות להופיע במסך הזה. כדי לעשות זאת, מגדירים את המאפיין <application> android:maxRecents
. המגבלה הנוכחית אפשר לציין עד 50 משימות למשתמש (25 במכשירים עם זיכרון RAM נמוך).
אפשר להגדיר שמשימות במסך 'מהזמן האחרון' יישארו גם אחרי הפעלה מחדש. כדי לשלוט בהתנהגות השמירה, משתמשים במאפיין android:persistableMode. אפשר גם לשנות את המאפיינים החזותיים של פעילות במסך האחרון, כמו הצבע, התווית והסמל של הפעילות, על ידי קריאה ל-method 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 כוללות:
- חישוב של תוכנות הצללה (shader)
- הפרדת אובייקטים של תוכנת ההצללה
- פקודות ציור עקיפות
- מרקמים של מספר דגימות ושבלונות
- שיפורים בשפה ההצללה
- תוספים למצבי שילוב מתקדמים וניפוי באגים
- תאימות לאחור עם 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
כך שיצלם תמונות בודדות או מספר תמונות ברצף.
כדי לקבל התראה כשמצלמים תמונות חדשות, צריך להטמיע את ה-listener CameraCaptureSession.CaptureCallback
ולהגדיר אותו בבקשת הצילום. עכשיו, כשהמערכת משלימה את הבקשה לצילום התמונה, המאזין CameraCaptureSession.CaptureCallback
מקבל קריאה ל-onCaptureCompleted()
, וכולל את המטא-נתונים של צילום התמונה בקובץ CaptureResult
.
המחלקה CameraCharacteristics
מאפשרת לאפליקציה לזהות אילו תכונות של המצלמה זמינות במכשיר. המאפיין INFO_SUPPORTED_HARDWARE_LEVEL
של האובייקט מייצג את רמת הפונקציונליות של המצלמה.
- כל המכשירים תומכים ברמת החומרה
INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
לפחות, עם יכולות שמקבילות בערך לאלה של ה-API שלCamera
שהוצא משימוש. - מכשירים שתומכים ברמת החומרה
INFO_SUPPORTED_HARDWARE_LEVEL_FULL
יכולים לשלוט באופן ידני בצילום ובעיבוד לאחר הצילום, ולצלם תמונות ברזולוציה גבוהה בקצב פריימים גבוה.
כדי ללמוד איך משתמשים ב-API המעודכן של Camera, אפשר לעיין בדוגמאות להטמעה של Camera2Basic
ו-Camera2Video
במהדורה הזו.
הפעלת האודיו
הגרסה הזו כוללת את השינויים הבאים ב-AudioTrack
:
- מעכשיו, האפליקציה שלכם יכולה לספק נתוני אודיו בפורמט של נקודה צפה (
ENCODING_PCM_FLOAT
). כך תוכלו ליהנות מטווח דינמי רחב יותר, מדיקות עקבית יותר וממרחב ראש גדול יותר. חשבונית של נקודה צפה (floating-point) שימושית במיוחד במהלך חישובי ביניים. נקודות קצה להפעלה משתמשות בפורמט של מספר שלם לנתוני אודיו, עם עומק ביט נמוך יותר. (ב-Android 5.0, חלקים מצינור עיבוד הנתונים הפנימי עדיין לא כוללים נקודות צפות). - האפליקציה שלך יכולה עכשיו לספק נתוני אודיו בתור
ByteBuffer
, באותו פורמט שסופק על ידיMediaCodec
. - האפשרות
WRITE_NON_BLOCKING
יכולה לפשט את האחסון במטמון ואת השימוש בכמה תהליכים במקביל (multithreading) באפליקציות מסוימות.
שליטה בהפעלת המדיה
השתמשו בממשק ה-API החדש להתראות ולמדיה כדי לוודא שממשק המשתמש של המערכת ידע על הפעלת המדיה ויוכל לחלץ ולהציג את עטיפת האלבום.
עכשיו קל יותר לשלוט בהפעלת המדיה בממשק משתמש ובשירות באמצעות המחלקות החדשות MediaSession
ו-MediaController
.
המחלקה החדשה MediaSession
מחליפה את המחלקה RemoteControlClient
שהוצאה משימוש, וכוללת קבוצה אחת של שיטות קריאה חוזרת לטיפול בבקרות התעבורה ובלחצני מדיה.
אם האפליקציה שלכם מספקת הפעלת מדיה ופועלת בפלטפורמת Android TV או Wear, תוכלו להשתמש בכיתה MediaSession
כדי לטפל בפקדי התעבורה באמצעות אותן שיטות קריאה חוזרת (callback).
עכשיו יש לך אפשרות ליצור אפליקציה משלך לבקרת מדיה באמצעות הכיתה החדשה ב-MediaController
. בכיתה הזו יש דרך ללא שרשורים לעקוב אחרי הפעלת המדיה מהתהליך בממשק המשתמש של האפליקציה ולשלוט בה.
כשיוצרים בקר, צריך לציין אובייקט MediaSession.Token
כדי שהאפליקציה תוכל לקיים אינטראקציה עם MediaSession
הנתון.
באמצעות methods של MediaController.TransportControls
, אפשר לשלוח פקודות כמו play()
, stop()
, skipToNext()
ו-setRating()
כדי לשלוט בהפעלת המדיה בסשן הזה. באמצעות השלט רחוק אפשר גם לרשום אובייקט MediaController.Callback
כדי להאזין לשינויי מטא-נתונים ומצב בסשן.
נוסף על כך, אפשר ליצור התראות מתקדמות שמאפשרות לקשר את בקרת ההפעלה לסשן מדיה עם המחלקה החדשה Notification.MediaStyle
.
דפדוף במדיה
Android 5.0 כולל את היכולת של אפליקציות לדפדף בספריית תוכן המדיה של אפליקציה אחרת באמצעות ממשק ה-API החדש
android.media.browse. כדי לחשוף את תוכן המדיה באפליקציה, צריך להרחיב את הכיתה MediaBrowserService
. ההטמעה של MediaBrowserService
צריכה לספק גישה ל-MediaSession.Token
כדי שאפליקציות יוכלו להפעיל תוכן מדיה שסופק דרך השירות שלכם.
כדי ליצור אינטראקציה עם שירות של דפדפן מדיה, צריך להשתמש
במחלקה MediaBrowser
. מציינים את שם הרכיב של MediaSession
כשיוצרים מכונה של MediaBrowser
. באמצעות המופע של הדפדפן, האפליקציה יכולה להתחבר לשירות המשויך ולקבל אובייקט MediaSession.Token
כדי להפעיל את התוכן שנחשף דרך אותו שירות.
אחסון
בחירת ספרייה
ב-Android 5.0 הורחבה המסגרת של גישה לאחסון כדי לאפשר למשתמשים לבחור עץ משנה שלם של ספריות, וכך לתת לאפליקציות הרשאת קריאה/כתיבה לכל המסמכים הכלולים בלי לחייב את המשתמש לאשר כל פריט.
כדי לבחור עץ משנה של ספרייה, צריך ליצור ולשלוח Intent מסוג OPEN_DOCUMENT_TREE
. המערכת מציגה את כל המכונות של DocumentsProvider
שתומכות בבחירת עץ משנה, ומאפשרת למשתמש לעיין בספריות ולבחור אחת מהן. ה-URI שמוחזר מייצג גישה לעץ המשנה שנבחר. לאחר מכן תוכלו להשתמש ב-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
. כדאי להשתמש ב-methodrequestNetwork()
אם רוצים לעבור באופן פעיל לרשת מתאימה ברגע שהיא מזוהה. כדי לקבל התראות רק על רשתות שנסרקות בלי לעבור באופן פעיל, כדאי להשתמש בשיטהregisterNetworkCallback()
.
כשהמערכת מזהה רשת מתאימה, היא מתחברת לרשת ומפעילה את הקריאה החוזרת onAvailable()
(callback). תוכלו להשתמש באובייקט Network
מהקריאה החוזרת (callback) כדי לקבל מידע נוסף על הרשת, או כדי להפנות את תעבורת הנתונים לשימוש ברשת שנבחרה.
Bluetooth עם צריכת אנרגיה נמוכה (BLE)
ב-Android 4.3 נוסף תפקיד מרכזי: Bluetooth Low Energy (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
. אובייקט הקריאה החוזרת מקבל דוח על ההצלחה או הכשל של פעולת הפרסום.
ב-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. - אם אתם מפתחים אפליקציית תשלומים, עכשיו יש לכם אפשרות לרשום מזהה אפליקציה (AID) של NFC באופן דינמי באמצעות קריאה ל-
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>
אתם יכולים להשתמש בכלי באנטר היסטוריית סוללה בפלט של הפקודה dumpsys
כדי ליצור המחשת HTML של אירועים הקשורים להפעלה מהיומנים. בעזרת המידע הזה תוכלו להבין ולאבחן בקלות בעיות שקשורות לסוללה.
Android במקום העבודה ובמערכת החינוך
ניהול תצורה מנוהל
מערכת Android 5.0 מספקת פונקציונליות חדשה להרצת אפליקציות בסביבה ארגונית. אדמין של מכשיר יכול להתחיל תהליך הקצאה מנוהל כדי להוסיף למכשיר פרופיל מנוהל נפרד, אם למשתמש יש חשבון אישי קיים. אפליקציות שמשויכות לפרופילים מנוהלים מופיעות לצד אפליקציות לא מנוהלות במרכז האפליקציות, במסך של האפליקציות האחרונות ובהתראות.
כדי להתחיל את תהליך הקצאת המשאבים המנוהל, שולחים את הערך ACTION_PROVISION_MANAGED_PROFILE
ב-Intent
. אם הקריאה מצליחה, המערכת תפעיל את הקריאה החוזרת של onProfileProvisioningComplete()
.
לאחר מכן תוכלו להתקשר למספר setProfileEnabled()
כדי להפעיל את הפרופיל המנוהל הזה.
כברירת מחדל, רק קבוצת משנה קטנה של אפליקציות מופעלת בפרופיל המנוהל.
כדי להתקין אפליקציות נוספות בפרופיל המנוהל, צריך להפעיל את הפונקציה enableSystemApp()
.
אם אתם מפתחים אפליקציית Launcher, תוכלו להשתמש בכיתה החדשה LauncherApps
כדי לקבל רשימה של פעילויות שניתן להפעיל עבור המשתמש הנוכחי וכל הפרופילים המנוהלים המשויכים. כדי להבליט את האפליקציות המנוהלות באופן ויזואלי, אפשר לצרף תג של עבודה לקובץ ה-drawable של הסמל במרכז האפליקציות. כדי לאחזר את הסמל עם התג, צריך להתקשר ל-getUserBadgedIcon()
.
כדי להבין איך להשתמש בפונקציונליות החדשה, אפשר לעיין בדוגמה להטמעה של BasicManagedProfile
במהדורה הזו.
בעלי המכשיר
בגרסה 5.0 של Android נוספה האפשרות לפרוס אפליקציה של הבעלים של המכשיר. בעלים של מכשיר הוא סוג מיוחד של אדמין של מכשיר, שיש לו את היכולת הנוספת ליצור ולהסיר משתמשים משניים ולהגדיר הגדרות גלובליות במכשיר. אפליקציית הבעלים של המכשיר יכולה להשתמש בשיטות בכיתה DevicePolicyManager
כדי לשלוט באופן מפורט בהגדרות, באבטחה ובאפליקציות במכשירים המנוהלים.
למכשיר יכול להיות רק בעלים פעיל אחד בכל רגע נתון.
כדי לפרוס ולהפעיל בעלים של מכשיר, צריך לבצע העברת נתונים מסוג NFC מאפליקציית תכנות למכשיר בזמן שהמכשיר נמצא במצב ללא הקצאה. העברת הנתונים הזו שולחת את אותו מידע שמופיע בכוונת הקצאת ההרשאות המתוארת במאמר ניהול תצורה מנוהל.
הקפאת מסך
ב-Android 5.0 יש ממשק API חדש להצמדת מסך שמאפשר להגביל באופן זמני משתמשים כך שלא יעזבו את המשימה או יפריעו לפונקציות שלך. אפשר להשתמש באפשרות הזו, למשל, אם אתם מפתחים אפליקציה חינוכית שתומכת בדרישות של בדיקות קריטיות ב-Android, או אפליקציה למטרה יחידה או אפליקציית קיוסק. אחרי הפעלה של הצמדת מסך באפליקציה, המשתמשים לא יוכלו לראות התראות, לגשת לאפליקציות אחרות או לחזור למסך הבית, עד שהאפליקציה תצא מהמצב.
יש שתי דרכים להפעיל את הצמדת המסך:
- באופן ידני: המשתמשים יכולים להפעיל את הקפאת המסך בקטע הגדרות > אבטחה > הקפאת מסך, ולבחור את המשימות שהם רוצים להצמיד על ידי הקשה על סמל הסיכה הירוק במסך 'האחרונים'.
- באופן פרוגרמטי: כדי להפעיל באופן פרוגרמטי את הצמדת המסך, קוראים לפונקציה
startLockTask()
מהאפליקציה. אם האפליקציה ששלחה את הבקשה היא לא הבעלים של המכשיר, תוצג למשתמש בקשה לאישור. אפליקציה של בעל מכשיר יכולה להפעיל את השיטהsetLockTaskPackages()
כדי לאפשר הצמדה של אפליקציות ללא השלב של אישור המשתמש.
כשנעילה של משימות פעילה, מתרחשת ההתנהגות הבאה:
- שורת הסטטוס ריקה, והתראות ומידע על סטטוס המשתמש מוסתרים.
- הלחצנים 'דף הבית' ו'אפליקציות אחרונות' מוסתרים.
- אפליקציות אחרות לא יכולות להפעיל פעילויות חדשות.
- האפליקציה הנוכחית יכולה להתחיל פעילויות חדשות, כל עוד היא לא יוצרת משימות חדשות.
- כשבעלים של מכשיר מפעיל הצמדת מסך, המשתמש נשאר נעול
באפליקציה עד שהאפליקציה מתקשרת
ל-
stopLockTask()
. - אם האפליקציה אחרת שאינה הבעלים של המכשיר או המשתמש עצמו מפעילים את הצמדת המסך, המשתמש יכול לצאת מהצמדת המסך על ידי לחיצה ארוכה על הלחצנים 'הקודם' ו'הקודם'.
מסגרת הדפסה
עיבוד קובץ PDF כקובץ bitmap
עכשיו אפשר לעבד דפים של מסמכי PDF לתמונות של מפת סיביות (bitmap) להדפסה באמצעות המחלקה החדשה PdfRenderer
. צריך לציין 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
, צריך לבצע קריאה ל-method החדשgetWindows()
. - הכיתה החדשה
AccessibilityNodeInfo.AccessibilityAction
מאפשרת להגדיר פעולות רגילות או מותאמות אישית לביצוע עלAccessibilityNodeInfo
. הכיתה החדשהAccessibilityNodeInfo.AccessibilityAction
מחליפה את ממשקי ה-API שקשורים לפעולות, שהיו בעבר ב-AccessibilityNodeInfo
. - ב-Android 5.0 יש שליטה ברמת פירוט גבוהה יותר על סינתז של טקסט לדיבור באפליקציה. הכיתה החדשה
Voice
מאפשרת לאפליקציה להשתמש בפרופילים של קול שמשויכים למיקומים ספציפיים, לדירוג איכות וזמן אחזור ולפרמטרים ספציפיים למנוע המרת הטקסט לדיבור.
IME
קל יותר לעבור בין שפות קלט
החל מ-Android 5.0, משתמשים יכולים לעבור בקלות רבה יותר בין כל עורכי שיטות הקלט (IME) שנתמכים בפלטפורמה. ביצוע פעולת ההחלפה הייעודית (בדרך כלל נגיעה בסמל כדור הארץ במקלדת הרכה) מתבצעת באופן מחזורי בין כל רכיבי ה-IME האלה. השינוי הזה בהתנהגות מוטמע באמצעות השיטה shouldOfferSwitchingToNextInputMethod()
.
בנוסף, המסגרת בודקת עכשיו אם ה-IME הבא כולל בכלל מנגנון החלפה (וכתוצאה מכך, אם ה-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 דורש את ההרשאה הזו כדי לוודא שרק המערכת יכולה לקשר אליו.