השמעת אודיו בגאדג'טים לבישים

במדריך הזה מוסבר איך אפליקציות ב-Wear OS יכולות להשתמש בממשקי API מוכרים של Android כדי להפעיל אודיו.

זיהוי התקני אודיו

קודם כל, אפליקציית Wear OS צריכה לזהות אם למכשיר הלביש יש פלט אודיו מתאים. המפתחים של גאדג'טים לבישים יכולים לצפות שפלט האודיו הבא יהיה זמין לפחות:

בדוגמה הבאה, האפליקציה משתמשת 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:

  1. קוראים ל- setSuppressPlaybackOnUn matchingableOutput(true) בזמן הפיתוח של מכונת ExoPlayer:

      ExoPlayer exoplayer = ExoPlayer.Builder(context)
              .setAudioAttributes(...)
              .setSuppressPlaybackWhenUnsuitableOutput(true)
              // ...
              .build()
          
  2. כדי להגיב לאירוע של ביטול ההפעלה באמצעות רישום WearUnfitableOutputPlaybackSuppressionresolverListener בתור Listener למכונה של ExoPlayer:

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

ערכת כלים למדיה של הורולוגים

הכלי Horology MediaToolkit כבר כולל לוגיקה למניעת הפעלה של מדיה לא מכוונת ברמקולים המובנים של השעון.

נגני מדיה אחרים