Ses çıkışındaki değişiklikleri işleme

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:

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);
  }
}