تطوير التطبيقات

لتنفيذ تطبيق تفاعلي صوتي (VIA)، عليك إكمال الخطوات التالية:

  1. إنشاء هيكل VIA
  2. (اختياري) تنفيذ مسار الإعداد/تسجيل الدخول
  3. (اختياري) نفِّذ شاشة "الإعدادات".
  4. تضمين الأذونات المطلوبة في ملف البيان
  5. تنفيذ واجهة مستخدم للوحة الصوت
  6. تنفيذ ميزة التعرّف على الصوت (يجب أن يشمل ذلك تنفيذ واجهة برمجة التطبيقات RecognitionService).
  7. تنفيذ عبارة (يمكنك اختياريًا تنفيذ واجهة برمجة التطبيقات TextToSpeech).
  8. تنفيذ الأوامر يمكنك الاطّلاع على هذا المحتوى في مقالة تنفيذ الطلبات.

توضّح الأقسام التالية كيفية إكمال كل خطوة من الخطوات المذكورة أعلاه.

إنشاء بنية 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. بما أنّ جميع خدمات المساعدين الرقميين المستندة إلى الذكاء الاصطناعي هي أيضًا خدمات للتعرّف على الصوت، يجب أيضًا تضمين ما يلي في ملف البيان:

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.

تنفيذ مسار الإعداد/تسجيل الدخول

يمكن إجراء عملية الإعداد وتسجيل الدخول في الحالات التالية:

  • أثناء إعداد الجهاز (معالج الإعداد)
  • أثناء تبديل خدمة التفاعل الصوتي (الإعدادات)
  • عند تشغيل التطبيق لأول مرة بعد اختياره

للاطّلاع على تفاصيل حول تجربة المستخدم المقترَحة والإرشادات المرئية، يُرجى الرجوع إلى المساعدات المحمَّلة مسبقًا: إرشادات تجربة المستخدم.

عملية الإعداد أثناء تبديل الخدمة الصوتية

يمكن للمستخدم دائمًا اختيار VIA لم يتم ضبطه بشكل صحيح. قد يرجع ذلك إلى أحد الأسباب التالية:

  • تخطّى المستخدم &quot;معالج الإعداد&quot; بالكامل أو تخطّى خطوة ضبط التفاعل الصوتي.
  • اختار المستخدم تطبيق VIA مختلفًا عن التطبيق الذي تم ضبطه أثناء إعداد الجهاز.

في أي حال، يمكن VoiceInteractionService تشجيع المستخدم على إكمال عملية الإعداد بعدة طرق، منها:

  • تذكير بالإشعارات
  • الردّ الصوتي التلقائي عندما يحاول المستخدم استخدامها

ملاحظة: ننصح بشدة بعدم عرض مسار إعداد VIA بدون طلب صريح من المستخدم. وهذا يعني أنّه على تطبيقات المركبات (VIA) تجنُّب عرض المحتوى تلقائيًا على وحدة التحكم الرئيسية (HU) أثناء تشغيل الجهاز أو نتيجةً لتبديل المستخدم أو إلغاء القفل.

تذكير بالإشعارات

تذكير الإشعارات هو طريقة غير تطفّلية للإشارة إلى الحاجة إلى الإعداد، وتزويد المستخدمين بإمكانية التنقّل إلى مسار إعداد المساعد.

تذكير بالإشعارات

الشكل 2. تذكير بالإشعارات

إليك طريقة عمل هذا المسار:

مسار التذكير بالإشعارات

الشكل 3. مسار التذكير بالإشعارات

رد صوتي

هذا هو أبسط مسار يمكن تنفيذه، حيث يتم بدء عبارة عند تلقّي ردّ VoiceInteractionSession#onShow()، ويتم توضيح الإجراء المطلوب للمستخدم، ثم يُسأل المستخدم (إذا كان الإعداد مسموحًا به وفقًا لحالة قيود تجربة المستخدم) عمّا إذا كان يريد بدء مسار الإعداد. وإذا لم يكن الإعداد ممكنًا في الوقت الحالي، عليك توضيح هذا الموقف أيضًا.

الإعداد عند الاستخدام لأول مرة

