يمكّنك الإجراء التالي من تحويل تطبيق المرسل على Android من Cast الإصدار 2 من حزمة تطوير البرامج (SDK) إلى مرسِل CAF، والذي يعتمد على CastContext سينغلتون.
إنّ حزمة تطوير البرامج (SDK) الخاصة بإرسال CAF Sender تستخدم CastContext لإدارة GoogleAPIClient نيابةً عنك. يدير CastContext مراحل النشاط والأخطاء وعمليات معاودة الاتصال نيابةً عنك، مما يجعله تبسيط تطوير تطبيق البث.
مقدمة
- لا يزال تطبيق CAF Sender موزَّعًا كجزء من "خدمات Google Play" باستخدام مدير حزمة تطوير البرامج (SDK) لنظام التشغيل Android
- تمت إضافة حِزم جديدة تتحمّل مسؤولية الالتزام
قائمة التحقّق الخاصة بتصميم Google Cast (
com.google.android.gms.cast.framework.*
) - يوفّر تطبيق CAF Sender التطبيقات المصغّرة التي تتوافق مع متطلبات تجربة المستخدم لجهاز Cast؛ لم يوفر الإصدار 2 أي مكونات لواجهة المستخدم وطلب منك تنفيذها التطبيقات المصغّرة.
- لم يعُد استخدام GoogleApiClient مطلوبًا لاستخدام Cast API.
- تشبه الترجمة والشرح في CAF Sender الإصدار 2.
التبعيات
يعتمد الإصداران 2 وCAF على مكتبات الدعم نفسها وGoogle Play (9.2.0 أو أحدث) كما هو موضح في ميزات مكتبة الدعم الدليل
الحد الأدنى لإصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android الذي يتوافق مع CAF هو 9 (Gingerbread).
الإعداد
في CAF، يجب تنفيذ خطوة إعداد واضحة لإطار عمل Cast. هذا النمط
تتضمن تهيئة
CastContext
سينغلتون، باستخدام طريقة
OptionsProvider
لتحديد معرّف تطبيق WebReceiver وأي خيارات عمومية أخرى.
public class CastOptionsProvider implements OptionsProvider {
@Override
public CastOptions getCastOptions(Context context) {
return new CastOptions.Builder()
.setReceiverApplicationId(context.getString(R.string.app_id))
.build();
}
@Override
public List<SessionProvider> getAdditionalSessionProviders(Context context) {
return null;
}
}
يُرجى تعريف OptionsProvider
ضمن "التطبيق" علامة التطبيق
ملف AndroidManifest.xml
:
<application>
...
<meta-data
android:name=
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>
الإعداد الكسول CastContext
في طريقة onCreate
لكل نشاط:
private CastContext mCastContext;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_browser);
setupActionBar();
mCastContext = CastContext.getSharedInstance(this);
}
لم تكن هذه الخطوات ضرورية في الإصدار 2.
رصد الأجهزة
في CAF، تبدأ عملية الاكتشاف وتتوقف تلقائيًا عن طريق
إطار العمل عندما يظهر التطبيق في المقدّمة
وينتقل إلى الخلفية
على التوالي. MediaRouteSelector
وMediaRouter.Callback
يجب ألا يكونا
استخدام البيانات المختلفة.
زر البث ومربّع حوار البث
وكما في الإصدار 2، يتم توفير هذه المكونات بواسطة مركز دعم MediaRouter المكتبة.
لا يزال زر البث مفعَّلًا من خلال
MediaRouteButton
ويمكن إضافته إلى نشاطك (باستخدام
ActionBar
أو a
Toolbar
)،
كعنصر قائمة في قائمتك.
<item
android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
app:showAsAction="always"/>
إلغاء طريقة onCreateOptionMenu()
لكل نشاط من خلال استخدام
CastButtonFactory
لتوصيل MediaRouteButton
بإطار عمل Google Cast:
private MenuItem mediaRouteMenuItem;
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.browse, menu);
mediaRouteMenuItem =
CastButtonFactory.setUpMediaRouteButton(getApplicationContext(),
menu,
R.id.media_route_menu_item);
return true;
}
وعندما ينقر أحد الأشخاص على الزر، يتم عرض مربّع حوار البث تلقائيًا.
التحكم بالجهاز
في CAF، يتعامل إطار العمل إلى حد كبير مع التحكُّم في الأجهزة. المُرسِل
فلا يحتاج التطبيق إلى معالجة (ويجب ألا يحاول التعامل) مع
الجهاز وتشغيل تطبيق WebRecipient باستخدام
GoogleApiClient
يتم الآن تمثيل التفاعل بين المرسل ومستلم الويب
على أنه "جلسة". تشير رسالة الأشكال البيانية
SessionManager
يعالج الصف دورة حياة الجلسة ويبدأ الجلسات ويوقفها تلقائيًا
استجابة لإيماءات المستخدم: تبدأ جلسة عندما يختار المستخدم بثًا
الجهاز في مربّع حوار البث وينتهي عندما ينقر المستخدم على "إيقاف البث"
زر في مربع الحوار "إرسال" أو عند إغلاق تطبيق المُرسِل نفسه. المُرسِل
تطبيقك بأحداث مراحل الجلسة من خلال تسجيل
SessionManagerListener
مع SessionManager
. تحدد استدعاءات SessionManagerListener
طُرق معاودة الاتصال لجميع أحداث مراحل نشاط الجلسة.
تشير رسالة الأشكال البيانية
CastSession
تمثل الفئة جلسة مع جهاز بث. وتضم الفئة طرق
التحكّم في مستوى صوت الجهاز وحالات كتم الصوت، وهو ما تم تنفيذه سابقًا في الإصدار 2
باستخدام الطرق على Cast.CastApi
.
في الإصدار 2،
Cast.Listener
توفر عمليات الاستدعاء إشعارات بالتغييرات التي تطرأ على حالة الجهاز، بما في ذلك
مستوى الصوت وحالة كتم الصوت وحالة الاستعداد وما إلى ذلك
في CAF، يستمر إرسال إشعارات تغيير مستوى الصوت/كتم الصوت من خلال معاودة الاتصال.
في Cast.Listener
؛ تم تسجيل هؤلاء المستمعين في
CastSession
ويتم إرسال جميع الإشعارات المتبقية لحالة الجهاز عبر
CastStateListener
عمليات الاستدعاء؛ هؤلاء المستمعين مسجّلون لدى CastSession
. تأكد من
مواصلة إلغاء تسجيل المستمعين عند إزالة الأجزاء أو الأنشطة أو التطبيقات المرتبطة
إلى الخلفية.
منطق إعادة الربط
وكما هو الحال مع الإصدار 2، يحاول CAF إعادة إنشاء اتصالات الشبكة التي فقدان الاتصال بسبب فقدان إشارة واي فاي مؤقتًا أو أخطاء أخرى في الشبكة. هذا الآن على مستوى الجلسة يمكن أن تدخل الجلسة "معلقة" الحالة عندما ينقطع اتصال الإنترنت، وسينتقل مرة أخرى إلى الحالة "متصل" الحالة عند تتم استعادة الاتصال. ويعتني إطار العمل بإعادة الاتصال تطبيق الويب لجهاز الاستقبال وإعادة ربط أي قنوات بث كجزء من هذه العملية.
بالإضافة إلى ذلك، يضيف CAF أيضًا الاستئناف التلقائي للجلسة والذي يتم تفعيله من خلال
افتراضيًا (ويمكن إيقاف تشغيله من خلال
CastOptions
إذا تم إرسال تطبيق المرسل إلى الخلفية أو تم إنهاؤه (عن طريق
التمرير سريعًا للخارج أو بسبب حادث سير) أثناء جلسة البث،
استئناف تلك الجلسة عندما يطلب تطبيق المرسل
يعود إلى المقدّمة أو تتم إعادة تشغيله يتم التعامل مع هذا الأمر تلقائيًا من خلال
SessionManager
، التي ستُصدر عمليات معاودة الاتصال المناسبة على أي موقع
SessionManagerListener
مثال
تسجيل القناة المخصّصة
في الإصدار الثاني، القنوات المخصّصة (يتم تنفيذها باستخدام
Cast.MessageReceivedCallback
)
أن تكون مسجَّلة في Cast.CastApi
. في CAF، يتم تسجيل القنوات المخصّصة بدلاً من ذلك بواسطة
مثال واحد (CastSession
) يمكن إجراء التسجيل في
SessionManagerListener.onSessionStarted
. بالنسبة إلى تطبيقات الوسائط، لم يعد من الضروري
تسجيل قناة التحكم في الوسائط عبر Cast.CastApi.setMessageReceivedCallbacks
راجِع القسم التالي للاطّلاع على مزيد من التفاصيل.
التحكم في الوسائط
فئة v2
RemoteMediaPlayer
تم إيقافها ويجب عدم استخدامها. وفي CAF، حل محله النموذج الجديد
RemoteMediaClient
التي توفر وظائف مماثلة في واجهة برمجة تطبيقات أكثر ملاءمة. من المهم
غير ضروري لإعداد هذا الكائن أو تسجيله بشكل صريح إطار العمل
سيتم إنشاء مثيل الكائن تلقائيًا وتسجيل الوسائط الأساسية
القناة في وقت بدء الجلسة في حالة اتصال تطبيق WebRecipients
يتيح استخدام مساحة اسم الوسائط.
يمكن الوصول إلى RemoteMediaClient
على أنّه
الطريقة getRemoteMediaClient
للكائن CastSession
.
في الإصدار الثاني، ستعرض كل طلبات الوسائط الصادرة في RemoteMediaPlayer
RemoteMediaPlayer.MediaChannelResult
عن طريق معاودة الاتصال عبر PendingResult
.
في CAF، تعرض كل طلبات الوسائط الصادرة في RemoteMediaClient
RemoteMediaClient.MediaChannelResult
من خلال
PendingResult
يمكن استخدامها لتتبع التقدم والنتيجة النهائية
طلبك.
سيرسِل الإصدار 2 من "RemoteMediaPlayer
" إشعارات بشأن التغييرات في الوسائط.
على جهاز استقبال الويب عبر
RemoteMediaPlayer.OnStatusUpdatedListener
في CAF، يوفر RemoteMediaClient
استدعاءات مكافئة من خلال
RemoteMediaClient.Listener
من واجهة pyplot. يمكن تسجيل أي عدد من المستمعين في
RemoteMediaClient
، والذي يسمح لمكونات مرسلة متعددة بمشاركة
مثال واحد من RemoteMediaClient
مرتبط بالجلسة.
في الإصدار 2، كان على تطبيق المرسل أن يتحمل عبء الحفاظ على المستخدم متزامنة مع حالة مشغّل الوسائط على جهاز استقبال الويب.
في CAF، الفئة
UIMediaController
وتحمل معظم هذه المسئولية.
تراكب تمهيدي
لا يوفر الإصدار 2 واجهة مستخدم تمهيدية تظهر على سطح الفيديو.
يوفّر CAF طريقة عرض مخصّصة
IntroductoryOverlay
لتمييز زر البث عند عرضه للمستخدمين لأول مرة.
وحدة تحكُّم صغيرة
وفي الإصدار 2، تحتاج إلى تنفيذ وحدة تحكُّم صغيرة من البداية في تطبيق المُرسِل.
في CAF، توفر SDK عرضًا مخصصًا،
MiniControllerFragment
،
والذي يمكنك إضافته إلى ملف تخطيط التطبيق للأنشطة التي
فأنت تريد أن تُظهر وحدة التحكم المصغَّرة.
الإشعار وشاشة القفل
أما في الإصدار الثاني، فلا توفّر حزمة تطوير البرامج (SDK) وحدات تحكّم للإشعارات وشاشة القفل. وبالنسبة إلى حزمة تطوير البرامج (SDK) هذه، يجب إنشاء هذه الميزات في تطبيق المُرسِل باستخدام واجهات برمجة التطبيقات لإطار عمل Android
في CAF، توفر SDK
NotificationsOptions.Builder
لمساعدتك في إنشاء عناصر تحكّم في الوسائط للإشعارات وشاشة القفل
في تطبيق المُرسِل. يمكن تفعيل عناصر التحكّم في شاشة القفل والإشعارات.
مع
CastOptions
عند تهيئة CastContext
.
public CastOptions getCastOptions(Context context) {
NotificationOptions notificationOptions = new NotificationOptions.Builder()
.setTargetActivityClassName(VideoBrowserActivity.class.getName())
.build();
CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
.setNotificationOptions(notificationOptions)
.build();
return new CastOptions.Builder()
.setReceiverApplicationId(context.getString(R.string.app_id))
.setCastMediaOptions(mediaOptions)
.build();
}
تم توسيع وحدة التحكُّم
في الإصدار 2، يجب تنفيذ وحدة تحكّم موسّعة من البداية تطبيق المرسل.
يوفر CAF
UIMediaController
التي تسهّل عليك إنشاء تصنيفك الخاص
المستخدم.
CAF يضيف تطبيق مصغّر تم إنشاؤه مسبقًا لوحدة التحكم
ExpandedControllerActivity
التي يمكنك إضافتها ببساطة إلى تطبيقك لم تعد بحاجة إلى
تنفيذ وحدة تحكُّم موسّعة مخصّصة باستخدام UIMediaController
.
التركيز على الصوت
وفي الإصدار 2، عليك استخدام MediaSessionCompat
لإدارة التركيز الصوتي.
في CAF، تتم إدارة التركيز الصوتي تلقائيًا.
تسجيل تصحيح الأخطاء
في CAF، ما مِن خيارات للتسجيل.
نماذج التطبيقات
لدينا برامج تعليمية عن الترميز أو نماذج تطبيقات التي تستخدم CAF.