anahtar kelimeler: kıyafet, medya, koleksiyon_kilavuzlari
Bu kılavuzda, Wear OS'teki uygulamaların ses çalmak için bilinen Android API'lerini nasıl kullanabileceği açıklanmaktadır.
Ses sistemlerini algıla
Wear OS uygulaması öncelikle giyilebilir cihazda uygun bir ses çıkışının olup olmadığını tespit etmelidir. Geliştiriciler, giyilebilir cihazlarda aşağıdaki ses çıkışlarından en az birine rastlayabilir:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: Dahili hoparlör bulunan cihazlardaAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: Bluetooth mikrofonlu kulaklık eşlendiğinde ve bağlandığındaAudioDeviceInfo.TYPE_BLE_BROADCAST
: Bluetooth Düşük Enerji (BLE) yayın grubu cihazı eşlenip bağlandığındaAudioDeviceInfo.TYPE_BLE_HEADSET
: BDE mikrofonlu kulaklık eşlendiğinde ve bağlandığındaAudioDeviceInfo.TYPE_BLE_SPEAKER
: BDE hoparlör eşlenip bağlandığında
Aşağıdaki örnekte uygulama, tüm ses çıkışlarını belirtmek için getDevices()
yöntemini FEATURE_AUDIO_OUTPUT
değerine ek olarak kullanır.
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)
En iyi kullanıcı deneyimini sunmak için uygulamanız, medyayı yalnızca Bluetooth kulaklıklar veya hoparlörler saate bağlıyken çalmalıdır.
Ses çıkışı için tercih edilen cihazı seçme
Uygulamanızın kullanım alanına ve sesin uygulamanızın temel deneyimi açısından önemine bağlı olarak, kullanıcıların uygulamanızın ses çıkışıyla nasıl etkileşime geçmesini istediğinizi seçin.
Kullanıcının medya çıkış cihazını seçmesine izin verin
Wear OS 5'ten itibaren sistem, kullanıcıların hangi cihazda medya oynatılacağı seçmesine ve oynatılan medya içeriği hakkında bilgi göstermesine olanak tanıyan bir kullanıcı arayüzü sağlar.
Uygulamanız, Wear OS 5 veya sonraki sürümleri çalıştıran cihazlarda ses çalmayı sağlamak istediğinizde bağlı bir Bluetooth kulaklık olmadığını algılarsa kullanıcıyı doğrudan medya çıkışı değiştiriciye götürmeyi teklif edin. Medya çıkışı değiştiriciyi desteklemeyen cihazlarda, kullanıcıyı sistem ayarlarındaki Bluetooth sayfasına yönlendiren ACTION_BLUETOOTH_SETTINGS
intent işlemini çağırın.
GitHub'daki Horologist kitaplığının bir parçası olan launchOutputSelection()
yöntemi, kullanıcının medya çıkış cihazını nasıl seçebileceğini gösterir.
Bluetooth kulaklık
Cihazda varsa her zaman kullanılabilen dahili hoparlörlerin aksine, Bluetooth kulaklık bir uygulama çalışırken eşlenebilir veya eşlemesi kaldırılabilir. Uygulama, devam etmek için mikrofonlu kulaklık gerektiriyorsa kullanıcının Bluetooth mikrofonlu kulaklığa ne zaman bağlanıp bağlantısını kestiğini belirlemek için registerAudioDeviceCallback
kullanarak geri arama kaydedin:
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)
Uygulamanız, ses çıkışı sağlamak istediğiniz sırada bağlı bir Bluetooth kulaklık olmadığını algılarsa hata mesajı göstermeyin. Bunun yerine, kullanıcının bağlantı kurmasını kolaylaştırmak için kullanıcıyı doğrudan Bluetooth ayarlarına yönlendirin. Bu işlem, aşağıdakileri içeren bir intent göndererek yapılabilir: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)
Hoparlörler
Çoğu Wear OS cihazda hoparlör bulunur. Uygulamanız, ses içeren medya dışı bir kullanım alanı sunuyorsa kullanıcıyla etkileşime geçmenin ek bir boyutunu sunmak için hoparlör kullanmayı düşünün. Örneğin, hoparlörlü bir Wear OS cihaz, sesli bildirim de dahil olmak üzere bir saat veya zamanlayıcı alarmı tetikleyebilir. Fitness uygulamaları ise egzersiz talimatlarını sağlamak için hoparlörü kullanabilir.
Not: Hoparlörler, medya içeriklerini dinlemek için tasarlanmadığından bu konuda en iyi deneyimi sunmaz.
Ayrıntılar için WearSpeakerSample dosyasını inceleyin.
Sesi çal
Uygun bir ses çıkışı belirleyip seçtikten sonra Wear OS'te ses çalma işlemi mobil cihazlarda veya diğer cihazlarda olduğu gibi yürütülür. Daha fazla bilgi için MediaPlayer'a genel bakış başlıklı makaleyi inceleyin. Medya akışı ve indirme gibi daha gelişmiş özelliklere daha kolay erişmek için ExoPlayer'ı kullanın. Ses uygulamaları için Ses odağını yönetme gibi en iyi uygulamaları izlediğinizden emin olun.
Hoparlörlerde istenmeyen medya oynatılmasını önleme
Medya uygulamaları, yerleşik saat hoparlörlerinde yanlışlıkla medya içeriği oynatmadığından emin olmak için aşağıdaki yönergeleri uygulayabilir. Yönlendirme, uygulamanın kullandığı oynatıcıya göre değişiklik gösterir.
ExoPlayer
Uygulamanız ExoPlayer kullanıyorsa:
ExoPlayer örneğini oluştururken setSuppressPlaybackOnUnsuitableOutput(true) işlevini çağırın:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
WearUnsuitableOutputPlaybackSuppressionResolverListener sınıfını ExoPlayer örneğinin dinleyicisi olarak kaydederek oynatma engelleme etkinliğine tepki verin:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Horologist Medya Aracı Kiti
Horologist MediaToolkit, yerleşik kol saati hoparlörlerinde istenmeyen medya oynatmayı önlemek için zaten mantık içerir.
Diğer medya oynatıcılar
- Kulaklık veya harici hoparlör gibi uygun bir çıkış cihazı saate bağlı değilse medya ses oynatma işleminin başlatılmadığından emin olun. Medya uygulamaları için uygun çıkış cihazları hakkında bilgi edinmek üzere aşağıdaki listeye bakın:
- AudioManager, uygulamanıza harici bir ses çıkış cihazının saatle bağlantısının kesildiğini bildirirse çalmayı duraklatın.
- Kullanıcı harici bir ses cihazı bağlamadan medya oynatmayı başlatmayı denediğinde, kullanıcıdan bu tür bir cihazı kol saatine bağlamasını isteyin.