Kullanıcılar, bir ses uygulamasının ses düzeyini kontrol edebilmeyi bekler. Standart davranış olarak, ses kontrollerini (cihazdaki düğmeler veya düğmeler ya da kullanıcı arayüzündeki kaydırma çubukları) kullanabilme ve kullanım sırasında kulaklık gibi bir çevre biriminin bağlantısı kesilirse aniden yüksek sesle çalınmama gibi özellikler bulunur.
Ses kontrollerini kullanma
Bir kullanıcı bir oyunda veya müzik uygulamasında ses seviyesi tuşuna bastığında, oynatıcı şarkılar arasında duraklatılmış olsa veya o anki oyun konumu için müzik hiç olmasa bile ses seviyesi değişir.
Android müzik çalmak, alarmlar, bildirimler, gelen arama zil sesi, sistem sesleri, çağrı ses düzeyi ve DTMF tonlarını çalmak için ayrı ses akışları kullanır. Bu sayede kullanıcılar, her yayının ses düzeyini bağımsız olarak kontrol edebilir.
Varsayılan olarak, ses denetimine basıldığında etkin ses akışının ses düzeyi değiştirilir. Uygulamanız şu anda hiçbir şey çalmıyorsa ses seviyesi tuşlarına basmak müzik ses düzeyini (veya Android 9'dan önceki zil ses düzeyini) ayarlar.
Uygulamanız çalar saat değilse AudioAttributes.USAGE_MEDIA
kullanım oranına göre ses çalmalısınız.
Ses seviyesi kontrollerinin doğru yayını ayarladığından emin olmak için AudioAttributes.getVolumeControlStream
'dan alabileceğiniz özelliklerinizle eşleşen akış türünde setVolumeControlStream()
öğesini çağırmalısınız.
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()
yönteminden yapın. Bu, hedef etkinlik veya parça görünür olduğunda ses kontrollerini STREAM_MUSIC
öğesine bağlar.
Akış sesini programatik olarak kontrol etme
Nadir durumlarda, ses akışının ses düzeyini 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 önerilmez.
Bu yöntemler, akışı kullanan her uygulamanın ses düzeyini değiştirir. Aşağıdakileri kullanmaktan kaçının:
adjustStreamVolume()
adjustSuggestedStreamVolume()
adjustVolume()
setStreamVolume() setStreamVolume()
setStreamSolo()
setStreamMute()
Sabit hacimli cihazlarla çalışma
Bazı cihazlarda (ör. Chromebook'lar) ses denetimleri bulunur, ancak uygulamaların ses akışı seviyesini değiştirmek için yukarıda açıklanan AudioManager
yöntemlerini kullanmasına izin verilmez. Bunlara sabit hacimli cihazlar denir. Uygulamanızın sabit hacme sahip bir cihazda çalışıp çalışmadığını isVolumeFixed()
numaralı telefonu arayarak öğrenebilirsiniz.
Ses uygulamaları, çıkış ses düzeyini aynı akışta çalan diğer
uygulamalarla dengeleyebilmelidir.
Sabit hacimli cihazlarda, uygulama kendi ses kontrollerini aşağıdaki tabloda uygun setVolume()
yöntemine bağlamalıdır:
Oyuncu | Yöntem |
---|---|
Ses parçası | AudioTrack.setVolume() |
Medya Oynatıcı | MediaPlayer.setVolume() |
ExoPlayer | Temel AudioTrack'in ses düzeyini ayarlayan SimpleExoPlayer.setVolume() özelliğini kullanın. |
Gürültü yapmayın
Kullanıcıların, Android cihazlarından ses dinlemenin birçok alternatifi vardır. Çoğu cihazda yerleşik hoparlör ve kablolu kulaklıklar için kulaklık jakı bulunur. Cihazların birçoğunda da Bluetooth bağlantısı ve A2DP ses desteği mevcuttur.
Mikrofonlu kulaklıkların fişi çekildiğinde veya Bluetooth cihazın bağlantısı kesildiğinde ses akışı otomatik olarak yerleşik hoparlöre yönlendirilir. Yüksek sesle müzik dinliyorsanız bu pek gürültülü bir sürpriz olabilir.
Bu durumda kullanıcılar genellikle ekranda oynatma kontrolleri olan bir müzik çalar içeren uygulamaların çalmayı duraklatmasını beklerler. Denetim içermeyen oyunlar gibi diğer uygulamalar oynamaya devam etmelidir. Kullanıcı, cihazın donanım kontrolleriyle ses düzeyini ayarlayabilir.
Ses çıkışı tekrar yerleşik hoparlöre geçtiğinde sistem bir ACTION_AUDIO_BECOMING_NOISY
niyeti yayınlar. Her ses çaldığınızda bu amacı dinleyen bir BroadcastReceiver
oluşturmalısınız. 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 } } }
Oynatmaya başladığınızda alıcıyı kaydedin, durdurduğunuzda kaydını iptal edin.
Uygulamanızı bu kılavuzda açıkladığımız şekilde tasarlarsanız bu çağrılar onPlay()
ve onStop()
medya oturumu geri çağırmalarında görünecektir.
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); } }