در اندروید ۱۳، ویژگی پخش برنامه به تلفنها اجازه میدهد برنامههای خود را به دستگاههای متصل پخش کنند و به آن دستگاهها اجازه میدهد با برنامهها تعامل داشته باشند. نقش جدید COMPANION_DEVICE_APP_STREAMING به یک برنامه اجازه میدهد تا پروکسیهایی را برای دستگاههای از راه دور متصل ایجاد و مدیریت کند تا برنامهها را از دستگاه محلی به دستگاه از راه دور پخش کند. برنامهای که نقش COMPANION_DEVICE_APP_STREAMING را دارد میتواند مجوزهایی را برای ایجاد یک صفحه نمایش مجازی، اجرای یک برنامه روی آن و سپس پخش ویدیویی از برنامه اجرا شده به دستگاه دیگر دریافت کند. برنامه دارنده نقش همچنین میتواند رویدادهای ورودی و میکروفون دریافت شده از یک دستگاه از راه دور را به دستگاه محلی تزریق کند، گویی آن دستگاه به عنوان یک وسیله جانبی متصل شده است.
معماری
از اندروید ۱۳، مدیر دستگاه مجازی جدید و مدیر دستگاه همراه (CDM) بلوکهای سازنده کلیدی را برای پشتیبانی از پخش برنامه و تعامل با دستگاههای متصل از راه دور تشکیل میدهند.
مدیر دستگاه مجازی
پخش برنامه با بهرهگیری از نمایشگرهای مجازی کار میکند. مدیر دستگاه مجازی یک نمایشگر مجازی ایجاد میکند که جدا از نمایشگر اصلی قابل مشاهده است. هنگامی که کاربر شروع به پخش یک برنامه میکند، برنامه روی نمایشگر مجازی اجرا میشود یا به آن منتقل میشود. محتویات نمایشگر مجازی در یک جریان ویدیویی به دستگاه متصل منتقل میشود تا نمایش داده شود.
مدیر دستگاه مجازی شامل APIهایی است که امکان ایجاد، ثبت و مدیریت نمونههای VirtualDevice را فراهم میکنند.
یک نمونه VirtualDevice یک پروکسی برای دستگاه متصل و قابلیتهای آن است. یک نمونه VirtualDevice به دستگاه متصل این امکان را میدهد که با انجام موارد زیر، جریان برنامه ورودی را دریافت، نمایش و با آن تعامل داشته باشد:
- ایجاد یک نمونه
VirtualDisplayکه برای نمایش در نمایشگر دستگاه متصل در نظر گرفته شده است. - تزریق یک جریان صوتی از راه دور، مثلاً از میکروفون دستگاه متصل، به دستگاه محلی برای پخش.
- تزریق رویدادهای ورودی از راه دور، مانند ورودی از صفحه کلید دستگاه متصل، به دستگاه محلی برای پخش.
مدیر دستگاه همراه
CDM وضعیت اتصال را مدیریت میکند و الزامات نقشی را که باید برای فعال کردن پخش برنامه رعایت شوند، اعمال میکند.
شکل زیر تعاملات بین دستگاه محلی و راه دور را در طول پخش برنامه نشان میدهد:

