لتنفيذ تطبيق تفاعلي صوتي (VIA)، عليك إكمال الخطوات التالية:
- إنشاء هيكل VIA
- (اختياري) تنفيذ مسار الإعداد/تسجيل الدخول
- (اختياري) نفِّذ شاشة "الإعدادات".
- عليك الإفصاح عن الأذونات المطلوبة في ملف البيان.
- تنفيذ واجهة مستخدم للوحة الصوت
- تنفيذ ميزة التعرّف على الصوت (يجب أن يشمل ذلك تنفيذ واجهة برمجة التطبيقات RecognitionService).
- تنفيذ عبارة (يمكنك اختياريًا تنفيذ واجهة برمجة التطبيقات TextToSpeech).
- تنفيذ الطلبات يمكنك الاطّلاع على هذا المحتوى في مقالة تنفيذ الطلبات.
توضّح الأقسام التالية كيفية إكمال كل خطوة من الخطوات المذكورة أعلاه.
إنشاء بنية VIA
ملفات البيانات
يتم رصد التطبيق على أنّه تطبيق يتضمّن ميزة "التفاعل الصوتي" عند تضمين ما يلي في ملف البيان:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myvoicecontrol"> ... <application ... > <service android:name=".MyInteractionService" android:label="@string/app_name" android:permission="android.permission.BIND_VOICE_INTERACTION" android:process=":interactor"> <meta-data android:name="android.voice_interaction" android:resource="@xml/interaction_service" /> <intent-filter> <action android:name= "android.service.voice.VoiceInteractionService" /> </intent-filter> </service> </application> </manifest>
في هذا المثال:
- يجب أن توفّر تطبيقات VIA خدمة توسّع
VoiceInteractionService، مع فلتر أهداف للإجراءVoiceInteractionService.SERVICE_INTERFACE ("android.service.voice.VoiceInteractionService"). - يجب أن يكون لدى هذه الخدمة إذن توقيع النظام
BIND_VOICE_INTERACTION. - يجب أن تتضمّن هذه الخدمة
android.voice_interactionملف بيانات وصفية يحتوي على ما يلي:res/xml/interaction_service.xml
<voice-interaction-service xmlns:android="http://schemas.android.com/apk/res/android" android:sessionService= "com.example.MyInteractionSessionService" android:recognitionService= "com.example.MyRecognitionService" android:settingsActivity= "com.example.MySettingsActivity" android:supportsAssist="true" android:supportsLaunchVoiceAssistFromKeyguard="true" android:supportsLocalInteraction="true" />
للحصول على تفاصيل حول كل حقل، يُرجى الاطّلاع على R.styleable#VoiceInteractionService.
بما أنّ جميع خدمات المساعدين الرقميين المستندة إلى الذكاء الاصطناعي هي أيضًا خدمات للتعرّف على الصوت، يجب أيضًا تضمين ما يلي في ملف البيان:
AndroidManifest.xml
<manifest ...> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <application ...> ... <service android:name=".RecognitionService" ...> <intent-filter> <action android:name="android.speech.RecognitionService" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.speech" android:resource="@xml/recognition_service" /> </service> </application> </manifest>
تتطلّب خدمات التعرّف على الصوت أيضًا جزء البيانات الوصفية التالي:
res/xml/recognition_service.xml
<recognition-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:settingsActivity="com.example.MyRecognizerSettingsActivity" />VoiceInteractionService وVoiceInteractionSessionService وVoiceInteractionSession
يوضّح الرسم البياني التالي دورة حياة كل من هذه الكيانات:

