يتيح لك الإجراء التالي تحويل تطبيق المُرسِل الذي يعمل بنظام التشغيل Android من الإصدار الثاني من حزمة تطوير البرامج (SDK) لإرسال إلى مُرسِل CAF، استنادًا إلى CastContext tonton.
تستخدم حزمة تطوير البرامج (SDK) لمُرسِل تطبيق CAF Cast Cast إدارة GoogleAPIClient نيابةً عنك. تدير ميزة CastContext مراحل النشاط والأخطاء وعمليات معاودة الاتصال لك، ما يسهّل إلى حد كبير عملية تطوير تطبيق Cast.
المقدمة
- لا يزال موزع CAF موزّعًا كجزء من خدمات Google Play باستخدام مدير Android SDK
- تمت إضافة حِزم جديدة مسؤولة عن الالتزام بقائمة التحقّق من تصميم Google Cast (
com.google.android.gms.cast.framework.*
). - يوفر مُرسِل CAF أدوات متوافقة مع متطلبات بث تجربة المستخدم. لم يوفّر الإصدار الثاني أي مكوّنات لواجهة المستخدم ويطلب منك تنفيذ هذه التطبيقات المصغّرة.
- لم يعد استخدام GoogleApiClient مطلوبًا لاستخدام Cast API.
- إن الترجمة والشرح في "مُرسِل CAF" مماثلة للإصدار 2.
المهام التابعة
V2 وCAF لها نفس الاعتمادات على مكتبات الدعم وخدمات Google Play (الإصدار 9.2.0 أو الإصدارات الأحدث) كما هو موضّح في دليل ميزات مكتبة الدعم.
الحد الأدنى لإصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android الذي يتوافق مع CAF هو 9 (Gingerbread).
الإعداد
في CAF، يجب إعداد خطوة إعداد صريحة لإطار عمل البث. ويتضمّن ذلك إعداد
CastContext
سينغلتون، باستخدام السمة
OptionsProvider
المناسبة لتحديد معرّف تطبيق مستقبِل الويب وأي خيارات عامة أخرى.
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، يتم توفير هذه المكوّنات من خلال مكتبة دعم Mediarr.
يستمر تطبيق زر البث من خلال
MediaRouteButton
ويمكن إضافته إلى نشاطك (باستخدام
ActionBar
أو
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
إلى إطار عمل البث:
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، يتم التحكم في الجهاز إلى حد كبير من خلال إطار العمل. وليس على تطبيق المُرسِل معالجة (وعدم محاولة معالجة) الاتصال بالجهاز وتشغيل تطبيق مستقبِل الويب باستخدام GoogleApiClient
. ويتم تمثيل التفاعل بين المُرسِل ومستلم الويب الآن على أنه "جلسة". تعالج الفئة
SessionManager
مراحل نشاط الجلسة وتبدأ الجلسات تلقائيًا وتتوقفها استجابةً لإيماءات المستخدم: يتم بدء الجلسة عندما يختار المستخدم جهاز بث في مربّع حوار البث وتنتهي عند نقر المستخدم على الزر "إيقاف البث" في مربّع حوار البث أو عند انتهاء تطبيق المُرسِل نفسه. يمكن إشعار تطبيق المُرسِل بأحداث مراحل الجلسة من خلال تسجيل SessionManagerListener
في SessionManager
. وستعمل استدعاءات SessionManagerListener
على تحديد طرق معاودة الاتصال لجميع أحداث مراحل نشاط الجلسة.
يمثّل الصف
CastSession
جلسة باستخدام جهاز بث. تتضمّن الصف طرقًا للتحكّم في مستوى صوت الجهاز وكتم صوت الحالات، التي كانت تتم في السابق باستخدام الإصدارات الثانية من خلال طُرق استخدام Cast.CastApi
.
في الإصدار 2، قدّمت استدعاءات Cast.Listener
إشعارات بشأن التغييرات التي تطرأ على حالة الجهاز، بما في ذلك مستوى الصوت وحالة كتم الصوت وحالة الاستعداد وما إلى ذلك.
في CAF، سيستمر إرسال إشعارات تغيير مستوى الصوت/كتم الصوت من خلال طرق
رد الاتصال في Cast.Listener
، ويتم تسجيل هؤلاء المستمعين مع
CastSession
.
يتم إرسال جميع الإشعارات المتعلّقة بحالة الجهاز المتبقية من خلال عمليات الردّ على
CastStateListener
، ويتم تسجيل هؤلاء المستمعين في CastSession
. تأكّد من
أنّك ما زلت تلغي تسجيل المستمعين عند تشغيل الأجزاء أو الأنشطة أو التطبيقات المرتبطة في الخلفية.
منطق إعادة الاتصال
كما هو الحال مع الإصدار 2، يحاول CAF إعادة إنشاء اتصالات الشبكة المفقودة بسبب فقدان إشارة شبكة Wi-Fi المؤقتة أو أخطاء أخرى في الشبكة. يتم ذلك الآن على مستوى الجلسة، ويمكن أن تدخل الجلسة حالة "مُعلَّق" عند فقدان الاتصال، ستنتقل إلى الحالة "متصل" عند استعادة الاتصال. يتولّى إطار العمل إعادة الاتصال بتطبيق "مستلِم الويب" وإعادة ربط أي قنوات بث كجزء من هذه العملية.
بالإضافة إلى ذلك، يضيف CAF أيضًا استئنافًا تلقائيًا للجلسات يتم تفعيله تلقائيًا (ويمكن إيقافه من خلال
CastOptions
).
إذا تم إرسال تطبيق المُرسِل إلى الخلفية أو تم إنهاؤه (من خلال
التمرير سريعًا أو بسبب تعطُّل أثناء تنفيذ جلسة بث)، سيحاول
إطار العمل استئناف هذه الجلسة عند عودة تطبيق المُرسِل إلى المقدّمة
أو إعادة تشغيله، وتتم معالجة هذا الإجراء تلقائيًا من خلال
SessionManager
، وسيتم إصدار استدعاءات مناسبة في أي
مثيلات SessionManagerListener
مسجَّلة.
تسجيل قناة مخصّصة
في الإصدار الثاني، يتم تسجيل القنوات المخصّصة (التي يتم تنفيذها باستخدام
Cast.MessageReceivedCallback
)
مع Cast.CastApi
. في CAF، يتم تسجيل القنوات المخصّصة بدلاً من ذلك مع
مثيل CastSession
. يمكن إجراء التسجيل من خلال طريقة معاودة الاتصال SessionManagerListener.onSessionStarted
. بالنسبة إلى تطبيقات الوسائط، لم يعد من الضروري تسجيل قناة التحكّم في الوسائط
صراحةً من خلال Cast.CastApi.setMessageReceivedCallbacks
،
يمكنك الاطّلاع على القسم التالي للحصول على مزيد من التفاصيل.
التحكم في الوسائط
تم إيقاف الصف الثاني
RemoteMediaPlayer
ويجب عدم استخدامه. في CAF، تحلّ محلّها فئة RemoteMediaClient
الجديدة التي توفّر وظائف مكافئة في واجهة برمجة تطبيقات أكثر ملاءمةً. ليس من الضروري إعداد هذا العنصر أو تسجيله بشكل صريح، لأن إطار العمل سينشئ تلقائيًا عنصرًا جديدًا ويسجِّل قناة الوسائط الأساسية في وقت بدء الجلسة إذا كان تطبيق Web Receiver المتصل متصلاً بمساحة اسم الوسائط.
يمكن الوصول إلى RemoteMediaClient
كطريقة
getRemoteMediaClient
لكائن CastSession
.
في الإصدار الثاني، ستعرض جميع طلبات الوسائط الصادرة على RemoteMediaPlayer
RemoteMediaPlayer.MediaChannelResult
عبر استدعاء PendingResult
.
في CAF، تعرض جميع طلبات الوسائط التي تم إصدارها في RemoteMediaClient
RemoteMediaClient.MediaChannelResult
رد على المكالمة
PendingResult
يمكن استخدامه لتتبّع مدى تقدّم الطلب
والنتائج النهائية له.
سيرسل الإصدار 2 إلى RemoteMediaPlayer
إشعارات بشأن التغييرات في حالة مشغّل الوسائط على جهاز استقبال الويب من خلال RemoteMediaPlayer.OnStatusUpdatedListener
.
في CAF، توفّر RemoteMediaClient
استدعاءات مكافئة من خلال واجهة
RemoteMediaClient.Listener
الخاصة به. يمكن تسجيل أي عدد من المستمعين مع
RemoteMediaClient
، ما يسمح لمكوّنات مُرسِلين متعددة بمشاركة
مثال واحد من RemoteMediaClient
المرتبط بالجلسة.
في الإصدار الثاني، يجب أن يتحمّل تطبيق المُرسِل عبء مزامنة واجهة المستخدم مع حالة مشغّل الوسائط على جهاز استقبال الويب.
في CAF، يتحمّل الصف
UIMediaController
معظم المسؤولية.
تراكب تمهيدي
لا يوفر الإصدار 2 واجهة مستخدم مركّبة للتراكب.
يوفر CAF عرضًا مخصصًا
IntroductoryOverlay
لإبراز زر البث عند ظهوره للمستخدمين لأول مرة.
وحدة تحكّم صغيرة
في الإصدار 2، يجب تنفيذ وحدة تحكُّم مصغَّرة من البداية في تطبيق "المرسِل".
في CAF، توفر حزمة تطوير البرامج (SDK) عرضًا مخصصًا،
MiniControllerFragment
،
الذي يمكنك إضافته إلى ملف تنسيق التطبيق للأنشطة التي تريد عرض وحدة التحكم المصغّرة فيها.
الإشعارات وشاشة القفل
في الإصدار 2، لا توفّر حزمة تطوير البرامج (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
.
التركيز على الصوت
في الإصدار الثاني، عليك استخدام MediaSessionCompat
لإدارة التركيز الصوتي.
في CAF، تتم إدارة تركيز الصوت تلقائيًا.
تسجيل تصحيح الأخطاء
في CAF لا تتوفّر خيارات تسجيل.
نماذج التطبيقات
لدينا برامج تعليمية حول الترميز ونماذج تطبيقات تستخدم CAF.