Media Playback with MediaSessionCompat (Android Development Patterns Ep 4)

Media Playback with MediaSessionCompat (Android Development Patterns Ep 4)



إيان لايك: لا يجب على أفعال
مثل توقيف الموسيقى أن تكون بعيدة جدا،
إذا اقتضى الأمر ذلك. وقد وفر أندرويد العديد من الطرق للقيام بهذا
مثل ضوابط إقفال الشاشة، ضوابط الوسائط الخاصة بالإشعارات
،أندرويد وير، وحتى"Android Auto"،على سبيل المثال. فكيف يعمل التطبيق الصوتي الخاص بك
مع كل هذه الجودة؟ هذا سهل مع MediaSessionCombat API وحيد متوفرعبر
مكتبة المساعدة لأندرويد والتي تقوم بمعظم أعمال الدمج مع أندرويد عوضا عنك. أنا إيان لايك، و سأتطرق إلى ماهية
MediaSessionCombat , كيف يمكنك البدء في جعل
Metadata وسائطك وضوابطك في كل مكان. فكر في الMedaiSession كواجهة عامة لإعادة تشغيل وسائطك. لايهم إن شغلت،ملفا صوتيا،و شريطا،
أو حتى عن بعد من خلال غوغل كاست،إن لم تخبر
النظام بما تقوم به، فإنه لا يستطيع مساعدتك. وهو يعطيك طرقا عديدة لمساعدتك، عن طريق نشر Metadata
مثل صورة الالبوم أو اسم فنان وتخبره ماهي ضوابط الوسيط مثل التشغيل و التوقيف التي تدعمها. لكنني اتحدث بسرعة. فلنقم بخلق عنصر
MediaSessionCombat لكي نبدأ. للأسف،في نسخ الأندرويد ما قبل Lollipop كان هذا يتطلب خطوة مبدئية، بخلق ما نسميه مستقبل زر الوسيط. وهو ما يلتقط ضوابط الوسائط من أشياء مثل سماعات البلوتوث
و أندرويد وير، وتوصلها إلى تطبيقك على أجهزة
أقل من أندرويد5.0. فهو مستقبل إرسال بسيط، تسجل في ملفك هكذا، وتترجم الحدث المهم الذي تتوصل به إلى أفعال في تطبيقك. بصفة عامة،تفويض ضوابط التشغيل و الإيقاف إلى الخدمة يجعلها تتحكم في خلفية تشغيل وسيطك. اطلع على وثائق تدريبنا مثلا. حسنا،وأخيرا،MediaSessionCombat ستحتاج إلى سياق: أي
سلسلة لتكون بمثابة علامة التصحيح و اسم المكون لمستقبل زر وسيطك. الnull الاخير،هو Intent منتظرة. يمكنك استعماله عوضا
عن اسم المكون في أندرويد 4.3. ويتم خلقه لنا إذا تجاوزنا null وهو في الغالب الأمر الصائب لفعله. ربما ستود القيام بهذه الأشياء الثلاثة قبل أن تذهب إلى مدى أبعد. ضع الأعلام المناسبة لتقول بأن لدينا فعلا
أزرار ضوابط الوسائط وأننا نريد أن نرسلها إلى تطبيقنا. التالي، نريد أن نضع إعادة إرسال. هنا حيث يتوصل لوليبوب
والأجهزة الأعلى بإعادة اتصال مع التشغيل،التوقيف و غيرها حين يتم الضغط على الزر. وأخيرا، ضع الدورة على وضع التشغيل حين تكون مستعدا لتشغيل شيء ما. هذا هو الدليل إلى النظام ليوجه
أزرار الوسيط وضوابط أخرى إلى تطبيقك. حسنا، الإعداد مشغل و مستعد، لكننا لا نخبردورة وسيطنا شيئا حول تشغيل وسائطنا. كيف له أن يعرف ماعليه أن يشغله،
وماهي الضوابط التي ندعمها؟ يتكلف MediaMetadatCompat بالجزء الأول. وهي تستعمل بناء نمط،حيث عليك فقط أن تضيف كل المعلومات لديك، بعدها تستدعي setMetadata()
في الMediaSession لكن لازالت ضوابط الوسائط غائبة. لأننا لم نقم بالجزء الآخر، وهو نشرPlaybackStateCompat ل PlaybackStateCompat هدفان، الحالة الآنية: مثل التشغيل أو الإيقاف أو التحميل ، عبر طريقة
setState() والأفعال الآنية مثل الإيقاف أو
أوالتشغيل والإيقاف، المعدة عبر طريقة setActions() وهي تحتوي عليهما معا،
لأنه غالبا ماتتغير الأفعال في نفس الوقت مع الحالة. حالة الإيقاف غالبا لا تتوفر
على فعل التوقيف، مثلا. وهذا كاف لجعل ميديا سيشن كومبات يعمل. ستجدون وسائط متكاملة و أزرار بلوتوث
في جميع أجهزة ال API و الأجهزة الأعلى،وضوابط إغلاق الشاشة في أجهزة آيس كريم ساندويتش،
جيلي بين و كيتكات. ستجدون أيضاMediaSessionCompat يعمل جيدا مع
NotificationCompat.MediaStyle جزء من مكتبة
دعم AppCompat مما سيعطيك إشعارات وسائط جميلة جدا علي جميع مستوياتAPI، بما فيها
حتى ضوابط الوسائط المضمنة علي API على أجهزة 14 فما فوق. تذكروا فقط أن تستدعوا SetMediaSession مع رمز لدورة وسائط خاصة و فريدة من دورة وسائطكم. وهذا ما يصل دورة وسائطك مع "Android wear" ويعطيك ضوابط للوسائط في أندرويد5.0 ومافوقها. لا تنسوا أن تطلقوها
حينما تنتهون كليا من دورة وسائطكم. صدقا،لاتنسوا. تكلمنا فقط عن اساسيات
MediaSessionCombat لم نتحدث عن متصفحات الوسائط أوضوابط الوسائط،والعديد من الأشياء المبنية على دورة الوسائط. لكن هذا سيمكنكم من البدء،
ويجعل من معلومات تشغيل الوسائط،وضوابط التشغيل،
متوفرة في أي مكان كان. أتطلع إلى رؤية وسائطكم الرائعة باستعمال ميديا سيشن كومبات،وآمل أنها ستساعدكم في بناء تطبيقات أفضل. و إطلاقها.

