web-dev-qa-db-fra.com

Android: Pourquoi le constructeur de SoundPool est-il déconseillé?

Cela signifie-t-il que nous ne pouvons plus l'utiliser? Que devons-nous utiliser si l'API min est définie en dessous de 21? En outre, est-il acceptable d'ignorer l'avertissement, car les anciennes applications construites à l'aide de celui-ci fonctionnent sur les nouveaux systèmes d'exploitation?

17
Harsha

Pourquoi le constructeur SoundPool a été déprécié

L'ancien constructeur SoundPool a été déconseillé en faveur de l'utilisation de SoundPool.Builder pour construire l'objet SoundPool. ancien constructeur avait trois paramètres: maxStreams, streamType et srcQuality.

  • Le paramètre maxStreams peut toujours être défini avec le générateur . (Et si vous ne le définissez pas, la valeur par défaut est 1.)
  • Le paramètre streamType est remplacé par AudioAttributes , qui est plus descriptif que streamType. (Voir les différentes constantes de type de flux commençant ici .) Avec AudioAttributes vous pouvez spécifier l'utilisation (pourquoi vous jouez le son), le type de contenu (ce que vous jouez) et les indicateurs (comment jouer).
  • Le paramètre srcQuality était censé être là pour définir la qualité du convertisseur de fréquence d'échantillonnage. Cependant, il n'a jamais été mis en œuvre et sa définition n'a eu aucun effet.

Donc, SoundPool.Builder est meilleur que l'ancien constructeur car maxStreams n'a pas besoin d'être explicitement défini, AudioAttributes contient plus d'informations que streamType et le paramètre inutile srcQuality a été éliminé. C'est pourquoi l'ancien constructeur a été déprécié.

Utilisation du constructeur obsolète pour prendre en charge les versions antérieures à l'API 21

Vous pouvez toujours utiliser l'ancien constructeur et ignorer les avertissements si vous le souhaitez. "Obsolète" signifie qu'il fonctionne toujours mais n'est plus la façon recommandée de faire les choses.

Si vous souhaitez utiliser le nouveau constructeur tout en prenant en charge les anciennes versions, vous pouvez utiliser une instruction if pour sélectionner la version de l'API.

SoundPool mSoundPool;
int mSoundId;

//...

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
     mSoundPool = new SoundPool.Builder()
            .setMaxStreams(10)
            .build();
} else {
    mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 1);
}

mSoundId = mSoundPool.load(this, R.raw.somesound, 1);

// ...

mSoundPool.play(mSoundId, 1, 1, 1, 0, 1);

Regardez cette vidéo pour plus de détails.

31
Suragch

Utilisation SoundPool.Builder à la place. La façon dont un SoundPool est créé a été modifiée. Vous êtes encouragés à utiliser la nouvelle méthode.

3
Augusto Carmo