במדריך הזה מוסבר איך אפליקציות ב-Wear OS יכולות להשתמש בממשקי API מוכרים של Android כדי להפעיל אודיו.
זיהוי התקני אודיו
קודם כל, אפליקציית Wear OS צריכה לזהות אם למכשיר הלביש יש פלט אודיו מתאים. המפתחים של גאדג'טים לבישים יכולים לצפות שפלט האודיו הבא יהיה זמין לפחות:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: במכשירים עם רמקול מובנהAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: כשאוזניות Bluetooth מותאמות ומחוברותAudioDeviceInfo.TYPE_BLE_BROADCAST
: כשמכשיר של קבוצת שידור עם צריכת אנרגיה נמוכה (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 ואילך, יש להציע לבצע
את המשתמש ישירות למתג פלט המדיה. במכשירים שלא תומכים ב-
מתג להחלפת פלט מדיה, הפעלת Intent ACTION_BLUETOOTH_SETTINGS
פעולה, שמעבירה את המשתמש לדף ה-Bluetooth בהגדרות המערכת.
השיטה launchOutputSelection()
, חלק מספריית הורולוג
ב-GitHub, תראו איך לאפשר למשתמשים לבחור את המכשיר שלהם לפלט מדיה.
אוזניית Bluetooth
בניגוד לרמקולים מובנים, שתמיד זמינים אם יש במכשיר, אוזניות Bluetooth
אפשר להתאים או לבטל את ההתאמה בזמן שאפליקציה פועלת. אם האפליקציה דורשת אוזניות כדי להמשיך,
רישום קריאה חוזרת (callback) כדי לזהות מתי
המשתמש מחבר ומנתק אוזניות 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
כדי שיהיה להם קל יותר ליצור קשר. כדי לעשות את זה, שולחים אובייקט עם Intent
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:
קוראים ל- setSuppressPlaybackOnUn matchingableOutput(true) בזמן הפיתוח של מכונת ExoPlayer:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
כדי להגיב לאירוע של ביטול ההפעלה באמצעות רישום WearUnfitableOutputPlaybackSuppressionresolverListener בתור Listener למכונה של ExoPlayer:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
ערכת כלים למדיה של הורולוגים
הכלי Horology MediaToolkit כבר כולל לוגיקה למניעת הפעלה של מדיה לא מכוונת ברמקולים המובנים של השעון.
נגני מדיה אחרים
- חשוב לוודא שהפעלת האודיו של המדיה לא מתחילה אלא אם מחובר לשעון מכשיר פלט מתאים, כמו אוזניות או רמקולים חיצוניים. ברשימה הבאה מפורטים מכשירי פלט מתאימים לאפליקציות מדיה:
- להשהות את ההפעלה אם AudioManager מודיע לאפליקציה שמכשיר חיצוני של פלט אודיו מתנתק מהשעון.
- אם המשתמש מנסה להתחיל הפעלה של מדיה אבל לא חיבר התקן אודיו חיצוני, אפשר לבקש מהמשתמש לחבר מכשיר כזה לשעון שלו.