私は、API以前で21回設計されたAndroidプログラミングビデオ講義シリーズをフォローしています。したがって、次の方法でSoundPool変数を作成するように指示されます。
_SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
//SoundPool(int maxStreams, int streamType, int srcQuality)
_
ただし、このSoundPool for API21も使用したいと思います。だから、私はこれをやっています:
_if((Android.os.Build.VERSION.SDK_INT) == 21){
sp21 = new SoundPool.Builder();
sp21.setMaxStreams(5);
sp = sp21.build();
}
else{
sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
}
_
sp21はAPI21のBuilder
タイプの変数であり、spはSoundPool
タイプです。
これは、API21を備えたAVDとAPI19を備えた実際のデバイスで非常にうまく機能します(API 21を備えた実際のデバイスで試したことはありませんが、うまくいくと思います)。ここで、sp = sp21.build();
の前のifブロックでstreamType
を_USAGE_MEDIA
_に設定します。だから私はタイプします:
_sp21.setAudioAttributes(AudioAttributes.USAGE_MEDIA);
_
しかし、Lintはそれを赤でマークし、次のように述べています。
タイプSoundPool.BuilderのメソッドsetAudioAttributes(AudioAttributes)は、引数(int)には適用できません。
USAGE_MEDIAに設定しなくても、デフォルトで同じに設定されることを知っています。しかし、USAGE_ALARMのような他の何かに設定する必要がある場合は、将来の参照を求めています。
どうすればよいですか?
助けてください!
オーディオ属性 、 SoundPool 、 SoundPool.builder および AudioManager を参照しました。
AudioAttributesインスタンスは、そのビルダーであるAudioAttributes.Builderを介して構築されます。
以下のように使用できます。
sp21.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
参照: https://developer.Android.com/reference/Android/media/AudioAttributes.html
ここに追加するものがあります。私はゲームアプリでSoundPoolを使用して、小さくて単純なoggオーディオファイルを再生していました。 API 21を使用するエミュレーターでも正常に機能していました。今日、SoundPool.Builder()を使用するように変更することにしました。
AndroidのSoundPool.Builderドキュメントを見ました。そこに書いてあります
public static class
SoundPool.Builder
extends Object
Java.lang.Object
↳ Android.media.SoundPool.Builder
Class Overview
Builder class for SoundPool objects.
「SoundPoolオブジェクトのビルダークラス」という行に注意してください。したがって、SoundPool.Builder()はSoundPoolオブジェクトを作成します。 SoundPool()は、SoundPoolオブジェクトも作成します。だからこれは私がしたことです。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
AudioAttributes audioAttrib = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
mSound = new SoundPool.Builder().setAudioAttributes(audioAttrib).setMaxStreams(6).build();
}
else {
mSound = new SoundPool(6, AudioManager.STREAM_MUSIC, 0);
}
mSoundは次のように宣言されています
private SoundPool mSound;
残りのコード(サウンドのロード、再生、停止、リリース)は、以前とまったく同じです。そしてそれはAPI21以前のバージョンで動作しています
これが皆さんのお役に立てば幸いです