شکل ۱. تعاملات بین دستگاههای محلی و راه دور در طول استریمینگ برنامه
پیادهسازی نقش استریمینگ اپلیکیشن همراه
تولیدکنندگان اصلی تجهیزات (OEM) میتوانند یک برنامه را با نقش COMPANION_DEVICE_APP_STREAMING پیادهسازی کنند تا یک تجربه کاربری غنی و امن بین دستگاههای مختلف را در دستگاههای خود فراهم کنند.
برای ایجاد یک دستگاه مجازی برای فعال کردن پخش برنامه، یک برنامه باید دارنده نقش COMPANION_DEVICE_APP_STREAMING باشد. هنگامی که این نقش اعطا میشود، برنامه مجوز CREATE_VIRTUAL_DEVICE را دریافت میکند که به برنامه امکان ایجاد یک دستگاه مجازی را میدهد. از دارندگان نقش انتظار میرود که با ایجاد یک نمونه VirtualDevice که به عنوان یک پروکسی برای یک دستگاه متصل عمل میکند، پخش برنامه را پیادهسازی کنند. کلاس VirtualDevice روشهایی را ارائه میدهد که استخراج یک سطح ترکیبی از یک نمایشگر مجازی را که برای پخش به دستگاه دیگر مناسب است، امکانپذیر میکند. کلاس VirtualDevice همچنین APIهایی را برای تزریق رویدادهای ورودی که در یک دستگاه از راه دور رخ میدهند به دستگاه محلی ارائه میدهد و به برنامهای که در یک دستگاه محلی اجرا میشود، این امکان را میدهد که طوری به نظر برسد که گویی به صورت بومی در یک دستگاه از راه دور اجرا میشود.
برای پیادهسازی نقش استریمینگ اپلیکیشن همراه، این مراحل را دنبال کنید:
برنامهای بسازید که مجوز
REQUEST_COMPANION_PROFILE_APP_STREAMINGرا در مانیفست درخواست کند.از کاربر بخواهید که به برنامه اجازه اجرای استریمینگ برنامه را بدهد.
یک نمونه از CDM
AssociationRequestبرای درخواست نقشCOMPANION_DEVICE_APP_STREAMINGایجاد کنید. برنامه پس از اعطای این نقش، مجوزCREATE_VIRTUAL_DEVICEرا دریافت میکند.برای ایجاد یک نمونه از
VirtualDeviceتابعVirtualDeviceManager#create()فراخوانی کنید. با استفاده از یک نمونه ازVirtualDevice، برنامه میتواند نمایشگرهای مجازی و ورودیهای مجازی را ایجاد و مدیریت کند.اعلان در حال انتظار (pending intent) را روی صفحه نمایش مجازی اجرا کنید و از آن صفحه نمایش یک ویدیو ضبط کنید.
یک اتصال به دستگاه متصل ایجاد کنید و صفحه نمایش مجازی را به دستگاه متصل منتقل کنید.
رویدادهای ورودی برگشتی را از دستگاه متصل به دستگاه محلی از طریق APIهای
VirtualDeviceتزریق کنید.وقتی کاربر برنامهی استریمینگ را روی دستگاه راه دور میبندد، استریم را پایان دهید و نمونهی
VirtualDeviceرا از بین ببرید. در این مرحله، برنامهی استریمینگ قبلی در پسزمینه روی دستگاه محلی اجرا میشود و اتصال قطع میشود.در صورت نیاز، منتظر سیگنالهای بیشتری از دستگاه متصل باشید تا پخش برنامه مجدداً شروع شود.
این برنامه مسئول اتصال به دستگاه از راه دور، گزارش وضعیت اتصال به CDM و اجرای الزامات امنیتی مطابق با آنچه در CDD شرح داده شده است، میباشد.
الزامات دارنده نقش COMPANION_DEVICE_APP_STREAMING
CDM زمانی که کاربر یک برنامهی پخش برنامه را با یک دستگاه مرتبط میکند، نقش COMPANION_DEVICE_APP_STREAMING را اعطا میکند. این نقش با یک پروفایل دستگاه مرتبط است، بنابراین میتوان تا حدودی بر روی برنامههایی که میتوانند به فروشگاه Play اضافه شوند و با این پروفایل مطابقت دارند، کنترل داشت. برای مشاهدهی فهرستی از الزامات نقش COMPANION_DEVICE_APP_STREAMING به نقشهای اندروید مراجعه کنید. برای اطلاعات بیشتر با نمایندهی گوگل خود تماس بگیرید.
قابلیتهای نقش COMPANION_DEVICE_APP_STREAMING
برای انجام استریمینگ برنامه، نقش COMPANION_DEVICE_APP_STREAMING فرض میکند که برنامهی دارنده این نقش، قابلیتها و رفتارهای زیر را دارد:
- ایجاد و مدیریت اتصالات به دستگاههای دیگر.
- نمایشگرهای مجازی قابل اعتماد، از جمله نمایشگرهای قفل نشده، را به شرح زیر ایجاد و مدیریت کنید:
- فعالیتها را روی نمایشگر مجازی شروع کنید.
- رویدادهایی را که در یک برنامه پخش شده روی یک دستگاه متصل اتفاق میافتند، دوباره به دستگاه محلی تزریق کنید، مانند پخش یک رویداد لمسی روی تبلت با همان مختصات روی تلفن.
- دادههای صوتی را از برنامهی پخششده ضبط کنید.
- در حالی که یک برنامه در حال پخش از میکروفون استفاده میکند، جریان میکروفون دستگاه محلی را با جریان میکروفون دستگاه متصل جایگزین کنید.
- در حالی که یک برنامهی پخش جریانی از دوربین استفاده میکند، جریان دوربین دستگاه محلی را با جریان دوربین دستگاه متصل جایگزین کنید.
- اعلانها را از دستگاه محلی به دستگاه متصل مدیریت و پخش کنید و در مورد اعلانها اقدامات لازم را انجام دهید.
- ابردادهها (metadata) را از دستگاه محلی، مانند لیست برنامههای موجود در دستگاه محلی، به دستگاه متصل منتقل کنید.
- درخواست تأیید دستگاه.