لتنفيذ تطبيق تفاعل صوتي (VIA)، عليك إكمال الخطوات التالية:
- أنشئ هيكلًا لإعلان VIA.
- (اختياري) تنفيذ عملية إعداد/تسجيل دخول
- (اختياري) نفِّذ شاشة "الإعدادات".
- أدخِل الأذونات المطلوبة في ملف البيان.
- تنفيذ واجهة مستخدم لوحة صوتية
- تنفيذ ميزة التعرّف على الصوت (يجب أن يتضمّن تنفيذ واجهة برمجة التطبيقات RecognitionService API)
- تنفيذ العبارة (يمكنك اختياريًا تنفيذ TextToSpeech API).
- تنفيذ الأوامر يمكنك الاطّلاع على هذا المحتوى في تنفيذ الأوامر.
توضّح الأقسام التالية كيفية إكمال كل خطوة مذكورة أعلاه.
إنشاء إطار عمل 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>
في هذا المثال:
- يجب أن تعرض واجهات برمجة التطبيقات لعرض الإعلانات خدمة توفّر
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
.
بما أنّ جميع خدمات VIA هي أيضًا خدمات تعرّف على الصوت، يجب أيضًا
تضمين ما يلي في البيان:
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 هي العملية النشطة. على سبيل المثال، ميزة "اكتشاف الكلمة المهمة"
- تُبلغ عن الإجراءات الصوتية المتاحة (راجِع ميزة "النقر للقراءة" في "مساعد Google").
- بدء جلسات التفاعل الصوتي من شاشة القفل (شاشة القفل)
في أبسط أشكاله، سيبدو تنفيذ 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()
للتعامل مع
ميزة "النقر للقراءة" في "مساعد Google".
يستخدم النظام 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
للحصول على قائمة كاملة.
تنفيذ مسار إعداد/تسجيل الدخول
يمكن إجراء عملية الإعداد وتسجيل الدخول:
- أثناء إعداد الجهاز (معالج الإعداد)
- أثناء تبديل خدمة التفاعل الصوتي (الإعدادات)
- عند التشغيل لأول مرة عند اختيار التطبيق
لمعرفة تفاصيل عن تجربة المستخدم المقترَحة والإرشادات المرئية، يُرجى الاطّلاع على مقالة مساعِدون مُحمَّلون مُسبَقًا: إرشادات حول تجربة المستخدم.
الإعداد أثناء تبديل خدمة الصوت
يمكن للمستخدم دائمًا اختيار VIA لم يتم ضبطه بشكلٍ سليم. يمكن أن يرجع ذلك إلى الأسباب التالية:
- تخطّى المستخدم معالج الإعداد بالكامل أو تخطّى خطوة ضبط التفاعل باستخدام الصوت.
- اختار المستخدم رابطًا بديلاً لرابط VIA الذي تم ضبطه أثناء عملية إعداد الجهاز.
في جميع الأحوال، تتوفّر لدى VoiceInteractionService
عدة طرق لتشجيع المستخدم
على إكمال عملية الإعداد:
- تذكير بالإشعار
- الردّ الصوتي التلقائي عندما يحاول المستخدم استخدامه
ملاحظة: يُنصح بشدة بعدم عرض مسار إعداد VIA بدون طلب صريح من المستخدم. وهذا يعني أنّه يجب أن تتجنّب تطبيقات VIA عرض المحتوى تلقائيًا على HU أثناء تشغيل الجهاز أو نتيجة تبديل المستخدم أو فتح القفل.
تذكير بالإشعار
يُعدّ الإشعار التذكيري طريقة غير مزعجة للإشارة إلى الحاجة إلى الإعداد، وتوفير إمكانية للمستخدمين للانتقال إلى تدفق إعداد مساعد Google.
الشكل 2: تذكير بالإشعار
في ما يلي آلية عمل هذه العملية:
الشكل 3: مسار تذكير الإشعارات
رد صوتي
هذا هو أبسط مسار يمكن تنفيذه، حيث يتم بدء عبارة عندتلقّي مكالمة VoiceInteractionSession#onShow()
، وشرح ما يجب فعله للمستخدم، ثم سؤاله (إذا كان الإعداد مسموحًا به وفقًا لحالة قيود تجربة المستخدم) عما إذا كان يريد بدء مسار الإعداد. إذا لم يكن الإعداد ممكنًا في الوقت الحالي، يُرجى شرح
هذا الموقف أيضًا.
الإعداد عند الاستخدام لأول مرة
من الممكن دائمًا للمستخدم تفعيل عملية VIA لم يتم ضبطها بشكل صحيح. في هذه الحالات:
- إبلاغ المستخدم شفهيًا بهذا الموقف (على سبيل المثال، "لكي يعمل الجهاز بشكل صحيح، عليك إكمال بعض الخطوات … ").
- إذا كان محرّك قيود تجربة المستخدم يسمح بذلك (راجِع UX_RESTRICTIONS_NO_SETUP)، اسأل المستخدم عمّا إذا كان يريد بدء عملية الإعداد ثم افتح شاشة "الإعدادات" لوحدة التحكّم في الوصول.
- في حال عدم توفّر هذا الخيار (على سبيل المثال، إذا كان المستخدم يقود مركبة)، يجب إرسال إشعار للمستخدم يطلب منه النقر على الخيار عندما يكون من الآمن إجراء ذلك.
إنشاء شاشات إعداد التفاعل الصوتي
يجب تطوير شاشات الإعداد وتسجيل الدخول كأنشطة عادية. اطّلِع على إرشادات تجربة المستخدم والمرئيات لتطوير واجهة المستخدم في مساعِدون مُحمَّلون مُسبَقًا: إرشادات تجربة المستخدم.
الإرشادات العامة:
- يجب أن تسمح واجهات برمجة التطبيقات للمستخدمين بمقاطعة عملية الإعداد واستئنافها في أي وقت.
- يجب عدم السماح بالإعداد إذا كان قيد
UX_RESTRICTIONS_NO_SETUP
ساريًا. لمعرفة التفاصيل، يُرجى الاطّلاع على إرشادات حول تشتيت انتباه السائق. - يجب أن تتطابق شاشات الإعداد مع نظام التصميم لكل مركبة. يجب أن يكون تنسيق الشاشة العام والأيقونات والألوان والجوانب الأخرى متسقًا مع بقية واجهة المستخدم. اطّلِع على التخصيص للحصول على التفاصيل.
تنفيذ شاشة إعدادات
الشكل 4: دمج الإعدادات
شاشات الإعدادات هي أنشطة عادية على Android. في حال تنفيذها، يجب الإفصاح عن نقطة دخولها
في res/xml/interaction_service.xml
كجزء من ملفات بيان VIA (راجِع
ملفات البيان).
يُعدّ قسم "الإعدادات" مكانًا جيدًا لمواصلة عملية الإعداد وتسجيل الدخول (إذا لم يُكمِل المستخدم
هذه العملية) أو لتوفير خيار تسجيل الخروج أو تبديل المستخدم إذا لزم الأمر. على غرار شاشات الإعداد описанة أعلاه، يجب أن تستوفي هذه الشاشات الشروط التالية:
- يجب توفير خيار للخروج إلى الشاشة السابقة في حزمة الشاشات (على سبيل المثال، إلى "إعدادات السيارة").
- لا يُسمح باستخدامها أثناء القيادة. لمعرفة التفاصيل، يُرجى الاطّلاع على إرشادات حول تشتيت انتباه السائق.
- مطابقة كل نظام تصميم مركبة لمعرفة التفاصيل، يُرجى الاطّلاع على التخصيص.
إدراج الأذونات المطلوبة في ملف البيان
يمكن تقسيم الأذونات المطلوبة من خلال واجهة برمجة التطبيقات إلى ثلاث فئات:
- أذونات توقيع النظام: هذه أذونات لا يتم منحها إلا لملفات APK المثبَّتة مسبقًا والموقَّعة من النظام. لا يمكن للمستخدمين منح هذه الأذونات، ويمكن لمصنّعي الأجهزة الأصليين فقط منحها عند إنشاء صور النظام. لمزيد من المعلومات عن الحصول على أذونات التوقيع، يُرجى الاطّلاع على منح أذونات امتيازات النظام.
- الأذونات الخطيرة: هذه هي الأذونات التي يجب أن يمنح المستخدم إذنًا بها باستخدام مربّع الحوار PermissionsController. يمكن لمصنّعي الأجهزة الأصليين منح بعض هذه الأذونات مسبقًا لخدمة VoiceInteractionService التلقائية. ولكن بما أنّ هذه الإعدادات التلقائية قد تختلف من جهاز إلى آخر، من المفترض أن تتمكّن التطبيقات من طلب هذه الأذونات عند الحاجة.
- الأذونات الأخرى: هذه هي جميع الأذونات الأخرى التي لا تتطلّب تدخل المستخدم. يمنح النظام هذه الأذونات تلقائيًا.
استنادًا إلى ما سبق، يركز القسم التالي فقط على طلب الأذونات الخطيرة. يجب عدم طلب الأذونات إلا عندما يكون المستخدم في شاشة تسجيل الدخول أو الإعدادات.
إذا لم يكن التطبيق يملك الأذونات اللازمة للعمل، ننصح باستخدام عبارة صوتية لشرح الحالة للمستخدم وإرسال إشعار لتوفير خيار يمكن للمستخدم استخدامه للرجوع إلى شاشات إعدادات VIA. لمعرفة التفاصيل، يُرجى الاطّلاع على 1. تذكير الإشعار:
طلب الأذونات كجزء من شاشة الإعدادات
يتم طلب الأذونات الخطيرة باستخدام طريقة ActivityCompat#requestPermission()
العادية (أو ما يعادلها). لمعرفة التفاصيل حول كيفية طلب الأذونات، يُرجى الاطّلاع على مقالة
طلب أذونات التطبيق.
الشكل 5: طلب الأذونات
إذن برنامج تلقّي الإشعارات الصوتية
لتنفيذ عملية TTR، يجب تصنيف تطبيقات معالجة الوسائط على أنّها تطبيقات مستمع للرسائل. هذا ليس إذنًا بحد ذاته، بل هو أحد الإعدادات التي تسمح للنظام بإرسال إشعارات إلى المستمعين المسجّلين. لمعرفة ما إذا تم منح تطبيق VIA إذن الوصول إلى هذه المعلومات، يمكن للتطبيقات تنفيذ ما يلي:
- (اختياري) تحقَّق مسبقًا ممّا إذا كانت هناك تطبيقات تستمع إلى الإشعارات باستخدام
CarAssistUtils#assistantIsNotificationListener()
. ويمكن إجراء ذلك، على سبيل المثال، أثناء عملية الإعداد. - (إجراء إلزامي) تفاعل مع معالجة
CarVoiceInteractionSession#onShow()
باستخدام الإجراءVOICE_ACTION_HANDLE_EXCEPTION
والاستثناءEXCEPTION_NOTIFICATION_LISTENER_PERMISSIONS_MISSING
.
إذا لم يتم منح هذا الإذن مسبقًا، يجب أن يوجّه نظام VIA المستخدم إلى قسم "الوصول إلى الإشعارات" في "إعدادات السيارة"، وذلك باستخدام مجموعة من الجمل والإشعارات. يمكن استخدام الرمز البرمجي التالي لفتح القسم المناسب من تطبيق الإعدادات:
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
الفئة الأساسية نافذة وتدير دورة حياتها ما دامت جلسة voice
نشطة. يجب أن تلغي التطبيقات 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()
، ستبدأ الجلسة نشاط voice
plate باستخدام 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".
رصد الكلمات الرئيسية باستخدام معالج الإشارات الرقمية (DSP)
يوفر Android إمكانية الوصول إلى أداة رصد الكلمات الرئيسية النشطة دائمًا على مستوى وحدة معالجة الإشارات الرقمية (DSP) باستخدام AlwaysOnHotwordDetector
.
طريقة لتنفيذ ميزة "اكتشاف الكلمة المهمة" باستخدام وحدة معالجة مركزية منخفضة وينقسم استخدام هذه الوظيفة
إلى جزأين:
- إنشاء مثيل
AlwaysOnHotwordDetector
- تسجيل نموذج صوت لميزة رصد الكلمة المفتاح
يمكن أن يؤدي تنفيذ VoiceInteractionService إلى إنشاء أداة رصد الكلمات الرئيسية باستخدام
VoiceInteractionService#createAlwaysOnHotwordDetector()
،
مع تمرير عبارة رئيسية ولغة يريد استخدامها للرصد. نتيجةً لذلك، يتلقّى
التطبيق طلب onAvailabilityChanged()
ردّ اتصال يتضمّن إحدى القيم المحتملة التالية:
STATE_HARDWARE_UNAVAILABLE
. لا تتوفّر إمكانات معالجة الإشارات الرقمية (DSP) على الجهاز. في هذه الحالة، يتم استخدام ميزة "رصد الكلمات الرئيسية" في البرنامج.STATE_HARDWARE_UNSUPPORTED
. لا يتوفّر دعم "مساحة العرض الديناميكية" بشكل عام، ولكن لا تتيح "مساحة العرض الديناميكية" استخدام تركيبة معيّنة من العبارة الرئيسية واللغة. يمكن للتطبيق اختيار استخدام ميزة "رصد الكلمات الرئيسية باستخدام البرامج".STATE_HARDWARE_ENROLLED
. ميزة "رصد الكلمة المفتاح" جاهزة ويمكن بدء استخدامها من خلال استدعاء الطريقةstartRecognition()
.STATE_HARDWARE_UNENROLLED
. لا يتوفّر نموذج صوتي للعبارة الرئيسية المطلوبة، ولكن يمكن التسجيل.
يمكن تسجيل نماذج الصوت لميزة "رصد الكلمة المفتاح" باستخدام IVoiceInteractionManagerService#updateKeyphraseSoundModel()
.
يمكن تسجيل طُرز متعددة في النظام في وقت معيّن، ولكن يتم ربط AlwaysOnHotwordDetector
بطُرز واحد فقط.
قد لا تتوفّر ميزة "اكتشاف الكلمات المهمة" في وحدة معالجة الإشارات الرقمية (DSP) على بعض الأجهزة. على مطوّري VIA
التحقّق من إمكانات الأجهزة باستخدام getDspModuleProperties()
الطريقة. للاطّلاع على نموذج رمز برمجي يعرض كيفية تسجيل نماذج الأصوات، يُرجى الاطّلاع على VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java
.
راجِع التسجيل المتزامن بشأن
التعرّف المتزامن على الكلمات الرئيسية.
رصد الكلمات الرئيسية للبرامج
كما هو موضّح أعلاه، قد لا تتوفّر ميزة رصد الكلمات الرئيسية في وحدة معالجة الإشارات الرقمية (DSP) في كل الأجهزة (على سبيل المثال، لا يقدّم محاكي Android ميزة محاكاة وحدة معالجة الإشارات الرقمية). في هذه الحالة، يكون التعرّف على الصوت باستخدام البرامج هو البديل الوحيد. لتجنّب التدخل في التطبيقات الأخرى التي قد تحتاج إلى الوصول إلى الميكروفون، يجب أن تصل تطبيقات VIA إلى إدخال الصوت باستخدام:
- يجب أن يستخدم تطبيق تسجيل الصوت MediaRecorder.AudioSource.HOTWORD.
- الحصول على إذن
android.Manifest.permission.CAPTURE_AUDIO_HOTWORD
كلا الثابتَين @hide
ولا يتوفّران إلا للتطبيقات المجمّعة.
إدارة إدخال الصوت والتعرّف على الصوت
سيتم تنفيذ إدخال الصوت باستخدام فئة MediaRecorder.
لمزيد من المعلومات حول كيفية استخدام واجهة برمجة التطبيقات هذه، يُرجى الاطّلاع على نظرة عامة على MediaRecorder. من المتوقّع أيضًا أن تكون خدمات التفاعل الصوتي من RecognitionService
التطبيقات من الطراز الأول. يستخدم أي تطبيق في النظام يتطلّب ميزة التعرّف على الصوت ملف تعريف الارتباط
للوصول إلى هذه الميزة. لإجراء التعرّف على الصوت والوصول إلى الميكروفون، يجب على مستخدمي VIAs
الضغط مع الاستمرار على android.permission.RECORD_AUDIO
.
من المتوقّع أن تحصل التطبيقات التي تصل إلى عملية تنفيذ RecognitionService
على هذا الإذن أيضًا.
قبل الإصدار 10 من نظام Android، كان يتم منح إذن الوصول إلى الميكروفون لتطبيق واحد فقط في الوقت (باستثناء ميزة "رصد الكلمات الرئيسية"، راجِع ما سبق). بدءًا من Android 10، أصبح بإمكانك مشاركة إذن الوصول إلى الميكروفون. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة مشاركة إدخال الصوت.
الوصول إلى إخراج الصوت
عندما يكون الذكاء الاصطناعي التفاعلي جاهزًا لتقديم ردود شفهية، من المهم اتّباع المجموعة التالية من الإرشادات:
- عند طلب تركيز الصوت أو إدارة إخراج الصوت، يجب أن يستخدم التطبيق
AudioAttributes#USAGE_ASSISTANT
وAudioAttributes#CONTENT_TYPE_SPEECH
كسمات صوت. - أثناء التعرّف على الكلام، يجب طلب تركيز الصوت باستخدام
AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
. يُرجى العِلم أنّ بعض تطبيقات الوسائط قد لا تستجيب بشكلٍ صحيح لطلبات الوسائط (راجِع تنفيذ طلبات الوسائط) أثناء إزالة تركيز الصوت.