Bu kılavuzda, Wear OS uygulamalarında ses çalmak için tanıdık Android API'lerini nasıl kullanabileceğiniz açıklanmaktadır.
Ses cihazlarını algılama
Wear OS uygulaması, öncelikle giyilebilir cihazda uygun bir ses çıkışı olup olmadığını algılamalıdır. Giyilebilir cihazlarda genellikle aşağıdaki ses çıkışlarından en az biri bulunur:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: Dahili hoparlörü olan cihazlarda.AudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: Bluetooth mikrofonlu kulaklık eşlenip bağlandığında.AudioDeviceInfo.TYPE_BLE_BROADCAST
: Bluetooth Düşük Enerji (BLE) yayın grubu cihazı eşlenip bağlandığında.AudioDeviceInfo.TYPE_BLE_HEADSET
: BLE kulaklık eşlenip bağlandığında.AudioDeviceInfo.TYPE_BLE_SPEAKER
: BDE hoparlör eşlenip bağlandığında.
Aşağıdaki örnekte, bir ses çıkışı türünün kullanılabilir olup olmadığını kontrol etmek için getDevices()
yöntemi FEATURE_AUDIO_OUTPUT
değeriyle birlikte kullanılır.
private val audioManager: AudioManager by lazy { getSystemService(AUDIO_SERVICE) as AudioManager } 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 } }
Ardından, bu yöntemi kullanarak bir ses çıkışı türünün kullanılabilir olup olmadığını kontrol edebilirsiniz.
val hasSpeaker = audioOutputAvailable(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) val hasBluetoothHeadset = audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) val hasBLEBroadcast = audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) val hasBLEHeadset = audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) val hasBLESpeaker = audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)
En iyi kullanıcı deneyimini sunmak için yalnızca Bluetooth kulaklıklar veya hoparlörler saate bağlıyken medya oynatın.
Ses çıkışı için tercih edilen cihazı seçme
Uygulamanızın kullanım alanına ve sesin temel deneyim açısından önemine bağlı olarak, kullanıcıların uygulamanızın ses çıkışıyla nasıl etkileşim kuracağını seçin.
Kullanıcının medya çıkış cihazını seçmesine izin ver
Wear OS 5'ten itibaren sistem, kullanıcıların medyayı hangi cihazda oynatacağını seçmesine ve şu anda oynatılan medya içeriği hakkında bilgi göstermesine olanak tanıyan bir kullanıcı arayüzü sunar.
Uygulamanız, Wear OS 5 veya sonraki sürümlerin yüklü olduğu cihazlarda ses çalma özelliği sunmak istediğinizde Bluetooth kulaklığın bağlı olmadığını algılarsa kullanıcıyı doğrudan medya çıkışı değiştiriciye yönlendirmeyi teklif edin. Medya çıkışı değiştiriciyi desteklemeyen cihazlarda, kullanıcıyı sistem ayarlarındaki Bluetooth sayfasına yönlendiren ACTION_BLUETOOTH_SETTINGS
amacını çağırın.
GitHub'daki Horologist kitaplığının bir parçası olan launchOutputSelection()
method, kullanıcıların medya çıkış cihazlarını nasıl seçeceklerini gösterir.
Bluetooth kulaklık
Cihazda varsa her zaman kullanılabilen dahili hoparlörlerin aksine, Bluetooth kulaklıklar bir uygulama çalışırken eşlenebilir veya eşlemesi kaldırılabilir. Uygulamanızın devam etmesi için kulaklık gerekiyorsa kullanıcı registerAudioDeviceCallback
kullanarak Bluetooth kulaklık bağladığında ve bağlantısını kestiğinde bunu algılamak için geri çağırma kaydı yapın:
val audioDeviceCallback = 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. } } } audioManager.registerAudioDeviceCallback(audioDeviceCallback, /*handler=*/ null)
Uygulamanız, ses çıkışı sağlamak istediğinizde Bluetooth kulaklığın bağlı olmadığını algılarsa hata mesajı göstermeyin. Bunun yerine, kullanıcının bağlantı kurmasını kolaylaştırmak için onu doğrudan Bluetooth ayarlarına yönlendirmeyi teklif edin. Bu işlemi, ACTION_BLUETOOTH_SETTINGS
ile bir amaç göndererek yapabilirsiniz:
fun Context.launchBluetoothSettings(closeOnConnect: Boolean = true) { 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) if (closeOnConnect) { putExtra("EXTRA_CLOSE_ON_CONNECT", true) } putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", FILTER_TYPE_AUDIO) } startActivity(intent) } internal const val FILTER_TYPE_AUDIO = 1
Dahili hoparlörler
Wear OS cihazların çoğunda yerleşik hoparlör bulunur. Uygulamanızda ses kullanılan medya dışı bir kullanım alanı varsa ek bir etkileşim boyutu sunmak için hoparlör kullanmayı düşünebilirsiniz. Örneğin, hoparlörle donatılmış bir Wear OS cihaz, sesli bildirimle saat veya zamanlayıcı alarmını tetikleyebilir. Fitness uygulamaları ise egzersiz talimatları vermek için hoparlörü kullanabilir.
Ayrıntılar için WearSpeakerSample'a bakın.
Sesi çal
Uygun bir ses çıkışını algılayıp seçtikten sonra Wear OS'te ses çalma işlemi, mobil cihazlarda veya diğer cihazlarda olduğu gibidir. Daha fazla bilgi için MediaPlayer'a genel bakış başlıklı makaleyi inceleyin. Gelişmiş özelliklere (ör. medya yayınlama ve indirme) daha kolay erişmek için ExoPlayer'ı kullanın. Ses uygulamalarıyla ilgili en iyi uygulamaları (ör. ses odağını yönetme) uygulayın.
Yerleşik hoparlörler aracılığıyla istenmeyen medya oynatmayı önleme
Medya uygulamaları, uygulamanın yerleşik kol saati hoparlörlerinde istemeden medya oynatmasını önlemek için bu kılavuzdan yararlanabilir. Rehberlik, uygulamanızın kullandığı oynatıcıya göre değişir.
ExoPlayer
Uygulamanızda ExoPlayer kullanılıyorsa:
- ExoPlayer örneğini oluştururken
setSuppressPlaybackOnUnsuitableOutput(true)
yöntemini çağırın:
val exoPlayer = ExoPlayer.Builder(context) .setAudioAttributes(AudioAttributes.DEFAULT, true) .setSuppressPlaybackOnUnsuitableOutput(true) .build()
- ExoPlayer örneğinin işleyicisi olarak
WearUnsuitableOutputPlaybackSuppressionResolverListener
listener öğesini kaydederek oynatma engelleme etkinliğine yanıt verin:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Horologist Media toolkit
Horologist MediaToolkit, yerleşik kol saati hoparlörlerinde istenmeyen medya oynatımını önleyecek mantığı zaten içerir.
Diğer medya oynatıcılar
- Medya sesinin yalnızca uygun bir çıkış cihazı (ör. kulaklık veya harici hoparlörler) kol saatine bağlandığında oynatılmaya başladığından emin olun. Aşağıdaki listede, medya uygulamaları için uygun çıkış cihazları gösterilmektedir:
- AudioManager, uygulamanıza harici bir ses çıkışı cihazının saatle bağlantısının kesildiğini bildirdiğinde oynatmayı duraklatın.
- Kullanıcı medya oynatmayı başlatmayı denediğinde ancak harici bir ses cihazı bağlamadığında, cihazı kol saatine bağlamasını isteyin.