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

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

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

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

إنشاء هيكل تطبيق تفاعل صوتي

ملفات البيانات

يتم رصد التطبيق على أنّه تطبيق تفاعل صوتي عندما يتضمّن البيان ما يلي:

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 هي نقطة الدخول إلى تطبيق تفاعل صوتي. في ما يلي المسؤوليات الرئيسية لهذه الخدمة:

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

في أبسط أشكاله، سيبدو تنفيذ 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 للحصول على قائمة كاملة.

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

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

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

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

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

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

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

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

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

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

إشعار تذكير

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

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

الشكل 2: إشعار تذكير

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

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

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

رد صوتي

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

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

يمكن للمستخدم دائمًا تشغيل تطبيق تفاعل صوتي لم يتم ضبطه بشكل صحيح. في هذه الحالات:

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

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

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

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

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

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

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

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

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

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

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

يمكن تقسيم الأذونات المطلوبة من تطبيق تفاعل صوتي إلى ثلاث فئات:

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

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

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

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

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

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

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

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

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

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

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، قد تكون هناك حاجة إلى مجموعة من النوايا الداخلية أو ربط الخدمة. على سبيل المثال، عند استدعاء 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: إمكانية معالج الإشارات الرقمية غير متاحة على الجهاز. في هذه الحالة، يتم استخدام رصد الكلمات المهمة في البرامج.
  • STATE_HARDWARE_UNSUPPORTED: بشكل عام، لا يتوفّر دعم معالج الإشارات الرقمية، ولكن لا يدعم معالج الإشارات الرقمية مجموعة العبارة الرئيسية واللغة المحدّدة. يمكن للتطبيق اختيار استخدام رصد الكلمات المهمة في البرامج.
  • STATE_HARDWARE_ENROLLED: رصد الكلمات المهمة جاهز ويمكن بدؤه من خلال استدعاء طريقة startRecognition().
  • STATE_HARDWARE_UNENROLLED: لا يتوفّر نموذج صوتي للعبارة الرئيسية المطلوبة، ولكن يمكن التسجيل.

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

رصد الكلمات المهمة في البرامج

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

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

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

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

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

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

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