اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release بدلاً من aosp-main لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
في نظام التشغيل Android 13، تتيح ميزة بث التطبيقات للهواتف
بث تطبيقاتك على الأجهزة المتصلة، كما تتيح لهذه الأجهزة التفاعل مع
التطبيقات. يتيح الدور الجديد COMPANION_DEVICE_APP_STREAMING
للتطبيق إنشاء وإدارة خوادم وكيلة للأجهزة البعيدة المتصلة بهدف
بث التطبيقات من الجهاز المحلي إلى الجهاز البعيد. يمكن للتطبيق الذي يمتلك دور
COMPANION_DEVICE_APP_STREAMING الحصول على أذونات لإنشاء شاشة
افتراضية وتشغيل تطبيق عليها، ثم بث فيديو للتطبيق الذي تم تشغيله على
جهاز آخر. يمكن أيضًا لتطبيق "حامل الدور" إدخال أحداث الإدخال والميكروفون
المستلَمة من جهاز بعيد إلى الجهاز المحلي، كما لو كان هذا الجهاز
متصلاً كجهاز طرفي.
تعمل ميزة "بث التطبيقات" من خلال الاستفادة من الشاشات الافتراضية. ينشئ "مدير
الأجهزة الافتراضية" شاشة افتراضية منفصلة عن الشاشة
الرئيسية المرئية. عندما يوافق المستخدم على بدء بث تطبيق، يتم
تشغيل التطبيق على الشاشة الافتراضية أو نقله إليها. يتم نقل محتوى الشاشة الافتراضية في بث فيديو إلى الجهاز المتصل لعرضه.
يتضمّن "مدير الأجهزة الافتراضية" واجهات برمجة تطبيقات تتيح إنشاء مثيلات
VirtualDevice وتسجيلها وإدارتها.
إنّ مثيل VirtualDevice هو وكيل للجهاز المتصل و
إمكاناته. تتيح إحدى نُسخ VirtualDevice لجهاز متصل إمكانية تلقّي بث تطبيقات وارد و
عرضه والتفاعل معه، وذلك من خلال تنفيذ ما يلي:
إنشاء مثيل
VirtualDisplay
مخصّص للعرض على شاشة جهاز متصل
إدخال بث صوتي عن بُعد، مثل بث من ملف صوتي على الجهاز المرتبط، إلى الجهاز المحلي لتشغيله
إدخال أحداث الإدخال عن بُعد، مثل محتوى ملف .txt من ملف .txt على الجهاز المرتبط، إلى الجهاز المحلي لتشغيله
تطبيق "مدير الجهاز المصاحب"
تدير أداة إدارة المحتوى في الجهاز حالة الاتصال وتفرض متطلبات الدور التي
يجب استيفاؤها لتفعيل بث التطبيقات.
يوضِّح الشكل التالي التفاعلات بين الجهازَين المحلي والجهاز البعيد أثناء بث التطبيقات:
الشكل 1: التفاعلات بين الجهازَين المحلي والبعيد أثناء بث التطبيقات
تنفيذ دور بث التطبيق المصاحب
يمكن للمصنّعين الأصليين للأجهزة تنفيذ تطبيق يتضمّن دور COMPANION_DEVICE_APP_STREAMING ل
إتاحة تجربة غنية وآمنة على جميع الأجهزة.
لإنشاء جهاز افتراضي لتفعيل بث التطبيقات، يجب أن يكون التطبيق حامل دور
دور COMPANION_DEVICE_APP_STREAMING. عند منح الدور، يتلقّى التطبيق الإذن
CREATE_VIRTUAL_DEVICE، ما يتيح له
إنشاء جهاز افتراضي. من المتوقّع أن ينفّذ مالكو الأدوار
بث التطبيقات من خلال إنشاء مثيل VirtualDevice
يعمل كخادم وكيل لجهاز متصل. تقدّم فئة VirtualDevice
طُرقًا تتيح استخراج سطح مركب لشاشة
افتراضية، وهو مناسب للبث إلى جهاز آخر. توفّر فئة VirtualDevice
أيضًا واجهات برمجة تطبيقات لإدخال أحداث الإدخال التي تحدث على جهاز بعيد في
الجهاز المحلي، ما يتيح لتطبيق يعمل على جهاز محلي أن يبدو
كأنّه يعمل على جهاز بعيد.
اتّبِع الخطوات التالية لتنفيذ دور البث في التطبيق المصاحب:
أنشئ مثيلًا لنظام إدارة البيانات الوصفية
AssociationRequest
لطلب دور COMPANION_DEVICE_APP_STREAMING. يتلقّى التطبيق
إذن CREATE_VIRTUAL_DEVICE عند منح الدور.
اتّصل بـ
VirtualDeviceManager#create()
لإنشاء مثيل VirtualDevice. باستخدام مثيل VirtualDevice، يمكن للتطبيق
إنشاء شاشات افتراضية ومدخلات افتراضية وإدارتها.
اطلق النية المعلّقة للإشعار على الشاشة الافتراضية وأنشئ تسجيلًا
فيديو لهذه الشاشة.
أنشئ اتصالاً بالجهاز المتصل وبث الشاشة الافتراضية
على الجهاز المتصل.
إعادة إدخال أحداث الإدخال من الجهاز المتصل إلى الجهاز المحلي
من خلال واجهات برمجة تطبيقات VirtualDevice
عندما يغلق المستخدم تطبيق البث على الجهاز البعيد، يُرجى إنهاء البث
وإيقاف تشغيل مثيل VirtualDevice. في هذه المرحلة، يتم تشغيل تطبيق البث الذي سبق استخدامه في الخلفية على الجهاز المحلي ويتم إغلاق الربط.
إذا لزم الأمر، انتظِر المزيد من الإشارات من الجهاز المتصل لإعادة بث المحتوى من التطبيق.
يتحمّل التطبيق مسؤولية الاتصال بالجهاز البعيد والإبلاغ عن
حالة الاتصال إلى "مدير الجهاز المصاحب" وفرض متطلبات الأمان على النحو الموضّح في
CDD.
متطلبات حامل دور COMPANION_DEVICE_APP_STREAMING
يمنح تطبيق "مدير الجهاز المصاحب" دور COMPANION_DEVICE_APP_STREAMING عندما يربط المستخدم تطبيقًا لبث المحتوى بجهاز. يرتبط هذا الدور بملف شخصي
للجهاز، ما يتيح التحكّم في التطبيقات التي يمكن إضافتها إلى "متجر
Play" والتي تتطابق مع هذا الملف الشخصي. اطّلِع على أدوار
Android
للحصول على قائمة بمتطلبات دور COMPANION_DEVICE_APP_STREAMING. يُرجى التواصل مع نقطة اتصالك في Google للحصول على مزيد من المعلومات.
صلاحيات حامل دور COMPANION_DEVICE_APP_STREAMING
لتنفيذ بث التطبيقات، يفترض دور COMPANION_DEVICE_APP_STREAMING أنّه
يمتلك تطبيق صاحب الدور الإمكانات والسلوكيات التالية:
إنشاء اتصالات بالأجهزة الأخرى وإدارتها
يمكنك إنشاء شاشات افتراضية موثوق بها وإدارتها، بما في ذلك الشاشات غير المُقفَلة، على النحو التالي:
ابدأ الأنشطة على الشاشة الافتراضية.
يمكنك إعادة إدراج الأحداث التي تحدث على تطبيق يتم بثّه على جهاز متصل
على الجهاز المحلي، مثل تشغيل حدث لمس على الجهاز اللوحي عند
الإحداثيات نفسها على الهاتف.
تسجيل بيانات الصوت من التطبيق الذي يتم بثّه
استبدال بث الميكروفون على الجهاز المحلي ببث
الميكروفون على جهاز متصل أثناء استخدام تطبيق يتم بثه للميكروفون
استبدال بث كاميرا الجهاز المحلي ببث كاميرا جهاز متصل أثناء استخدام تطبيق يتم بث محتواه للكاميرا
إدارة الإشعارات وبثّها من الجهاز المحلي إلى
الجهاز المتصل واتّخاذ الإجراءات بشأن الإشعارات
بث البيانات الوصفية من الجهاز المحلي، مثل قائمة التطبيقات المتاحة على
الجهاز المحلي، إلى الجهاز المتصل
اطلب إثبات ملكية الجهاز.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Companion app streaming\n\nIn Android 13, the app streaming feature lets phones\nstream their apps to connected devices, and lets those devices interact with the\napps. A new [`COMPANION_DEVICE_APP_STREAMING`](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/modules/Permission/PermissionController/res/xml/roles.xml;drc=7816a6a2bfed3e4727f6b6f767a3e0f825dce880;l=1070)\nrole lets an app create and manage proxies for connected remote devices to\nstream apps from the local device to the remote device. The app holding the\n`COMPANION_DEVICE_APP_STREAMING` role can obtain permissions to create a virtual\ndisplay, launch an app on it, and then stream a video of the launched app to\nanother device. The role holder app can also inject input and microphone events\nreceived from a remote device back into the local device, as if that device were\nconnected as a peripheral.\n\nArchitecture\n------------\n\nBeginning in Android 13, the new [Virtual Device\nManager](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/core/java/android/companion/virtual/VirtualDeviceManager.java)\nand the [Companion Device Manager\n(CDM)](https://developer.android.com/reference/android/companion/CompanionDeviceManager)\nform the key building blocks to support app streaming and interaction with\nremote, connected devices.\n\n### Virtual Device Manager\n\nApp streaming works by taking advantage of *virtual displays*. The Virtual\nDevice Manager creates a virtual display that's separate from the visible\nprimary display. When the user consents to start streaming an app, the app is\nlaunched on, or transferred to, the virtual display. The contents of the virtual\ndisplay are transferred in a video stream to the connected device to be\ndisplayed.\n\nThe Virtual Device Manager includes APIs that enable the creation, registration,\nand management of\n[`VirtualDevice`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/core/java/android/companion/virtual/VirtualDeviceManager.java;drc=725dad7d717fc641d3ee3adb782270b82ee92cd8;l=152) instances.\n\nA `VirtualDevice` instance is a proxy for the connected device and its\ncapabilities. A `VirtualDevice` instance enables a connected device to receive,\ndisplay and interact with an incoming app stream, by doing the following:\n\n- Creating a [`VirtualDisplay`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/core/java/android/hardware/display/VirtualDisplay.java) instance intended to be displayed on a connected device's display.\n- Injecting a remote audio stream, such as from the connected device's microphone, into the local device for playback.\n- Injecting remote input events, such as the from the connected device's keyboard, into the local device for playback.\n\n### Companion Device Manager\n\nThe CDM manages the connectivity state and enforces the role requirements that\nmust be met to enable app streaming.\n\nThe following figure illustrates the interactions between the local and remote\ndevice during app streaming:\n\n**Figure 1.** Interactions between the local and remote devices during app streaming\n\nImplementation of the companion app streaming role\n--------------------------------------------------\n\nOEMs can implement an app with the `COMPANION_DEVICE_APP_STREAMING` role to\nenable a rich and secure cross-device experience on their devices.\n| **Note:** Only preinstalled priv-apps are allowed to hold the `COMPANION_DEVICE_APP_STREAMING` role. OEMs must ensure that the app is submitted for review as part of the device verification process. Reach out to your Google point of contact for more information.\n\nTo create a virtual device to enable app streaming, an app must be a role holder\nof the `COMPANION_DEVICE_APP_STREAMING` role. When the role is granted, the app\nreceives the\n[`CREATE_VIRTUAL_DEVICE`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/core/res/AndroidManifest.xml;drc=14543d1ec72202422373622ee818fe7549be5c7a;l=6440) permission, which enables\nthe app to create a virtual device. Role\nholders are expected to implement app streaming by creating a `VirtualDevice`\ninstance that acts as a proxy for a connected device. The `VirtualDevice` class\nprovides methods that enable the extraction of a composited surface of a virtual\ndisplay, suitable for streaming to another device. The `VirtualDevice` class\nalso provides APIs for injecting input events that occur on a remote device into\nthe local device, enabling an app that's running on a local device to appear as\nif it's running natively on a remote device.\n\nFollow these steps to implement the companion app streaming role:\n\n1. Create an app that requests the\n [`REQUEST_COMPANION_PROFILE_APP_STREAMING`](https://developer.android.com/reference/android/Manifest.permission#REQUEST_COMPANION_PROFILE_APP_STREAMING)\n permission in the manifest.\n\n2. Prompt the user to grant the app permission to perform app streaming.\n\n3. Create a CDM\n [`AssociationRequest`](https://developer.android.com/reference/android/companion/CompanionDeviceManager#associate(android.companion.AssociationRequest,%20java.util.concurrent.Executor,%20android.companion.CompanionDeviceManager.Callback))\n instance to request a `COMPANION_DEVICE_APP_STREAMING` role. The app\n receives the `CREATE_VIRTUAL_DEVICE` permission when the role is granted.\n\n4. Call\n [`VirtualDeviceManager#create()`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/core/java/android/companion/virtual/VirtualDeviceManager.java;drc=725dad7d717fc641d3ee3adb782270b82ee92cd8;l=67)\n to create a `VirtualDevice` instance. With a `VirtualDevice` instance, the\n app can create and manage virtual displays and virtual inputs.\n\n5. Launch the notification's pending intent on the virtual display and create a\n video capture of that display.\n\n6. Create a connection to the connected device and stream the virtual display\n over to the connected device.\n\n7. Inject back input events from the connected device into the local device\n through the `VirtualDevice` APIs.\n\n8. When the user closes the streaming app on the remote device, end the stream\n and tear down the `VirtualDevice` instance. At this point, the previously\n streaming app runs in the background on the local device and the connection\n is closed.\n\n9. If needed, await more signals from the connected device to restart the app\n streaming.\n\nThe app is responsible for connecting to the remote device, reporting the\nconnectivity state to CDM, and enforcing security requirements as described in\nthe [CDD](/docs/compatibility/13/android-13-cdd#316_companion_device_pairing).\n| **Note:** Google offers a closed-source implementation called Cross Device Service that enables app streaming from any Android phone running Android 13 or higher, to a Chromebook. OEMs can preload the Cross Device Service APK under the priv-app directory.\n\n### COMPANION_DEVICE_APP_STREAMING role holder requirements\n\nThe CDM grants the `COMPANION_DEVICE_APP_STREAMING` role when the user\nassociates an app streaming app with a device. This role is associated with a\ndevice profile so there's some control over which apps can be added to the Play\nStore that match this profile. See [Android\nroles](/docs/core/permissions/android-roles)\nfor a list of the `COMPANION_DEVICE_APP_STREAMING` role requirements. Reach out\nto your Google point of contact for more information.\n\n### COMPANION_DEVICE_APP_STREAMING role holder capabilities\n\nTo perform app streaming, the `COMPANION_DEVICE_APP_STREAMING` role assumes that\nthe role holder app has the following capabilities and behaviors:\n\n- Create and manage connections to other devices.\n- Create and manage trusted virtual displays, including unlocked displays, as follows:\n - Start activities on the virtual display.\n - Inject events that happen on a streamed app on a connected device back on the local device, such as playing a touch event on the tablet at the same coordinates on the phone.\n - Capture audio data from the streamed app.\n - Replace the local device's microphone stream with a connected device's microphone stream while a streamed app is using the microphone.\n - Replace the local device's camera stream with a connected device's camera stream while a streamed app is using the camera.\n- Manage and stream notifications from the local device to the connected device, and take actions on notifications.\n- Stream metadata from the local device, such as the list of apps available on the local device, to the connected device.\n- Request device verification."]]