במדריך הזה מוסבר איך אפליקציות ב-Wear OS יכולות להשתמש בממשקי Android API מוכרים כדי להפעיל אודיו.
זיהוי מכשירי אודיו
אפליקציית Wear OS צריכה קודם לזהות אם למכשיר הלביש יש פלט אודיו מתאים. מפתחים יכולים לצפות שלמכשירים לבישים יהיה לפחות אחד מהפלט אודיו הבאים:
-
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: במכשירים עם רמקול מובנה -
AudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: כשאוזניות Bluetooth מוצמדות ומחוברות AudioDeviceInfo.TYPE_BLE_BROADCAST
: כשמכשיר Bluetooth Low Energy (BLE) של קבוצת שידור משויך ומחובר-
AudioDeviceInfo.TYPE_BLE_HEADSET
: כשמבצעים התאמה וחיבור של אוזניות BLE -
AudioDeviceInfo.TYPE_BLE_SPEAKER
: כשמבצעים התאמה ומחברים רמקול BLE
בדוגמה הבאה, האפליקציה משתמשת בשיטה getDevices()
בשילוב עם הערך של FEATURE_AUDIO_OUTPUT
כדי למנות את כל פלט האודיו.
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); fun audioOutputAvailable(type: Int): Boolean { if (!packageManager.hasSystemFeature(PackageManager.FEATURE_AUDIO_OUTPUT)) { return false } return audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS).any { it.type == type } } // True if the device has a speaker audioOutputAvailable(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) // True if a Bluetooth headset is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) // True if a BLE broadcast group device is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) // True if a BLE headset is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) // True if a BLE speaker is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)
כדי לספק את חוויית המשתמש הכי טובה, האפליקציה צריכה להפעיל מדיה רק כשאוזניות או רמקולים של Bluetooth מחוברים לשעון.
בחירת המכשיר המועדף להשמעת אודיו
בהתאם לתרחיש השימוש באפליקציה ולחשיבות של האודיו לחוויית המשתמש העיקרית באפליקציה, בוחרים איך רוצים שהמשתמשים יפעלו עם פלט האודיו של האפליקציה.
המשתמש יכול לבחור מכשיר להצגת פלט מדיה
החל מ-Wear OS 5, המערכת מספקת ממשק משתמש שמאפשר למשתמשים לבחור באיזה מכשיר להפעיל מדיה ולהציג מידע על תוכן המדיה שמופעל כרגע.
אם האפליקציה מזהה שאין אוזניות Bluetooth מחוברות כשרוצים להפעיל השמעת אודיו במכשירים עם Wear OS 5 ואילך, היא מציעה להעביר את המשתמש ישירות למרכז השליטה להחלפת פלט מדיה. במכשירים שלא תומכים במעבר בין מקורות הפלט של המדיה, מפעילים את פעולת הכוונה ACTION_BLUETOOTH_SETTINGS
, שמעבירה את המשתמש לדף ה-Bluetooth בהגדרות המערכת.
השיטה launchOutputSelection()
, שהיא חלק מהספרייה Horologist ב-GitHub, מדגימה איך לאפשר למשתמש לבחור את מכשיר פלט המדיה שלו.
אוזניית Bluetooth
בניגוד לרמקולים מובנים, שתמיד זמינים אם הם קיימים במכשיר, אפשר להתאים אוזניות Bluetooth או לבטל את ההתאמה שלהן בזמן שאפליקציה פועלת. אם האפליקציה דורשת אוזניות כדי להמשיך,
צריך לרשום קריאה חוזרת כדי לזהות מתי
המשתמש מחבר ומנתק אוזניות Bluetooth באמצעות
registerAudioDeviceCallback
:
audioManager.registerAudioDeviceCallback(object : AudioDeviceCallback() { override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesAdded(addedDevices) if (audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)) { // A Bluetooth or BLE device is connected and available for playback. } } override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesRemoved(removedDevices) if (!(audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER))) { // No Bluetooth or BLE devices are connected anymore. } } }, null)
אם האפליקציה מזהה שאין אוזניות Bluetooth מחוברות כשרוצים לספק פלט אודיו, לא מוצגת הודעת שגיאה. במקום זאת, כדאי להציע למשתמש לעבור ישירות להגדרות ה-Bluetooth כדי להקל עליו להתחבר. כדי לעשות זאת, שולחים כוונת משתמש עם התג ACTION_BLUETOOTH_SETTINGS
:
val intent = with (Intent(Settings.ACTION_BLUETOOTH_SETTINGS)) { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) putExtra("EXTRA_CONNECTION_ONLY", true) putExtra("EXTRA_CLOSE_ON_CONNECT", true) putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 1) } startActivity(intent)
רמקולים מובנים
לרוב מכשירי Wear OS יש רמקולים מובנים. אם האפליקציה שלכם מציעה תרחיש שימוש שאינו קשור למדיה וכולל צליל, כדאי להשתמש ברמקולים כדי להציע למשתמשים מימד נוסף של אינטראקציה. לדוגמה, שעון או טיימר עם רמקול במכשיר Wear OS יכולים להפעיל התראה קולית, ואפליקציות כושר יכולות להשתמש ברמקול כדי לספק הוראות לתרגילים.
הערה: רמקולים מובנים לא מספקים את חוויית ההאזנה הטובה ביותר לתוכן מדיה, כי הם לא מיועדים למטרה הזו.
פרטים נוספים זמינים במאמר WearSpeakerSample.
הפעלת האודיו
אחרי שמזהים ובוחרים פלט שמע מתאים, תהליך השמעת האודיו ב-Wear OS זהה לתהליך במכשירים ניידים או במכשירים אחרים. מידע נוסף זמין במאמר סקירה כללית על MediaPlayer. כדי לגשת בקלות לתכונות מתקדמות יותר, כמו סטרימינג והורדה של מדיה, אפשר להשתמש ב-ExoPlayer. חשוב לפעול לפי השיטות המומלצות לאפליקציות אודיו, כמו ניהול של מיקוד האודיו.
מניעת הפעלה לא מכוונת של מדיה דרך הרמקולים המובנים
אפליקציות מדיה יכולות לפעול לפי ההנחיות הבאות כדי לוודא שהאפליקציה לא תפעיל בטעות תוכן מדיה ברמקולים המובנים של השעון. ההנחיות שונות בהתאם לנגן שבו האפליקציה משתמשת.
ExoPlayer
אם האפליקציה משתמשת ב-ExoPlayer:
מתקשרים אל setSuppressPlaybackOnUnsuitableOutput(true) בזמן בניית מופע ExoPlayer:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
כדי להגיב לאירוע של השהיית ההפעלה, צריך לרשום את WearUnsuitableOutputPlaybackSuppressionResolverListener כ-listener של מופע ExoPlayer:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
ערכת כלים למדיה של שענים
התוסף Horologist MediaToolkit כבר מכיל לוגיקה שמונעת הפעלה לא מכוונת של מדיה ברמקולים המובנים של השעון.
נגני מדיה אחרים
- חשוב לוודא שהפעלת האודיו של המדיה לא מתחילה אלא אם מחוברות לשעון אוזניות או רמקולים חיצוניים. ברשימה הבאה מפורטים מכשירי הפלט המתאימים לאפליקציות מדיה:
- השהיית ההפעלה אם AudioManager מודיע לאפליקציה שמכשיר פלט אודיו חיצוני התנתק מהשעון.
- כשמשתמש מנסה להתחיל הפעלת מדיה אבל לא חיבר מכשיר אודיו חיצוני, מוצגת לו בקשה לחבר מכשיר כזה לשעון.