Bu kılavuzda, Wear OS'teki uygulamaların ses çalmak için nasıl bilinen Android API'lerini kullanabileceği açıklanmaktadır.
Ses cihazlarını algılama
Wear OS uygulaması, öncelikle giyilebilir cihazın uygun bir ses çıkışına sahip olup olmadığını algılamalıdır. Geliştiriciler, giyilebilir cihazlarda aşağıdaki ses çıkışlarından en az birinin bulunmasını bekleyebilir:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: Dahili hoparlörü olan cihazlardaAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: Bluetooth mikrofonlu kulaklık eşlenip bağlandığındaAudioDeviceInfo.TYPE_BLE_BROADCAST
: Bluetooth Düşük Enerji (BLE) yayın grubu cihazı eşlenip bağlandığındaAudioDeviceInfo.TYPE_BLE_HEADSET
: BDE kulaklık eşlenip 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ı numaralandırmak için getDevices()
yöntemini FEATURE_AUDIO_OUTPUT
değeriyle birlikte 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)
Uygulamanız, en iyi kullanıcı deneyimini sunmak için yalnızca Bluetooth kulaklık veya hoparlörler saate bağlıyken medya oynatmalı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 için önemine bağlı olarak, kullanıcıların uygulamanızın ses çıkışıyla nasıl etkileşim kurmasını istediğinizi seçin.
Kullanıcının medya çıkış cihazını seçmesine izin ver
Wear OS 5'ten itibaren sistem, kullanıcıların hangi cihazda medya oynatılacağını ve şu anda oynatılan medya içeriğiyle ilgili bilgilerin gösterileceğini seçmelerine 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()
yöntemi, kullanıcının medya çıkış cihazını seçmesine nasıl izin verileceğini gösterir.
Bluetooth kulaklık
Cihazda varsa her zaman kullanılabilen dahili hoparlörlerin aksine, bir Bluetooth kulaklık uygulama çalışırken eşlenebilir veya eşlemesi kaldırılabilir. Uygulamanın devam etmek için kulaklık gerektirmesi durumunda,
kullanıcı registerAudioDeviceCallback
kullanarak Bluetooth kulaklık bağladığında ve bağlantısını kestiğinde
algılamak için geri çağırma kaydı yapın:
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ğ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şlem, ACTION_BLUETOOTH_SETTINGS
ile bir amaç gönderilerek yapılabilir:
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)
Dahili hoparlörler
Wear OS cihazların çoğunda yerleşik hoparlör bulunur. Uygulamanızda ses içeren medya dışı bir kullanım alanı sunuyorsanız kullanıcıyla etkileşimi artırmak için hoparlör kullanmayı düşünebilirsiniz. Örneğin, hoparlörle donatılmış bir Wear OS cihaz, sesli bildirimle birlikte saat veya zamanlayıcı alarmını tetikleyebilir. Fitness uygulamaları ise egzersiz talimatları vermek için hoparlörü kullanabilir.
Not: Dahili hoparlörler, bu amaç için tasarlanmadığından medya içeriklerini dinlemek için en iyi deneyimi sunmaz.
Ayrıntılar için WearSpeakerSample'a bakın.
Sesi çal
Uygun bir ses çıkışı 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ış konusuna bakın. Medya akışı ve indirme gibi daha gelişmiş özelliklere daha kolay erişmek için ExoPlayer'ı kullanın. Ses odağını yönetme gibi ses uygulamalarıyla ilgili en iyi uygulamaları takip ettiğinizden emin olun.
Yerleşik hoparlörler aracılığıyla istenmeyen medya oynatmayı önleme
Medya uygulamaları, uygulamanın yerleşik kol saati hoparlörlerinde istemeden medya içeriği oynatmadığından emin olmak için aşağıdaki yönergeleri uygulayabilir. Rehberlik, uygulamanın kullandığı oynatıcıya göre farklılık gösterir.
ExoPlayer
Uygulamanızda ExoPlayer kullanılıyorsa:
ExoPlayer örneğini oluştururken setSuppressPlaybackOnUnsuitableOutput(true) işlevini çağırın:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
ExoPlayer örneğinin işleyicisi olarak WearUnsuitableOutputPlaybackSuppressionResolverListener'ı kaydederek oynatma engelleme etkinliğine tepki verin:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Horologist Media toolkit
Horologist MediaToolkit, yerleşik kol saati hoparlörlerinde istenmeyen medya oynatımını ö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ğlanmadığı sürece medya sesinin oynatılmaya başlamadığından emin olun. Medya uygulamaları için uygun çıkış cihazlarını aşağıdaki listede bulabilirsiniz:
- 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şlatmaya çalıştığında ancak harici bir ses cihazı bağlamadığında kullanıcıdan bu tür bir cihazı kol saatine bağlamasını isteyin.