روش زیر به شما امکان می دهد برنامه فرستنده اندروید خود را از Cast SDK v2 به CAF Sender تبدیل کنید که بر اساس CastContext singleton است.
Cast CAF Sender SDK از CastContext برای مدیریت GoogleAPIClient از طرف شما استفاده میکند. CastContext چرخههای عمر، خطاها و پاسخهای تماس را برای شما مدیریت میکند، که توسعه یک برنامه Cast را بسیار ساده میکند.
مقدمه
- فرستنده CAF هنوز به عنوان بخشی از خدمات Google Play با استفاده از مدیر Android SDK توزیع می شود
- بستههای جدیدی اضافه شدهاند که مسئولیت پیروی از چک لیست Google Cast Design (
com.google.android.gms.cast.framework.*
) را بر عهده میگیرند. - CAF Sender ویجت هایی را ارائه می دهد که با الزامات Cast UX مطابقت دارند. v2 هیچ مؤلفه رابط کاربری ارائه نمی دهد و شما را ملزم به پیاده سازی این ویجت ها می کند.
- استفاده از GoogleApiClient دیگر برای استفاده از Cast API لازم نیست.
- زیرنویسهای بسته در CAF Sender مشابه نسخه ۲ است.
وابستگی ها
V2 و CAF وابستگی های یکسانی به کتابخانه های پشتیبانی و خدمات Google Play (9.2.0 یا جدیدتر) دارند که در راهنمای ویژگی های کتابخانه پشتیبانی توضیح داده شده است.
حداقل نسخه Android SDK که CAF پشتیبانی می کند 9 (نان زنجبیلی) است.
مقداردهی اولیه
در CAF، یک مرحله اولیه سازی صریح برای چارچوب Cast مورد نیاز است. این شامل مقداردهی اولیه CastContext
singleton، با استفاده از یک OptionsProvider
مناسب برای تعیین شناسه برنامه Web Receiver و هر گزینه جهانی دیگر است.
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
در تگ "application" فایل 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
هر Activity مقداردهی کنید:
private CastContext mCastContext;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_browser);
setupActionBar();
mCastContext = CastContext.getSharedInstance(this);
}
این مراحل در v2 ضروری نبود.
کشف دستگاه
در CAF، هنگامی که برنامه به پیشزمینه میآید و به پسزمینه میرود، فرآیند کشف بهطور خودکار توسط فریمورک شروع و متوقف میشود. MediaRouteSelector
و MediaRouter.Callback
نباید استفاده شوند.
دکمه Cast و گفتگوی Cast
مانند نسخه 2، این مؤلفه ها توسط کتابخانه پشتیبانی MediaRouter ارائه شده است.
دکمه Cast هنوز توسط 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()
هر Activity را با استفاده از CastButtonFactory
برای سیمکشی MediaRouteButton
به چارچوب 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;
}
وقتی شخصی روی دکمه ضربه می زند، گفتگوی Cast به طور خودکار نمایش داده می شود.
کنترل دستگاه
در CAF، کنترل دستگاه تا حد زیادی توسط چارچوب انجام می شود. برنامه فرستنده نیازی به اتصال به دستگاه و راه اندازی برنامه Web Receiver با استفاده از GoogleApiClient
ندارد (و نباید تلاش کند) تعامل بین فرستنده و گیرنده وب اکنون به عنوان یک "جلسه" نشان داده می شود. کلاس SessionManager
چرخه عمر جلسه را کنترل می کند و به طور خودکار جلسات را در پاسخ به حرکات کاربر شروع و متوقف می کند: یک جلسه زمانی شروع می شود که کاربر یک دستگاه Cast را در گفتگوی Cast انتخاب می کند و با ضربه زدن کاربر روی دکمه "توقف ارسال محتوا" در Cast پایان می یابد. گفتگو یا زمانی که خود برنامه فرستنده خاتمه می یابد. برنامه فرستنده می تواند با ثبت SessionManagerListener
در SessionManager
از رویدادهای چرخه زندگی جلسه مطلع شود. تماسهای SessionManagerListener
روشهای بازگشت به تماس را برای همه رویدادهای چرخه عمر جلسه تعریف میکنند.
کلاس CastSession
یک جلسه با دستگاه Cast را نشان می دهد. این کلاس متدهایی برای کنترل حجم دستگاه و حالت های بی صدا دارد که قبلاً در نسخه 2 با استفاده از متدهایی در Cast.CastApi
انجام می شد.
در نسخه 2، تماسهای Cast.Listener
اعلانهایی را در مورد تغییرات وضعیت دستگاه، از جمله میزان صدا، وضعیت بیصدا، وضعیت آماده به کار و غیره ارائه میکردند.
در CAF، اعلانهای تغییر وضعیت صدا/بیصدا همچنان از طریق روشهای پاسخ به تماس در Cast.Listener
ارائه میشوند. این شنوندگان در CastSession
ثبت شده اند. همه اعلانهای وضعیت دستگاه باقیمانده از طریق تماسهای CastStateListener
ارائه میشوند. این شنوندگان در CastSession
ثبت شده اند. وقتی قطعات، فعالیتها یا برنامههای مرتبط به پسزمینه میروند، مطمئن شوید که هنوز ثبت شنوندگان را لغو ثبت کردهاید.
منطق اتصال مجدد
مانند نسخه 2، CAF تلاش می کند تا اتصالات شبکه ای را که به دلیل از دست دادن موقت سیگنال WiFi یا سایر خطاهای شبکه از بین رفته اند، دوباره برقرار کند. این اکنون در سطح جلسه انجام می شود. یک جلسه می تواند زمانی که اتصال قطع می شود وارد حالت "تعلیق" شود و با بازیابی اتصال به حالت "متصل" برمی گردد. این فریم ورک از اتصال مجدد به برنامه Web Receiver و اتصال مجدد هر کانال Cast به عنوان بخشی از این فرآیند مراقبت می کند.
علاوه بر این، CAF از سرگیری خودکار جلسه را نیز اضافه میکند که بهطور پیشفرض فعال است (و میتوان آن را از طریق CastOptions
غیرفعال کرد. اگر برنامه فرستنده به پسزمینه ارسال شود یا خاتمه یابد (با کشیدن انگشت یا به دلیل خرابی) در حالی که یک جلسه Cast در حال پیشرفت، زمانی که برنامه فرستنده به پیشزمینه باز میگردد یا دوباره راهاندازی SessionManagerListener
، چارچوب تلاش میکند تا آن جلسه را از سر بگیرد SessionManager
ثبت سفارشی کانال
در نسخه 2، کانالهای سفارشی (که با استفاده از Cast.MessageReceivedCallback
اجرا میشوند) با Cast.CastApi
ثبت میشوند. در CAF، کانالهای سفارشی با نمونه CastSession
ثبت میشوند. ثبت نام را می توان در روش SessionManagerListener.onSessionStarted
انجام داد. برای برنامه های رسانه، دیگر نیازی به ثبت صریح کانال کنترل رسانه از طریق Cast.CastApi.setMessageReceivedCallbacks
نیست. برای جزئیات بیشتر به بخش زیر مراجعه کنید.
کنترل رسانه ها
RemoteMediaPlayer
کلاس v2 منسوخ شده است و نباید استفاده شود. در CAF، کلاس جدید RemoteMediaClient
جایگزین آن می شود، که عملکردی معادل را در یک API راحت تر ارائه می دهد. نیازی به مقداردهی اولیه یا ثبت این شیء نیست. اگر برنامه Web Receiver که به آن متصل است از فضای نام رسانه پشتیبانی کند، فریم ورک به طور خودکار شی را نمونهسازی میکند و کانال رسانه زیرین را در زمان شروع جلسه ثبت میکند.
RemoteMediaClient
می تواند به عنوان متد getRemoteMediaClient
شی CastSession
قابل دسترسی باشد.
در نسخه 2، تمام درخواستهای رسانهای که در RemoteMediaPlayer
صادر میشوند، یک RemoteMediaPlayer.MediaChannelResult
را از طریق یک پاسخ تماس PendingResult
برمیگردانند.
در CAF، تمام درخواستهای رسانهای که در RemoteMediaClient
صادر میشوند، RemoteMediaClient.MediaChannelResult
را از طریق یک پاسخ تماس PendingResult
که میتواند برای پیگیری پیشرفت و نتیجه نهایی درخواست استفاده شود، برمیگرداند.
v2 RemoteMediaPlayer
از طریق RemoteMediaPlayer.OnStatusUpdatedListener
، اعلانهایی در مورد تغییرات در وضعیت پخش کننده رسانه در گیرنده وب ارسال میکند.
در CAF، RemoteMediaClient
از طریق رابط RemoteMediaClient.Listener
، تماسهای مشابهی را ارائه میکند. هر تعداد شنونده را می توان با RemoteMediaClient
ثبت کرد، که به چندین مؤلفه فرستنده اجازه می دهد نمونه واحد RemoteMediaClient
را که با جلسه مرتبط است به اشتراک بگذارند.
در نسخه 2، برنامه فرستنده باید مسئولیت همگام نگه داشتن رابط کاربری با وضعیت پخش کننده رسانه در گیرنده وب را بر عهده می گرفت.
در CAF، کلاس UIMediaController
بیشتر این مسئولیت را بر عهده می گیرد.
پوشش مقدماتی
V2 رابط کاربری همپوشانی مقدماتی ارائه نمی دهد.
CAF یک نمای سفارشی IntroductoryOverlay
برای برجسته کردن دکمه Cast هنگامی که برای اولین بار به کاربران نشان داده می شود، ارائه می دهد.
مینی کنترلر
در نسخه 2، باید یک مینی کنترلر را از ابتدا در برنامه فرستنده پیاده سازی کنید.
در CAF، SDK یک نمای سفارشی، MiniControllerFragment
را ارائه میکند، که میتوانید آن را به فایل طرحبندی برنامه فعالیتهایی که میخواهید کنترلکننده کوچک را در آن نشان دهید اضافه کنید.
اعلان و صفحه قفل
در نسخه 2، کنترلکنندههای اعلان و صفحه قفل توسط SDK ارائه نمیشوند. برای آن SDK، باید این ویژگیها را با استفاده از APIهای فریمورک اندروید در برنامه فرستنده خود بسازید.
در CAF، SDK یک NotificationsOptions.Builder
ارائه میکند تا به شما کمک کند کنترلهای رسانه را برای اعلان و صفحه قفل در برنامه فرستنده بسازید. هنگام تنظیم اولیه CastContext
، کنترلهای اعلان و صفحه قفل را میتوان با CastOptions
فعال کرد.
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 هیچ گزینه ورود به سیستم وجود ندارد.
نمونه برنامه ها
ما آموزش های Codelab و نمونه برنامه هایی داریم که از CAF استفاده می کنند.