java - موضوع - مشروع برمجة الروبوت
الروبوت: لماذا يتم إهمال منشئ سوندبول؟ (2)
هل هذا يعني أننا لا نستطيع استخدامه بعد الآن؟ ماذا يجب أن نستخدم إذا تم تعيين أبي دقيقة أدناه 21؟ أيضا، هل من الخطأ تجاهل التحذير كما التطبيقات القديمة بنيت استخدامه على أنظمة التشغيل الجديدة؟
استخدام SoundPool.Builder
بدلا من ذلك. تم تغيير طريقة إنشاء سوندبول. يتم تشجيعك على استخدام الطريقة الجديدة.
لماذا تم إهمال منشئ سوندبول
تم إهمال منشئ SoundPool
القديم لصالح استخدام SoundPool.Builder
لبناء كائن SoundPool
. كان لدى المنشئ القديم ثلاث معلمات: maxStreams
، streamType
، و srcQuality
.
- لا يزال يمكن تعيين المعلمة
maxStreams
مع منشئ . (وإذا لم تقم بتعيينه، فإنه الافتراضي إلى 1.) - يتم استبدال المعلمة
streamType
بواسطةAudioAttributes
، وهو أكثر وصفية منstreamType
. (انظر الثوابت نوع تيار مختلفة ابتداء من هنا .) معAudioAttributes
يمكنك تحديد استخدام (لماذا كنت تلعب الصوت)، ونوع المحتوى (ما كنت تلعب)، والأعلام (كيفية تشغيله). - وكان من المفترض أن
srcQuality
معلمةsrcQuality
هناك لتعيين نوعية محول معدل العينة. ومع ذلك، لم ينفذ أبدا ووضع لها أي تأثير.
وبالتالي، SoundPool.Builder
هو أفضل من منشئ القديم لأن maxStreams
لا تحتاج إلى أن يتم تعيين صراحة، AudioAttributes
يحتوي على مزيد من المعلومات من streamType
، وتم القضاء على srcQuality
المعلمة عديمة الفائدة. لهذا السبب تم إهمال المنشئ القديم.
استخدام كونستروكتور مهملة لدعم الإصدارات قبل أبي 21
قد لا تزال تستخدم منشئ القديم وتجاهل التحذيرات إذا أردت. "مهملة" يعني أنها لا تزال تعمل ولكنها لم تعد الطريقة الموصى بها للقيام بهذه الأمور.
إذا كنت ترغب في الاستفادة من منشئ جديد في حين لا تزال تدعم الإصدارات القديمة يمكنك استخدام بيان إف لتحديد إصدار أبي.
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);
شاهد هذا الفيديو للحصول على مزيد من التفاصيل.