תקשורת ברקע

במדריך הזה מוסבר איך לתמוך בתרחישים לדוגמה של תקשורת עם מכשירים היקפיים כשהאפליקציה פועלת ברקע:

יש כמה אפשרויות לתמיכה בכל אחד מהתרחישים האלה. לכל אחת מהן יש יתרונות וחסרונות, והן יכולות להתאים יותר או פחות לצרכים הספציפיים שלכם.

בתרשים הבא מוצגת תצוגה פשוטה של ההנחיות שבדף הזה:

איתור מכשיר

קודם כל, האפליקציה צריכה למצוא מכשיר להתחבר אליו. כדי למצוא מכשיר BLE, אפשר להשתמש באחד מממשקי ה-API הבאים:

ברקע

אין הגבלה על השימוש בממשקי ה-API האלה כשהאפליקציה לא גלויה, אבל בשניהם תהליך האפליקציה צריך להיות פעיל. אם תהליך האפליקציה לא פועל, אפשר להשתמש בפתרונות העקיפים הבאים:

  • ב-BluetoothLeScanner: צריך להפעיל את startScan() עם אובייקט PendingIntent במקום אובייקט ScanCallback כדי לקבל התראה כשמכשיר שתואם למסנן נסרק. (דוגמה)
  • ב-CompanionDeviceManager: פועלים לפי ההנחיות במאמר Keep companion apps awake כדי להעיר את האפליקציה ולהשאיר אותה ערה בזמן שמכשיר ששויך בעבר נמצא בטווח. (דוגמה)

התחברות למכשיר

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

אחרי שיוצרים מכונה של BluetoothDevice, אפשר להתחיל בקשת חיבור למכשיר המתאים באמצעות קריאה לאחת מהשיטות של connectGatt(). הערך הבוליאני שמעבירים אל autoConnect מגדיר באיזה משני מצבי החיבור הבאים לקוח ה-GATT משתמש:

  • חיבור ישיר (autoconnect = false): ניסיון להתחבר ישירות לציוד ההיקפי, ואם הוא לא זמין, החיבור נכשל. אם החיבור מתנתק, לקוח ה-GATT לא מנסה להתחבר מחדש באופן אוטומטי.
  • חיבור אוטומטי (autoconnect = true): ניסיון להתחבר באופן אוטומטי לציוד ההיקפי בכל פעם שהוא זמין. אם הציוד ההיקפי יזם את הניתוק או שהציוד ההיקפי מחוץ לטווח, לקוח ה-GATT ינסה להתחבר מחדש באופן אוטומטי כשהציוד ההיקפי יהיה זמין.

ברקע

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

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

איך נשארים מחוברים למכשיר

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

בשני המקרים, האפשרויות הבאות זמינות:

בזמן מעבר בין אפליקציות

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

בזמן האזנה להתראות על ציוד היקפי

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

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