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

Kullanıcılar, ses uygulamasının ses düzeyini kontrol edebilmeyi bekler. Standart davranış ses kontrollerini (ekrandaki düğmeler veya düğmeler kontrol edin. kulaklık gibi çevre biriminin bağlantısı kullanımdayken kesilir.

Ses kontrollerini kullanma

Kullanıcı bir oyunda veya müzik uygulamasında ses seviyesi tuşuna bastığında ses düzeyi müzik olmasa bile, oynatıcı şarkılar arasında duraklatılmış olsa bile o anki oyun konumu.

Android müzik çalmak, alarmlar çalmak, bildirimler, gelen arama zil sesi, sistem sesleri, çağrı ses düzeyi ve DTMF oluşturmak için kullanabilirsiniz. Bu sayede kullanıcılar, her akışın ses düzeyini bağımsız olarak kontrol edebilir.

Varsayılan olarak, ses denetimine basıldığında etkin sesin düzeyi değiştirilir akış şeklinde gösterilir. Uygulamanız şu anda hiçbir şey oynatmıyorsa ses seviyesi tuşlarına basın müziğin ses düzeyini (veya Android 9'dan önce zil sesini) ayarlar.

Uygulamanız çalar saat değilse sesi kullanımla birlikte çalmalısınız AudioAttributes.USAGE_MEDIA

Ses denetimlerinin doğru akışı sağlamak için setVolumeControlStream(). Alabileceğiniz özelliklerle eşleşen akış türünü iletme AudioAttributes.getVolumeControlStream.

Kotlin

setVolumeControlStream(AudioManager.STREAM_MUSIC)

Java

setVolumeControlStream(AudioManager.STREAM_MUSIC);

Uygulamanızın yaşam döngüsünde bu çağrıyı genellikle onResume() üzerinden yapın öğesinin yöntemini veya parçasını seçmeniz gerekir. Bu, ses düzeyi, hedef etkinlik veya parça olduğunda STREAM_MUSIC işlemini kontrol eder görünür.

Akış hacmini programatik olarak kontrol etme

Nadir durumlarda, ses akışının ses düzeyini programatik olarak ayarlayabilirsiniz. Örneğin, Örneğin, uygulamanız mevcut bir kullanıcı arayüzünün yerini aldığında. Bu önerilmez çünkü Android AudioManager, aynı türdeki tüm ses akışlarını bir araya getirir. Bu yöntemler, akışı kullanan her uygulamanın ses düzeyini değiştirir. Şunlardan kaçının: şekilde tanımlar:

Sabit hacimli cihazlarla çalışma

Bazı cihazlarda (ör. Chromebook'lar) ses kontrolleri bulunur, ancak uygulamaların AudioManager kullanmasına izin verilmez. yöntemleri kullanabilirsiniz. Bunlara Sabit hacimli cihazlar. Böylece, projenizin Uygulama, isVolumeFixed() aranarak sabit hacimli bir cihazda çalışıyor.

Ses uygulaması, dengeyi koruma becerisi sağlamalıdır. aynı akışta oynatabilecek diğer uygulamalarla eşleşebilir. Sabit ses seviyesi cihazlarda uygulama, kendi ses kontrollerini uygun setVolume() yöntemini kullanın:

Oyuncu Yöntem
Ses Parçası AudioTrack.setVolume()
Medya Oynatıcı MediaPlayer.setVolume()
ExoPlayer Alttaki Ses Parçası'nın ses düzeyini ayarlayan SimpleExoPlayer.setVolume() özelliğini kullanın.

Gürültüyü önleyin

Konukların sesi dinlemek için kullandığı çeşitli alternatifler var. kullanıyor. Çoğu cihazda yerleşik hoparlör, kulaklık jakı ve mikrofonlu kulaklıkların çoğunda Bluetooth bağlantısı ve A2DP sesi.

Mikrofonlu kulaklık çıkarıldığında veya Bluetooth cihazın bağlantısı kaldırıldığında ses akışı yerleşik hoparlöre otomatik olarak yeniden yönlendirilir. Yüksek sesle müzik dinliyorsanız bu gürültülü bir sürpriz olabilir.

Kullanıcılar genellikle ekranda oynatma özelliğine sahip müzik çalar içeren uygulamaları bekler oynatmayı duraklatır. Şunu yapmayan oyunlar gibi diğer uygulamalar: oynatmaya devam etmesi gerekir. Kullanıcı ses düzeyini kontrol edebilirsiniz.

Ses çıkışı tekrar yerleşik hoparlöre geçtiğinde sistem bir ACTION_AUDIO_BECOMING_NOISY yayınlar isteyebilirsiniz. BroadcastReceiver oluşturmanız gerekir bu amacı dinler. Alıcınız şu şekilde 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 ve durdurduğunuzda kaydını silin. Uygulamanızı bu kılavuzda açıklandığı gibi tasarlarsanız bu çağrılar onPlay() ve onStop() medya oturumu geri çağırmalarında.

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