من الممكن دائمًا أن يفعّل المستخدم ميزة &quot;المساعد الافتراضي&quot; التي لم يتم ضبطها بشكل صحيح. في مثل هذه الحالات:

  1. أبلِغ المستخدم شفهيًا بهذا الموقف (على سبيل المثال، "لكي تعمل بشكل صحيح، عليك إكمال بعض الخطوات … ").
  2. إذا سمح محرّك قيود تجربة المستخدم بذلك (راجِع UX_RESTRICTIONS_NO_SETUP)، اسأل المستخدم عمّا إذا كان يريد بدء عملية الإعداد، ثم افتح شاشة "الإعدادات" الخاصة بميزة "المساعد الرقمي المدمج".
  3. في الحالات الأخرى (مثلاً، إذا كان المستخدم يقود السيارة)، يجب ترك إشعار للمستخدم كي ينقر على الخيار عندما يكون ذلك آمنًا.

إنشاء شاشات إعداد التفاعل الصوتي

يجب تطوير شاشات الإعداد وتسجيل الدخول على أنّها أنشطة عادية. يمكنك الاطّلاع على إرشادات تجربة المستخدم والإرشادات المرئية لتطوير واجهة المستخدم في المساعدات المحمَّلة مسبقًا: إرشادات تجربة المستخدم.

الإرشادات العامة:

  • يجب أن تسمح المساعدات الافتراضية للمستخدمين بإيقاف عملية الإعداد واستئنافها في أي وقت.
  • يجب عدم السماح بعملية الإعداد إذا كان قيد UX_RESTRICTIONS_NO_SETUP ساريًا. لمزيد من التفاصيل، يُرجى الاطّلاع على إرشادات تشتيت انتباه السائق.
  • يجب أن تتطابق شاشات الإعداد مع نظام التصميم لكل مركبة. يجب أن يكون التنسيق العام للشاشة والرموز والألوان والجوانب الأخرى متسقًا مع بقية واجهة المستخدم. يمكنك الاطّلاع على مقالة التخصيص لمعرفة التفاصيل.

تنفيذ شاشة إعدادات

دمج الإعدادات

الشكل 4. دمج الإعدادات

شاشات الإعدادات هي أنشطة Android عادية. في حال تنفيذها، يجب الإفصاح عن نقطة الدخول الخاصة بها في res/xml/interaction_service.xml كجزء من بيانات VIA (راجِع بيانات). يُعدّ قسم "الإعدادات" مكانًا مناسبًا لمواصلة عملية الإعداد وتسجيل الدخول (إذا لم يكملها المستخدم) أو تقديم خيار تسجيل الخروج أو تبديل المستخدم إذا لزم الأمر. على غرار شاشات الإعداد الموضّحة أعلاه، يجب أن تتضمّن هذه الشاشات ما يلي:

  • توفير خيار الرجوع إلى الشاشة السابقة في حزمة الشاشات (على سبيل المثال، إلى "إعدادات السيارة")
  • ألا يكون مسموحًا به أثناء القيادة لمزيد من التفاصيل، يُرجى الاطّلاع على إرشادات تشتيت انتباه السائق.
  • طابِق كل نظام تصميم مركبة. لمزيد من التفاصيل، يُرجى الاطّلاع على التخصيص.

تضمين الأذونات المطلوبة في ملف البيان

يمكن تقسيم الأذونات التي يتطلّبها تطبيق VIA إلى ثلاث فئات:

  • أذونات توقيع النظام: وهي أذونات لا تُمنح إلا لملفات APK الموقَّعة من النظام والمثبَّتة مسبقًا. ولا يمكن للمستخدمين منح هذه الأذونات، بل يمكن لمصنّعي المعدات الأصلية منحها فقط عند إنشاء صور النظام. لمزيد من المعلومات حول الحصول على أذونات التوقيع، يُرجى الاطّلاع على منح أذونات ذات امتيازات على مستوى النظام.
  • الأذونات الخطيرة: هذه هي الأذونات التي يجب أن يمنحها المستخدم من خلال مربّع الحوار PermissionsController. يمكن لمصنّعي المعدات الأصلية منح بعض هذه الأذونات مسبقًا إلى خدمة VoiceInteractionService التلقائية. ولكن بما أنّ هذا الإعداد التلقائي قد يختلف من جهاز إلى آخر، يجب أن تتمكّن التطبيقات من طلب هذه الأذونات عند الحاجة إليها.
  • الأذونات الأخرى: هذه هي جميع الأذونات الأخرى التي لا تتطلّب تدخّل المستخدم. يتم منح هذه الأذونات تلقائيًا من خلال النظام.

في ضوء ما سبق، يركّز القسم التالي فقط على طلب الأذونات الخطيرة. يجب طلب الأذونات فقط أثناء تواجد المستخدم في شاشات تسجيل الدخول أو الإعدادات.