الشكل 1. مراحل النشاط
كما ذكرنا سابقًا، VoiceInteractionService هي نقطة الدخول إلى VIA. تتضمّن المسؤوليات الرئيسية لهذه الخدمة ما يلي:
- تهيئة أي عمليات يجب أن تظل قيد التشغيل طالما أنّ هذا التطبيق VIA هو التطبيق النشط على سبيل المثال، اكتشاف الكلمة المهمة
- تعرض هذه السمة الإجراءات الصوتية المتوافقة (راجِع ميزة "النقر للتحدث" في المساعد الصوتي).
- بدء جلسات التفاعل الصوتي من شاشة القفل (keyguard)
في أبسط أشكاله، سيبدو تنفيذ VoiceInteractionService على النحو التالي:
public class MyVoiceInteractionService extends VoiceInteractionService { private static final List<String> SUPPORTED_VOICE_ACTIONS = Arrays.asList( CarVoiceInteractionSession.VOICE_ACTION_READ_NOTIFICATION, CarVoiceInteractionSession.VOICE_ACTION_REPLY_NOTIFICATION, CarVoiceInteractionSession.VOICE_ACTION_HANDLE_EXCEPTION ); @Override public void onReady() { super.onReady(); // TODO: Setup hotword detector } @NonNull @Override public Set<String> onGetSupportedVoiceActions( @NonNull Set<String> voiceActions) { Set<String> result = new HashSet<>(voiceActions); result.retainAll(SUPPORTED_VOICE_ACTIONS); return result; } ... }
يجب تنفيذ VoiceInteractionService#onGetSupportedVoiceActions() للتعامل مع ميزة النقر للقراءة من "المساعد الصوتي".
يستخدم النظام VoiceInteractionSessionService لإنشاء VoiceInteractionSession والتفاعل معه. وهي مسؤولة فقط عن بدء جلسات جديدة عند الطلب.
public class MyVoiceInteractionSessionService extends VoiceInteractionSessionService { @Override public VoiceInteractionSession onNewSession(Bundle args) { return new MyVoiceInteractionSession(this); } }
أخيرًا، يتم تنفيذ معظم العمل في VoiceInteractionSession. قد تتم إعادة استخدام مثيل جلسة واحد لإكمال تفاعلات متعددة للمستخدم. في AAOS، يتوفّر CarVoiceInteractionSession مساعد
يساعد في تنفيذ بعض الوظائف الفريدة الخاصة بالسيارات.
public class MyVoiceInteractionSession extends CarVoiceInteractionSession { public InteractionSession(Context context) { super(context); } @Override protected void onShow(String action, Bundle args, int showFlags) { closeSystemDialogs(); // TODO: Unhide UI and update UI state // TODO: Start processing audio input } ... }
يتضمّن VoiceInteractionSession مجموعة كبيرة من طرق معاودة الاتصال التي تم توضيحها في الأقسام التالية. يمكنك الاطّلاع على المستندات الخاصة بـ VoiceInteractionSession للحصول على قائمة كاملة.
تنفيذ مسار إعداد/تسجيل دخول
يمكن إكمال عملية الإعداد وتسجيل الدخول في الحالات التالية:
- أثناء إعداد الجهاز (معالج الإعداد)
- أثناء تبديل خدمة التفاعل الصوتي (الإعدادات)
- عند تشغيل التطبيق لأول مرة بعد اختياره
للاطّلاع على تفاصيل حول تجربة المستخدم المقترَحة والإرشادات المرئية، يُرجى الرجوع إلى مساعد Google مثبّت مسبقًا: إرشادات تجربة المستخدم.
عملية الإعداد أثناء تبديل الخدمة الصوتية
يمكن للمستخدم دائمًا اختيار VIA لم يتم ضبطه بشكل صحيح. يمكن أن يحدث ذلك للأسباب التالية:
- تخطّى المستخدم "معالج الإعداد" بالكامل أو تخطّى خطوة ضبط التفاعل الصوتي.
- اختار المستخدم تطبيق VIA مختلفًا عن التطبيق الذي تم ضبطه أثناء إعداد الجهاز.
في أي حال، تتوفّر في VoiceInteractionService عدة طرق لتشجيع المستخدم على إكمال عملية الإعداد:
- تذكير بالإشعارات
- الردّ الصوتي التلقائي عندما يحاول المستخدم استخدام الميزة
ملاحظة: لا يُنصح بشدة بعرض مسار إعداد VIA بدون طلب صريح من المستخدم. وهذا يعني أنّه على تطبيقات المركبات (VIA) تجنُّب عرض المحتوى تلقائيًا على وحدة التحكم الرئيسية (HU) أثناء تشغيل الجهاز أو نتيجةً لتبديل المستخدم أو إلغاء القفل.
تذكير بالإشعارات
تذكير الإشعارات هو طريقة غير تطفّلية للإشارة إلى الحاجة إلى الإعداد، وتزويد المستخدمين بإمكانية الانتقال إلى مسار إعداد المساعد.

الشكل 2. تذكير بالإشعارات
إليك طريقة عمل هذا المسار:

الشكل 3. مسار التذكير بالإشعارات
رد صوتي
هذا هو أبسط مسار يمكن تنفيذه، حيث يتم بدء عبارة عند تلقّي ردّ من VoiceInteractionSession#onShow()، ويتم توضيح الإجراء المطلوب للمستخدم، ثم يُسأل (إذا كان الإعداد مسموحًا به وفقًا لحالة قيود تجربة المستخدم) عمّا إذا كان يريد بدء مسار الإعداد. وإذا لم يكن الإعداد ممكنًا في الوقت الحالي، عليك توضيح هذا الموقف أيضًا.
الإعداد عند الاستخدام لأول مرة
من الممكن دائمًا أن يفعّل المستخدم ميزة "المساعد الرقمي من Google" التي لم يتم ضبطها بشكل صحيح. في مثل هذه الحالات:
- أبلِغ المستخدم شفهيًا بهذا الموقف (على سبيل المثال، "لكي تعمل بشكل صحيح، أحتاج منك إلى إكمال بضع خطوات … ").
- إذا سمح محرّك قيود تجربة المستخدم (راجِع UX_RESTRICTIONS_NO_SETUP)، اسأل المستخدم عمّا إذا كان يريد بدء عملية الإعداد، ثم افتح شاشة "الإعدادات" الخاصة بميزة "المساعد الرقمي من Google".
- في الحالات الأخرى (مثلاً، إذا كان المستخدم يقود السيارة)، يجب ترك إشعار للمستخدم كي ينقر على الخيار عندما يكون ذلك آمنًا.
إنشاء شاشات إعدادات التفاعل الصوتي
يجب تطوير شاشات الإعداد وتسجيل الدخول على أنّها أنشطة عادية. يمكنك الاطّلاع على إرشادات تجربة المستخدم والإرشادات المرئية لتطوير واجهة المستخدم في المساعدات المحمَّلة مسبقًا: إرشادات تجربة المستخدم.
الإرشادات العامة:
- يجب أن تسمح المساعدات الافتراضية للمستخدمين بإيقاف عملية الإعداد واستئنافها في أي وقت.
- يجب عدم السماح بعملية الإعداد إذا كان قيد
UX_RESTRICTIONS_NO_SETUPساريًا. لمزيد من التفاصيل، يُرجى الاطّلاع على إرشادات تشتيت انتباه السائق. - يجب أن تتطابق شاشات الإعداد مع نظام التصميم لكل مركبة. يجب أن يكون التنسيق العام للشاشة والرموز والألوان والجوانب الأخرى متسقًا مع بقية واجهة المستخدم. يمكنك الاطّلاع على مقالة التخصيص لمعرفة التفاصيل.
تنفيذ شاشة إعدادات

الشكل 4. دمج الإعدادات
شاشات الإعدادات هي أنشطة Android عادية. في حال تنفيذ نقطة الدخول، يجب الإفصاح عنها في res/xml/interaction_service.xml كجزء من بيانات VIA (راجِع بيانات).
يُعدّ قسم "الإعدادات" مكانًا مناسبًا لمواصلة عملية الإعداد وتسجيل الدخول (إذا لم يكملها المستخدم) أو تقديم خيار تسجيل الخروج أو تبديل المستخدم إذا لزم الأمر. على غرار شاشات الإعداد الموضّحة أعلاه، يجب أن تتضمّن هذه الشاشات ما يلي:
- توفير خيار الرجوع إلى الشاشة السابقة في حزمة الشاشات (على سبيل المثال، إلى "إعدادات السيارة")
- ألا يكون مسموحًا به أثناء القيادة لمزيد من التفاصيل، يُرجى الاطّلاع على إرشادات تشتيت انتباه السائق.
- طابِق كل نظام تصميم مركبة. لمزيد من التفاصيل، يُرجى الاطّلاع على التخصيص.
تضمين الأذونات المطلوبة في ملف البيان
يمكن تقسيم الأذونات التي يتطلّبها تطبيق VIA إلى ثلاث فئات:
- أذونات توقيع النظام: هذه هي الأذونات التي يتم منحها فقط لملفات APK الموقَّعة من النظام والمثبَّتة مسبقًا. لا يمكن للمستخدمين منح هذه الأذونات، بل يمكن مصنّعي المعدات الأصلية فقط منحها عند إنشاء صور النظام. لمزيد من المعلومات حول الحصول على أذونات التوقيع، يُرجى الاطّلاع على منح أذونات ذات امتيازات على مستوى النظام.
- الأذونات الخطيرة: وهي أذونات يجب أن يمنحها المستخدم باستخدام مربّع الحوار PermissionsController. يمكن لمصنّعي المعدات الأصلية منح بعض هذه الأذونات مسبقًا إلى خدمة VoiceInteractionService التلقائية. ولكن بما أنّ هذا الإعداد التلقائي قد يختلف من جهاز إلى آخر، يجب أن تتمكّن التطبيقات من طلب هذه الأذونات عند الحاجة إليها.
- الأذونات الأخرى: هذه هي جميع الأذونات الأخرى التي لا تتطلّب تدخّل المستخدم. يتم منح هذه الأذونات تلقائيًا من خلال النظام.
في ضوء ما سبق، يركّز القسم التالي على طلب الأذونات الخطيرة فقط. يجب طلب الأذونات فقط أثناء تواجد المستخدم في شاشات تسجيل الدخول أو الإعدادات.
إذا لم يكن لدى التطبيق الأذونات اللازمة لتشغيله، فإنّ المسار المقترَح هو استخدام عبارة صوتية لشرح الموقف للمستخدم، وإرسال إشعار لتوفير عنصر تحكّم يمكن للمستخدم استخدامه للرجوع إلى شاشات إعدادات "المساعد الرقمي المدمج". لمزيد من التفاصيل، يُرجى الاطّلاع على 1. تذكير بالإشعارات
طلب الأذونات كجزء من شاشة الإعدادات
يتم طلب الأذونات الخطيرة باستخدام طريقة ActivityCompat#requestPermission() العادية (أو ما يعادلها). لمزيد من التفاصيل حول كيفية طلب الأذونات، يُرجى الاطّلاع على
طلب أذونات التطبيق.

الشكل 5. طلب الحصول على الأذونات
إذن برنامج تلقّي الإشعارات
لتنفيذ مسار TTR، يجب تصنيف تطبيقات VIA على أنّها مستمع إشعارات. هذا ليس إذنًا بحد ذاته، بل هو إعداد يتيح للنظام إرسال إشعارات إلى المستمعين المسجّلين. لمعرفة ما إذا تم منح "مساعد Google" إذن الوصول إلى هذه المعلومات، يمكن للتطبيقات إجراء ما يلي:
- (اختياري) تحقَّق ممّا إذا كانت هناك أدوات استماع للإشعارات مسبقًا باستخدام
CarAssistUtils#assistantIsNotificationListener(). يمكن إجراء ذلك، على سبيل المثال، أثناء عملية الإعداد. - (إلزامي) التفاعل مع معالجة
CarVoiceInteractionSession#onShow()باستخدام actionVOICE_ACTION_HANDLE_EXCEPTIONوالاستثناءEXCEPTION_NOTIFICATION_LISTENER_PERMISSIONS_MISSING.
إذا لم يتم منح هذا الإذن مسبقًا، على "المساعد الافتراضي في السيارة" توجيه المستخدم إلى قسم "الوصول إلى الإشعارات" في "إعدادات السيارة"، وذلك باستخدام مجموعة من العبارات والإشعارات. يمكن استخدام الرمز البرمجي التالي لفتح القسم المناسب في تطبيق الإعدادات:
private void requestNotificationListenerAccess() {
Intent intent = new Intent(Settings
.ACTION_NOTIFICATION_LISTENER_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
startActivity(intent);
}تنفيذ واجهة مستخدم للوحة صوتية
عندما يتلقّى VoiceInteractionSession ردّ اتصال onShow()،
يمكنه عرض واجهة مستخدم للوحة صوتية. للاطّلاع على إرشادات مرئية وإرشادات حول تجربة المستخدم بشأن تنفيذ لوحة التحكم الصوتية، يُرجى الرجوع إلى المساعدون المحمَّلون مسبقًا: إرشادات تجربة المستخدم.

الشكل 6. عرض لوحة الصوت
هناك خياران لكيفية تنفيذ واجهة المستخدم هذه:
- تجاهل
VoiceInteractionSession#onCreateContentView() - بدء نشاط باستخدام "
VoiceInteractionSession#startAssistantActivity()"
استخدام onCreateContentView()
هذه هي الطريقة التلقائية لعرض لوحة صوتية. ينشئ فئة VoiceInteractionSession
base نافذة ويدير دورة حياتها طالما أنّ جلسة صوتية نشطة. يجب أن تتجاهل التطبيقات VoiceInteractionSession#onCreateContentView()
وأن تعرض طريقة عرض مرتبطة بهذه النافذة فور إنشاء الجلسة. يجب أن يكون هذا العرض غير مرئي في البداية. عندما يبدأ تفاعل صوتي، يجب إظهار هذا العرض على VoiceInteractionSession#onShow() ثم إخفاؤه مجددًا على VoiceInteractionSession#onHide().
public class MyVoiceInteractionSession extends CarVoiceInteractionSession { private View mVoicePlate; … @Override public View onCreateContentView() { mVoicePlate = inflater.inflate(R.layout.voice_plate, null); … } @Override protected void onShow(String action, Bundle args, int showFlags) { // TODO: Update UI state to "listening" mVoicePlate.setVisibility(View.VISIBLE); } @Override public void onHide() { mVoicePlate.setVisibility(View.GONE); } … }
عند استخدام هذه الطريقة، قد تحتاج إلى تعديل VoiceInteractionSession#onComputeInsets()
لاحتساب المناطق المحجوبة في واجهة المستخدم.
استخدام startAssistantActivity()
في هذه الحالة، يفوّض VoiceInteractionSession معالجة واجهة مستخدم لوحة الصوت إلى نشاط عادي. عند استخدام هذا الخيار، يجب أن يوقف تنفيذ VoiceInteractionSession
إنشاء نافذة المحتوى التلقائية (راجِع استخدام onCreateContentView()) في معاودة الاتصال onPrepareShow(). في VoiceInteractionSession#onShow()، ستبدأ الجلسة نشاط لوحة الصوت باستخدام VoiceInteractionSession#startAssistantActivity(). تبدأ هذه الطريقة واجهة المستخدم بإعدادات النافذة وعلامات النشاط المناسبة.
public class MyVoiceInteractionSession extends CarVoiceInteractionSession { … @Override public void onPrepareShow(Bundle args, int showFlags) { super.onPrepareShow(args, showFlags); setUiEnabled(false); } @Override protected void onShow(String action, Bundle args, int showFlags) { closeSystemDialogs(); Intent intent = new Intent(getContext(), VoicePlateActivity.class); intent.putExtra(VoicePlateActivity.EXTRA_ACTION, action); intent.putExtra(VoicePlateActivity.EXTRA_ARGS, args); startAssistantActivity(intent); } … }
للحفاظ على التواصل بين هذا النشاط و
VoiceInteractionSession، قد يكون من الضروري استخدام مجموعة من النوايا الداخلية أو ربط الخدمة. على سبيل المثال، عند استدعاء VoiceInteractionSession#onHide()، يجب أن تكون الجلسة قادرة على تمرير هذا الطلب إلى النشاط.
ملاحظة مهمة: في السيارات، لا يمكن عرض سوى الأنشطة التي تمّت إضافة تعليقات توضيحية خاصة إليها أو الأنشطة المدرَجة في "قائمة السماح" الخاصة بتجربة المستخدم أثناء القيادة. وينطبق ذلك أيضًا على الأنشطة التي تبدأ بـ VoiceInteractionSession#startAssistantActivity(). يُرجى تذكُّر إضافة تعليق توضيحي إلى نشاطك باستخدام <meta-data
android:name="distractionOptimized" android:value="true"/> أو تضمين هذا النشاط في المفتاح systemActivityWhitelist ضمن ملف /packages/services/Car/service/res/values/config.xml. لمزيد من المعلومات، يُرجى الاطّلاع على إرشادات تشتيت انتباه السائق.
تنفيذ ميزة التعرّف على الصوت
في هذا القسم، ستتعرّف على كيفية تنفيذ ميزة "التعرّف على الصوت" من خلال رصد الكلمات المحورية والتعرّف عليها. كلمة التفعيل هي كلمة يتم استخدامها لبدء طلب بحث جديد أو إجراء من خلال الصوت. على سبيل المثال، "Ok Google" أو "Hey Google".
رصد الكلمة المفتاح من خلال معالج الإشارات الرقمية
يتيح نظام التشغيل Android الوصول إلى أداة رصد الكلمات المفتاحية التي تعمل دائمًا على مستوى معالج الإشارات الرقمية (DSP) من خلال AlwaysOnHotwordDetector.
طريقة لتنفيذ ميزة "اكتشاف الكلمة المهمة" مع استهلاك منخفض لوحدة المعالجة المركزية ينقسم استخدام هذه الوظيفة إلى جزأين:
- إنشاء مثيل من
AlwaysOnHotwordDetector - تسجيل نموذج صوتي لرصد الكلمة المهمة
يمكن أن ينشئ تنفيذ VoiceInteractionService أداة رصد للكلمة المفتاح باستخدام
VoiceInteractionService#createAlwaysOnHotwordDetector()،
مع تمرير عبارة مفتاح وموقع جغرافي يريد استخدامهما في عملية الرصد. نتيجةً لذلك، يتلقّى التطبيق ردّ اتصال onAvailabilityChanged() يتضمّن إحدى القيم المحتملة التالية:
-
STATE_HARDWARE_UNAVAILABLE. لا تتوفّر إمكانية استخدام معالج الإشارات الرقمية على الجهاز. في هذه الحالة، يتم استخدام ميزة "رصد الكلمة المفتاح" في البرامج. STATE_HARDWARE_UNSUPPORTED. لا تتوفّر ميزة "الاستماع الذكي" بشكل عام، ولكنّها لا تتوافق مع مجموعة العبارات الرئيسية واللغة المحدّدة. يمكن للتطبيق اختيار استخدام ميزة رصد الكلمة المفتاح من خلال البرامج.-
STATE_HARDWARE_ENROLLED. ميزة "رصد الكلمة المفتاح" جاهزة ويمكن بدء استخدامها من خلال استدعاء الطريقةstartRecognition(). STATE_HARDWARE_UNENROLLED. لا يتوفّر نموذج صوتي للعبارة الرئيسية المطلوبة، ولكن يمكن إجراء عملية التسجيل.
يمكن إكمال عملية تسجيل نماذج الصوت الخاصة بميزة "رصد الكلمة المفتاح" باستخدام IVoiceInteractionManagerService#updateKeyphraseSoundModel().
يمكن تسجيل نماذج متعددة في النظام في وقت معيّن، ولكن لا يرتبط AlwaysOnHotwordDetector إلا بنموذج واحد.
قد لا تتوفّر ميزة "اكتشاف الكلمة المهمة" في معالج الإشارات الرقمية على بعض الأجهزة. على مطوّري VIA التحقّق من إمكانات الأجهزة باستخدام طريقة getDspModuleProperties(). للاطّلاع على نموذج رمز يوضّح كيفية تسجيل نماذج الصوت، يُرجى الاطّلاع على VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java.
راجِع التسجيل المتزامن بشأن
التعرّف المتزامن على الكلمات المحفّزة.
اكتشاف الكلمة المهمة في البرامج
كما هو موضّح أعلاه، قد لا تتوفّر ميزة رصد الكلمات المحفّزة في معالج الإشارات الرقمية في جميع الأجهزة (على سبيل المثال، لا يوفّر محاكي Android محاكاة لمعالج الإشارات الرقمية). في هذه الحالة، يكون التعرّف على الصوت من خلال البرامج هو البديل الوحيد. لتجنُّب التداخل مع التطبيقات الأخرى التي قد تحتاج إلى الوصول إلى الميكروفون، يجب أن تصل المساعدات الافتراضية الذكية إلى إدخال الصوت باستخدام:
- يجب أن يستخدم تسجيل الصوت MediaRecorder.AudioSource.HOTWORD.
- يجب أن يكون لديك إذن
android.Manifest.permission.CAPTURE_AUDIO_HOTWORD.
كلا الثابتَين @hide ولا يتوفّران إلا للتطبيقات المجمّعة.
إدارة إدخال الصوت والتعرّف على الصوت
سيتم تنفيذ الإدخال الصوتي باستخدام فئة MediaRecorder.
لمزيد من المعلومات حول كيفية استخدام واجهة برمجة التطبيقات هذه، يُرجى الاطّلاع على نظرة عامة على MediaRecorder. من المتوقّع أيضًا أن تكون خدمات التفاعل الصوتي عمليات تنفيذ RecognitionService
للفئات. يستخدم أي تطبيق في النظام يتطلّب التعرّف على الصوت
للوصول إلى هذه الإمكانية. لإجراء التعرّف على الصوت والوصول إلى الميكروفون، يجب أن تحصل المساعدات الافتراضية الذكية على android.permission.RECORD_AUDIO.
ويُتوقّع أن تحصل التطبيقات التي تصل إلى تنفيذ RecognitionService على هذا الإذن أيضًا.
قبل الإصدار 10 من نظام التشغيل Android، كان يتم منح إذن الوصول إلى الميكروفون لتطبيق واحد فقط في كل مرة (باستثناء ميزة "التعرّف على الكلمات الرئيسية"، كما هو موضّح أعلاه). بدءًا من نظام التشغيل Android 10، يمكن مشاركة إذن الوصول إلى الميكروفون. لمزيد من المعلومات، يُرجى الاطّلاع على مشاركة إدخال الصوت.
الوصول إلى إخراج الصوت
عندما يكون المساعد الافتراضي جاهزًا لتقديم ردود شفهية، من المهم اتّباع مجموعة الإرشادات التالية:
- عند طلب التركيز على الصوت أو إدارة إخراج الصوت، يجب أن يستخدم التطبيق
AudioAttributes#USAGE_ASSISTANTوAudioAttributes#CONTENT_TYPE_SPEECHكسمات صوتية. - أثناء التعرّف على الكلام، يجب طلب التركيز على الصوت باستخدام
AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE. يُرجى العِلم أنّ بعض تطبيقات الوسائط قد لا تستجيب بشكل صحيح لأوامر الوسائط (راجِع تنفيذ أوامر الوسائط) عند إزالة تركيز الصوت منها.