Kullanıcılar, ses uygulamasının sesini kontrol edebilmeyi bekler. Standart davranış, ses kontrollerini (cihazdaki düğmeler veya düğmeler ya da kullanıcı arayüzündeki kaydırma çubukları) kullanma ve kulaklık gibi bir çevre birimi kullanımdayken bağlantısı kesilirse sesin aniden yüksek sesle çalmasını önleme özelliklerini içerir.
Ses kontrollerini kullanma
Kullanıcı bir oyun veya müzik uygulamasında ses tuşuna bastığında, oynatıcı şarkılar arasında duraklatılmış olsa veya mevcut oyun konumunda müzik olmasa bile ses seviyesi değişmelidir.
Android; müzik, alarm, bildirim, gelen çağrı zil sesi, sistem sesleri, arama içi ses seviyesi ve DTMF tonları için ayrı ses akışları kullanır. Bu sayede kullanıcılar her yayının sesini bağımsız olarak kontrol edebilir.
Ses düğmesine basıldığında varsayılan olarak etkin ses akışının ses seviyesi değiştirilir. Uygulamanız şu anda hiçbir şey çalmıyorsa ses tuşlarına basarak müzik ses düzeyini (veya Android 9'dan önceki sürümlerde zil ses düzeyini) ayarlayabilirsiniz.
Uygulamanız alarm saati değilse sesi AudioAttributes.USAGE_MEDIA
izniyle çalmalısınız.
Ses denetimlerinin doğru akışı ayarlamasını sağlamak için setVolumeControlStream()
AudioAttributes.getVolumeControlStream
'dan alabileceğiniz, özelliklerinizle eşleşen akış türünü göndererek setVolumeControlStream()
işlevini çağırmanız gerekir.
Kotlin
setVolumeControlStream(AudioManager.STREAM_MUSIC)
Java
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Bu çağrıyı uygulamanızın yaşam döngüsünde, genellikle medyanızı kontrol eden etkinliğin veya parçanın onResume()
metodundan yapın. Bu, hedef etkinlik veya parça görünür olduğunda ses kontrollerini STREAM_MUSIC
ile bağlar.
Akış ses düzeyini programatik olarak kontrol etme
Nadir durumlarda, ses akışının ses seviyesini programatik olarak ayarlayabilirsiniz. Örneğin, uygulamanız mevcut bir kullanıcı arayüzünün yerini aldığında. Android AudioManager
aynı türdeki tüm ses akışlarını birlikte karıştırdığı için bu yöntem önerilmez.
Bu yöntemler, akışı kullanan her uygulamanın sesini değiştirir. Aşağıdakileri kullanmaktan kaçının:
adjustStreamVolume()
adjustSuggestedStreamVolume()
adjustVolume()
setStreamVolume() setStreamVolume()
setStreamSolo()
setStreamMute()
Sabit sesli cihazlarla çalışma
Bazı cihazlarda (ör. Chromebook'lar ve Android Automotive OS arabalar) ses seviyesi kontrolleri bulunur ancak uygulamaların ses akışının seviyesini değiştirmek için daha önce açıklanan AudioManager
yöntemlerini kullanmasına izin verilmez. Bunlara sabit sesli cihazlar denir. Uygulamanızın sabit sesli bir cihazda çalışıp çalışmadığını öğrenmek için isVolumeFixed()
numaralı telefonu arayabilirsiniz.
Ses uygulamaları, çıkış seslerini aynı akışta çalan diğer uygulamalarla dengelemelidir.
Sabit sesli cihazlarda uygulama, kendi ses seviyesi denetimlerini uygun setVolume()
yöntemine bağlamalıdır:
Oyuncu | Yöntem |
---|---|
AudioTrack | AudioTrack.setVolume() |
MediaPlayer | MediaPlayer.setVolume() |
ExoPlayer | Temel AudioTrack'in ses düzeyini ayarlayan SimpleExoPlayer.setVolume() öğesini kullanın. |
Web | HTMLMediaElement öğesinin volume özelliğini ayarlayın |
Gürültü yapmayın
Kullanıcılar, Android cihazlarından ses dinlemek için çeşitli alternatiflere sahiptir. Çoğu cihazda dahili hoparlör ve kablolu kulaklıklar için kulaklık jakı bulunur. Birçok cihazda Bluetooth bağlantısı ve A2DP ses desteği de vardır.
Mikrofonlu kulaklığın fişi çekildiğinde veya Bluetooth cihazın bağlantısı kesildiğinde ses akışı otomatik olarak yerleşik hoparlöre yönlendirilir. Müzikleri yüksek sesle dinliyorsanız bu durum can sıkıcı olabilir.
Kullanıcılar genellikle, ekranda oynatma kontrolleri bulunan bir müzik çalar içeren uygulamaların bu durumda oynatmayı duraklatmasını bekler. Kontrol içermeyen oyunlar gibi diğer uygulamalar oynamaya devam eder. Kullanıcı, cihazın donanım kontrollerini kullanarak ses seviyesini ayarlayabilir.
Ses çıkışı yerleşik hoparlöre geri döndüğünde sistem bir ACTION_AUDIO_BECOMING_NOISY
intent yayınlar. Ses çalarken bu niyeti dinleyen bir BroadcastReceiver
oluşturmanız gerekir. Alıcınız aşağıdaki gibi görünmelidir:
Kotlin
private class BecomingNoisyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == AudioManager.ACTION_AUDIO_BECOMING_NOISY) { // Pause the playback } } }
Java
private class BecomingNoisyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) { // Pause the playback } } }
Oynatma işlemine başladığınızda alıcıyı kaydedin ve durdurduğunuzda kaydını silin.
Uygulamanızı bu kılavuzda açıklandığı şekilde tasarlarsanız bu çağrılar onPlay()
ve onStop()
medya oturumu geri çağırmalarında görünür.
Kotlin
private val intentFilter = IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY) private val myNoisyAudioStreamReceiver = BecomingNoisyReceiver() private val callback = object : MediaSessionCompat.Callback() { override fun onPlay() { registerReceiver(myNoisyAudioStreamReceiver, intentFilter) } override fun onStop() { unregisterReceiver(myNoisyAudioStreamReceiver) } }
Java
private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); private BecomingNoisyReceiver myNoisyAudioStreamReceiver = new BecomingNoisyReceiver(); MediaSessionCompat.Callback callback = new MediaSessionCompat.Callback() { @Override public void onPlay() { registerReceiver(myNoisyAudioStreamReceiver, intentFilter); } @Override public void onStop() { unregisterReceiver(myNoisyAudioStreamReceiver); } }