إذا لم يكن لدى التطبيق الأذونات اللازمة لتشغيله، فإنّ المسار المقترَح هو استخدام عبارة صوتية لشرح الموقف للمستخدم، وإرسال إشعار لتوفير عنصر تحكّم يمكن للمستخدم استخدامه للرجوع إلى شاشات إعدادات "المساعد الرقمي المدمج". لمزيد من التفاصيل، يُرجى الاطّلاع على 1. تذكير بالإشعارات

طلب الأذونات كجزء من شاشة الإعدادات

يتم طلب الأذونات الخطيرة باستخدام طريقة ActivityCompat#requestPermission() العادية (أو ما يعادلها). لمزيد من التفاصيل حول كيفية طلب الأذونات، يُرجى الاطّلاع على طلب أذونات التطبيق.

طلب الحصول على الأذونات

الشكل 5. طلب الحصول على الأذونات

إذن برنامج تلقّي الإشعارات

لتنفيذ مسار TTR، يجب تصنيف تطبيقات VIA على أنّها تستمع إلى الإشعارات. هذا ليس إذنًا بحد ذاته، بل هو إعداد يتيح للنظام إرسال إشعارات إلى المستمعين المسجّلين. لمعرفة ما إذا تم منح VIA إذن الوصول إلى هذه المعلومات، يمكن للتطبيقات إجراء ما يلي:

إذا لم يتم منح هذا الإذن مسبقًا، على &quot;المساعد الافتراضي في السيارة&quot; توجيه المستخدم إلى قسم &quot;الوصول إلى الإشعارات&quot; في &quot;إعدادات السيارة&quot;، وذلك باستخدام مجموعة من العبارات والإشعارات. يمكن استخدام الرمز البرمجي التالي لفتح القسم المناسب من تطبيق الإعدادات:

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فئة الأساس نافذة ويدير دورة حياتها طالما أنّ جلسة صوتية نشطة. يجب أن تتجاهل التطبيقات 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، قد يكون من الضروري استخدام مجموعة من Intent الداخلية أو ربط الخدمة. على سبيل المثال، عند استدعاء VoiceInteractionSession#onHide()، يجب أن تكون الجلسة قادرة على تمرير هذا الطلب إلى النشاط.

ملاحظة مهمة: في السيارات، لا يمكن عرض سوى الأنشطة التي تمّت إضافة تعليقات توضيحية خاصة إليها أو الأنشطة المدرَجة في "قائمة السماح" الخاصة بتجربة المستخدم أثناء القيادة. وينطبق ذلك أيضًا على الأنشطة التي تبدأ بـ VoiceInteractionSession#startAssistantActivity(). يُرجى تذكُّر إضافة التعليق التوضيحي <meta-data android:name="distractionOptimized" android:value="true"/> إلى نشاطك أو تضمين هذا النشاط في المفتاح systemActivityWhitelist ضمن ملف /packages/services/Car/service/res/values/config.xml. لمزيد من المعلومات، يُرجى الاطّلاع على إرشادات تشتيت انتباه السائق.

تنفيذ ميزة التعرّف على الصوت

في هذا القسم، ستتعرّف على كيفية تنفيذ ميزة &quot;التعرّف على الصوت&quot; من خلال رصد الكلمات المحفّزة والتعرّف عليها. كلمة التفعيل هي كلمة يتم استخدامها لبدء طلب بحث جديد أو إجراء صوتي. على سبيل المثال، "Ok Google" أو "Hey Google".

رصد الكلمة المفتاح من خلال معالج الإشارات الرقمية

يتيح نظام التشغيل Android الوصول إلى أداة رصد الكلمات المفتاح التي تعمل دائمًا على مستوى معالج الإشارات الرقمية (DSP) من خلال AlwaysOnHotwordDetector. طريقة لتنفيذ ميزة "اكتشاف الكلمة المهمة" مع استهلاك منخفض لوحدة المعالجة المركزية ينقسم استخدام هذه الوظيفة إلى جزأين:

  • إنشاء مثيل من AlwaysOnHotwordDetector
  • تسجيل نموذج صوتي لرصد الكلمة المهمة