Author:

10 thoughts on “Media Playback with MediaSessionCompat (Android Development Patterns Ep 4)”

  • Is there any way to check the playback state of the MediaController from the Activity if a user leaves then returns? MediaControllerCompat.getMediaController(mActivity).getPlaybackState() throws a NullReferenceError.

  • Any idea how to request an object from the mediaBrowserService in the Activity. I'm implementing my own queue and don't really wanna use the queue given.

  • Diabolical Software says:

    Hey Ian, some of my users have complained that their car stereos do not update track progress/position (stays at 0). Am I supposed to call MediaSessionCompat.setPlaybackState() every second with a new position value in PlaybackStateCompat.setState()?

  • +Ian Lake – I did all you said but on KitKat media metadata is not showing on the receiver. It does work in Lollipop. It also works on KitKat with the default players. But doesn't work with MediaSessionCompat. I installed 5.1.1 and 4.4.4 on the same device (Nexus 7 2012) – sending metadata on 5.1.1 works – on 4.4.4. doesn't.

  • +Ian Lake. My app is not the one providing the audio, but I want to be able to control the current music player with the new MediaControllerCompat class. Is this possible? Currently I am using the MediaSessionManager class to get a list of MediaSessions, but this seems a really clunky API because you have to create a NotificationListener and the user has to grant a permission (plus it leaks memory). Is there any sample code out there for replacing MediaSessionManager with the new classes.. a gist maybe? All the examples out there are only written from the perspective of a music player. Thanks.

  • Anil Sardiwal says:

    I did exactly what's shown in the video. Everything works but lockscreen wallpaper doesn't change into album art!.

  • Thank you for this excellent video! After struggling for 4 hours with a variety of articles to get the Bluetooth headset controls working correctly this 4 minute video did it for me! Nice and clear explanation regarding Media…Compat classes 🙂 And yes, I did use the MediaButtonReceiver class from v23.1.0 Support library.

  • Allan Pichardo says:

    Hi Ian, I can't seem to find the training documentation for MediaSession, all I see are the javadocs. Can you post a link please?

  • Hi IanLake,

    Thanks for android videos.

    This video about mediaSessionsCompat is not explained better in pretty
    much understandable format for basics about them.

    Thanks,
    Navin Prasad

Leave a Reply

Your email address will not be published. Required fields are marked *