Bu kılavuzda, Wear OS'teki uygulamaların ses çalmak için bilinen Android API'lerini nasıl 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 olmasını bekleyebilirler:
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: yerleşik hoparlörü olan cihazlardaAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: Bir Bluetooth mikrofonlu kulaklık eşlenip bağlandığındaAudioDeviceInfo.TYPE_BLE_BROADCAST
: Bluetooth Düşük Enerji (BDE) yayın grubu cihazı eşlenip bağlandığındaAudioDeviceInfo.TYPE_BLE_HEADSET
: BDE mikrofonlu 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 FEATURE_AUDIO_OUTPUT
değeriyle birlikte getDevices()
yöntemini kullanmaktadı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ın en iyi kullanıcı deneyimini sunmak için medyayı yalnızca Bluetooth kulaklıklar veya hoparlörler saate bağlıyken oynattığından emin olun.
Ses çıkışı için tercih edilen cihazı seçin
Uygulamanızın kullanım alanına ve uygulamanızın temel deneyimi için sesin önemine bağlı olarak, kullanıcıların uygulamanızın ses çıkışıyla nasıl etkileşim kurmasını istediğinizi seçin.
Bluetooth kulaklık
Cihazda her zaman kullanılabilen yerleşik hoparlörlerin aksine, bir uygulama çalışırken Bluetooth kulaklık eşlenebilir veya eşlemesi kaldırılabilir. Uygulamanın devam etmesi için mikrofonlu kulaklık gerekiyorsa
kullanıcının registerAudioDeviceCallback
kullanarak Bluetooth mikrofonlu kulaklığını bağladığını ve bağlantısını kestiğini algılamak için 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ğinizde bağlı bir Bluetooth mikrofonlu kulaklık olmadığını algılarsa hata mesajı göstermeyin. Bunun yerine, bağlanmasını kolaylaştırmak için
kullanıcıyı doğrudan Bluetooth ayarlarına yönlendirmeyi teklif edin. Bunu yapmak için ACTION_BLUETOOTH_SETTINGS
ile bir amaç gönderebilirsiniz:
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
Wear OS cihazların çoğunda hoparlör vardır. Uygulamanız, medya dışında ses içeren bir kullanım alanı sunuyorsa kullanıcıya ek bir etkileşim boyutu sunmak için hoparlörleri kullanabilirsiniz. Örneğin, hoparlör içeren bir Wear OS cihaz sesli bildirimle birlikte bir saat veya zamanlayıcı alarmı tetikleyebilir ve fitness uygulamaları egzersiz talimatları sağlamak için hoparlörü kullanabilir.
Not: Konuşmacılar bu amaç için tasarlanmadığından medya içeriğini dinleme konusunda en iyi deneyimi sunmaz.
Ayrıntılar için WearSpeakerSample'a bakın.
Sesi çal
Uygun bir ses çıkışı algılayıp seçtiğinizde, Wear OS'te ses çalma işlemi mobil cihazlardaki veya diğer cihazlardakiyle aynıdır. 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 uygulamaları için Ses odağını yönetme gibi en iyi uygulamaları izlediğinizden emin olun.
Hoparlörlerden istenmeyen medya oynatmayı önleme
Medya uygulamaları, medya içeriğini yerleşik saat hoparlörlerinde yanlışlıkla oynatmadığından emin olmak için aşağıdaki yönergeleri uygulayabilir. Kılavuz, uygulamanın hangi oynatıcıyı kullandığına göre değişir.
ExoPlayer
Uygulamanız ExoPlayer kullanıyorsa:
ExoPlayer örneğini oluştururken setSuppressPlaybackOnUnsuitableExit(true) yöntemini çağırın:
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
ExoPlayer örneğinin işleyicisi olarak WearUnsuitableExitPlaybackSuppressionresolverListener öğesini kaydederek oynatma engelleme etkinliğine tepki verin:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Horolog Medya araç seti
Horologist MediaToolkit, yerleşik saat hoparlörlerinde istenmeyen medyaların oynatılmasını önleyen bir mantığa zaten sahip.
Diğer medya oynatıcılar
- Mikrofonlu kulaklık veya harici hoparlör grubu gibi uygun bir çıkış cihazı saatinize bağlı olmadığı sürece medya sesi çalma işleminin başlamadığından emin olun. Medya uygulamaları için uygun çıkış cihazları için 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ı medya oynatmayı başlatmayı denediğinde ancak harici bir ses cihazı bağlamadığında, kullanıcıdan böyle bir cihazı kol saatine bağlamasını isteyin.