يمكن أن ينشئ تنفيذ VoiceInteractionService أداة رصد للكلمة المفتاح باستخدام VoiceInteractionService#createAlwaysOnHotwordDetector()، مع تمرير عبارة مفتاح وموقع جغرافي يرغب في استخدامهما للرصد. نتيجةً لذلك، يتلقّى التطبيق دالة ردّ اتصال onAvailabilityChanged() تتضمّن إحدى القيم المحتملة التالية:

  • STATE_HARDWARE_UNAVAILABLE. لا تتوفّر إمكانية استخدام معالج الإشارات الرقمية على الجهاز. في هذه الحالة، يتم استخدام ميزة "رصد الكلمة المفتاح" في البرامج.
  • STATE_HARDWARE_UNSUPPORTED. لا تتوفّر إمكانية استخدام منصة عرض الطلب (DSP) بشكل عام، ولكن لا تتوافق منصة عرض الطلب مع المجموعة المحدّدة من العبارات الرئيسية واللغة. يمكن للتطبيق اختيار استخدام ميزة رصد الكلمة المفتاح من خلال البرامج.
  • STATE_HARDWARE_ENROLLED. ميزة "رصد الكلمة المهمة" جاهزة ويمكن بدء استخدامها من خلال استدعاء الطريقة startRecognition().
  • STATE_HARDWARE_UNENROLLED. لا يتوفّر نموذج صوتي للعبارة الرئيسية المطلوبة، ولكن يمكن إجراء عملية التسجيل.

يمكن إكمال عملية تسجيل نماذج الصوت الخاصة بميزة "رصد الكلمة المفتاح" باستخدام IVoiceInteractionManagerService#updateKeyphraseSoundModel(). يمكن تسجيل نماذج متعددة في النظام في وقت معيّن، ولكن لا يمكن ربط أكثر من نموذج واحد بالسمة AlwaysOnHotwordDetector. قد لا تتوفّر ميزة "اكتشاف الكلمة المهمة" في معالج الإشارات الرقمية على بعض الأجهزة. على مطوّري VIA التحقّق من إمكانات الأجهزة باستخدام طريقة getDspModuleProperties(). للاطّلاع على نموذج رمز يوضّح كيفية تسجيل نماذج الصوت، يُرجى الاطّلاع على VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java. راجِع التسجيل المتزامن بشأن التعرّف المتزامن على الكلمات المحفّزة.

رصد الكلمة المفتاح من خلال البرامج

كما هو موضّح أعلاه، قد لا تتوفّر ميزة رصد الكلمات المحفّزة في معالج الإشارات الرقمية في جميع الأجهزة (على سبيل المثال، لا يوفّر محاكي Android محاكاة لمعالج الإشارات الرقمية). في هذه الحالة، يكون التعرّف على الصوت من خلال البرامج هو البديل الوحيد. لتجنُّب التداخل مع التطبيقات الأخرى التي قد تحتاج إلى الوصول إلى الميكروفون، يجب أن تصل المساعدات الافتراضية الذكية إلى إدخال الصوت باستخدام:

كلا الثابتَين @hide ولا يتوفّران إلا للتطبيقات المجمّعة.

إدارة إدخال الصوت والتعرّف على الصوت

سيتم تنفيذ الإدخال الصوتي باستخدام فئة MediaRecorder. لمزيد من المعلومات حول كيفية استخدام واجهة برمجة التطبيقات هذه، يُرجى الاطّلاع على نظرة عامة على MediaRecorder. من المتوقّع أيضًا أن تكون خدمات التفاعل الصوتي عمليات تنفيذ لفئة RecognitionService. يستخدم أي تطبيق في النظام يتطلّب التعرّف على الصوت للوصول إلى هذه الإمكانية. لإجراء التعرّف على الصوت والوصول إلى الميكروفون، يجب أن تحصل المساعدات الافتراضية الذكية على android.permission.RECORD_AUDIO. يُتوقّع أن تحصل التطبيقات التي تصل إلى تنفيذ RecognitionService على هذا الإذن أيضًا.

قبل الإصدار 10 من نظام التشغيل Android، كان يتم منح إذن الوصول إلى الميكروفون لتطبيق واحد فقط في كل مرة (باستثناء ميزة "رصد العبارات المحفّزة"، كما هو موضّح أعلاه). بدءًا من نظام التشغيل Android 10، يمكن مشاركة إذن الوصول إلى الميكروفون. لمزيد من المعلومات، يُرجى الاطّلاع على مشاركة إدخال الصوت.

الوصول إلى إخراج الصوت

عندما يكون المساعد الافتراضي جاهزًا لتقديم ردود شفهية، من المهم اتّباع مجموعة الإرشادات التالية: