অ্যাপ ডেভেলপমেন্ট

একটি ভয়েস ইন্টারঅ্যাকশন অ্যাপ্লিকেশন (VIA) বাস্তবায়ন করতে, আপনি এই পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. একটি ভিআইএ কঙ্কাল তৈরি করুন।
  2. ( ঐচ্ছিক ) একটি সেটআপ/সাইন-ইন প্রবাহ বাস্তবায়ন করুন৷
  3. ( ঐচ্ছিক ) একটি সেটিংস স্ক্রীন প্রয়োগ করুন৷
  4. ম্যানিফেস্ট ফাইলে প্রয়োজনীয় অনুমতি ঘোষণা করুন।
  5. একটি ভয়েস প্লেট UI প্রয়োগ করুন।
  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>

এই উদাহরণে:

  • VIAsকে অবশ্যই 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" />

ভয়েস ইন্টারঅ্যাকশন সার্ভিস, ভয়েস ইন্টারঅ্যাকশন সেশন সার্ভিস এবং ভয়েস ইন্টারঅ্যাকশন সেশন

নিম্নলিখিত চিত্রটি এই প্রতিটি সত্তার জীবনচক্র চিত্রিত করে:

জীবনচক্র

চিত্র 1. জীবনচক্র

আগেই বলা হয়েছে, VoiceInteractionService হল একটি VIA-এর প্রবেশপথ। এই পরিষেবার প্রধান দায়িত্বগুলি হল:

  • এই VIA সক্রিয় থাকা পর্যন্ত যে কোনো প্রক্রিয়া চালু করা উচিত। উদাহরণস্বরূপ, হটওয়ার্ড সনাক্তকরণ।
  • সমর্থিত ভয়েস অ্যাকশন রিপোর্ট করে ( ভয়েস সহকারী ট্যাপ-টু-রিড দেখুন)।
  • লক স্ক্রিন (কীগার্ড) থেকে ভয়েস ইন্টারঅ্যাকশন সেশন চালু করুন।

এর সহজতম আকারে, একটি ভয়েস ইন্টারঅ্যাকশন সার্ভিস বাস্তবায়ন এইরকম দেখাবে:

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);
    }
}

অবশেষে, একটি ভয়েস ইন্টারঅ্যাকশন সেশন যেখানে বেশিরভাগ কাজ করা হবে। একাধিক ব্যবহারকারীর মিথস্ক্রিয়া সম্পূর্ণ করতে একটি একক সেশনের উদাহরণ পুনরায় ব্যবহার করা যেতে পারে। 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 এর জন্য ডকুমেন্টেশন একটি সম্পূর্ণ তালিকা দেখুন।

একটি সেটআপ/সাইন-ইন প্রবাহ বাস্তবায়ন করুন

সেটআপ এবং সাইন-ইন ঘটতে পারে:

  • ডিভাইস অনবোর্ডিংয়ের সময় (সেটআপ উইজার্ড)।
  • ভয়েস ইন্টারঅ্যাকশনের সময় পরিষেবা অদলবদল (সেটিংস)।
  • অ্যাপটি সিলেক্ট করা হলে প্রথম লঞ্চ হলে।

প্রস্তাবিত ব্যবহারকারীর অভিজ্ঞতা এবং ভিজ্যুয়াল গাইডেন্সের বিস্তারিত জানার জন্য, প্রিলোডেড অ্যাসিস্ট্যান্টস দেখুন: UX গাইডেন্স

ভয়েস পরিষেবা সোয়াপিংয়ের সময় সেটআপ করুন

সঠিকভাবে কনফিগার করা হয়নি এমন একটি VIA নির্বাচন করা ব্যবহারকারীর পক্ষে সর্বদা সম্ভব। এটি ঘটতে পারে কারণ:

  • ব্যবহারকারী সম্পূর্ণরূপে সেটআপ উইজার্ড এড়িয়ে গেছেন বা ব্যবহারকারী ভয়েস ইন্টারঅ্যাকশন কনফিগারেশন ধাপটি এড়িয়ে গেছেন।
  • ব্যবহারকারী ডিভাইস অনবোর্ডিংয়ের সময় কনফিগার করা ভিআইএ থেকে আলাদা একটি ভিআইএ নির্বাচন করেছেন৷

যে কোনো ক্ষেত্রে, একটি VoiceInteractionService ব্যবহারকারীকে সেটআপ সম্পূর্ণ করতে উত্সাহিত করার বিভিন্ন উপায় রয়েছে:

  • বিজ্ঞপ্তি অনুস্মারক.
  • ব্যবহারকারী যখন এটি ব্যবহার করার চেষ্টা করে তখন স্বয়ংক্রিয় ভয়েস উত্তর।

দ্রষ্টব্য : একটি সুস্পষ্ট ব্যবহারকারীর অনুরোধ ছাড়াই একটি VIA সেটআপ প্রবাহ উপস্থাপন করতে দৃঢ়ভাবে নিরুৎসাহিত করা হয়৷ এর মানে হল যে ডিভাইস বুট করার সময় বা ব্যবহারকারীর সুইচ বা আনলকের ফলে HU-এ স্বয়ংক্রিয়ভাবে বিষয়বস্তু প্রদর্শন করা VIA-এর উচিত নয়।

বিজ্ঞপ্তি অনুস্মারক

একটি বিজ্ঞপ্তি অনুস্মারক হল সেটআপের প্রয়োজনীয়তা নির্দেশ করার একটি অ-অনুপ্রবেশকারী উপায়, এবং ব্যবহারকারীদের সহকারী সেটআপ প্রবাহে নেভিগেট করার সামর্থ্য প্রদান করে৷

বিজ্ঞপ্তি অনুস্মারক

চিত্র 2. বিজ্ঞপ্তি অনুস্মারক

এই প্রবাহ কিভাবে কাজ করবে তা এখানে:

বিজ্ঞপ্তি অনুস্মারক প্রবাহ

চিত্র 3. বিজ্ঞপ্তি অনুস্মারক প্রবাহ

ভয়েস উত্তর

এটি বাস্তবায়নের জন্য সবচেয়ে সহজ প্রবাহ, একটি VoiceInteractionSession#onShow() কলব্যাকে একটি উচ্চারণ শুরু করে, ব্যবহারকারীকে কী করতে হবে তা ব্যাখ্যা করে এবং তারপরে তাদের জিজ্ঞাসা করা হয় (যদি সেটআপটি UX সীমাবদ্ধতার অবস্থা দিয়ে অনুমোদিত হয়) যদি তারা শুরু করতে চায় সেটআপ প্রবাহ। যদি সেই সময়ে সেটআপ করা সম্ভব না হয় তবে এই পরিস্থিতিটিও ব্যাখ্যা করুন।

প্রথম ব্যবহারে সেটআপ করুন

ব্যবহারকারীর পক্ষে একটি VIA ট্রিগার করা সবসময় সম্ভব যা সঠিকভাবে কনফিগার করা হয়নি। এই ধরনের ক্ষেত্রে:

  1. এই পরিস্থিতি সম্পর্কে ব্যবহারকারীকে মৌখিকভাবে অবহিত করুন (উদাহরণস্বরূপ, "সঠিকভাবে কাজ করার জন্য, আমার আপনাকে কয়েকটি ধাপ সম্পূর্ণ করতে হবে ...")।
  2. যদি UX সীমাবদ্ধতা ইঞ্জিন অনুমতি দেয় ( UX_RESTRICTIONS_NO_SETUP দেখুন), ব্যবহারকারীকে জিজ্ঞাসা করুন যে তারা সেটআপ প্রক্রিয়া শুরু করতে চান এবং তারপর VIA এর জন্য সেটিংস স্ক্রীন খুলুন।
  3. অন্যথায় (উদাহরণস্বরূপ, ব্যবহারকারী যদি গাড়ি চালাচ্ছেন), ব্যবহারকারীর জন্য বিকল্পটিতে ক্লিক করার জন্য একটি বিজ্ঞপ্তি ছেড়ে দিন যখন এটি করা নিরাপদ।

ভয়েস ইন্টারঅ্যাকশন সেটআপ স্ক্রিন তৈরি করুন

সেটআপ এবং সাইন-ইন স্ক্রিনগুলিকে নিয়মিত কার্যকলাপ হিসাবে বিকাশ করা উচিত। প্রিলোডেড অ্যাসিস্ট্যান্টে UI ডেভেলপমেন্টের জন্য UX এবং ভিজ্যুয়াল নির্দেশিকা দেখুন: UX গাইডেন্স

সাধারণ নির্দেশিকা:

  • VIA-এর উচিত ব্যবহারকারীদের যেকোন সময় সেটআপ বাধা দিতে এবং পুনরায় শুরু করার অনুমতি দেওয়া।
  • UX_RESTRICTIONS_NO_SETUP সীমাবদ্ধতা কার্যকর হলে সেটআপের অনুমতি দেওয়া উচিত নয়৷ বিস্তারিত জানার জন্য, ড্রাইভারের বিভ্রান্তি নির্দেশিকা দেখুন।
  • সেটআপ স্ক্রিন প্রতিটি গাড়ির জন্য ডিজাইন সিস্টেমের সাথে মেলে। সাধারণ স্ক্রিন লেআউট, আইকন, রঙ এবং অন্যান্য দিকগুলি বাকি UI এর সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত। বিস্তারিত জানার জন্য কাস্টমাইজেশন দেখুন।

একটি সেটিংস স্ক্রিন প্রয়োগ করুন

সেটিংস ইন্টিগ্রেশন

চিত্র 4. সেটিংস ইন্টিগ্রেশন

সেটিংস স্ক্রিনগুলি নিয়মিত অ্যান্ড্রয়েড কার্যকলাপ। বাস্তবায়িত হলে, তাদের এন্ট্রি পয়েন্ট অবশ্যই res/xml/interaction_service.xml এ ঘোষণা করতে হবে VIA ম্যানিফেস্টের অংশ হিসেবে (দেখুন ম্যানিফেস্ট )। সেটিংস বিভাগটি সেটআপ এবং সাইন-ইন চালিয়ে যাওয়ার জন্য একটি ভাল জায়গা (যদি ব্যবহারকারী এটি সম্পূর্ণ না করে) বা প্রয়োজনে সাইন-আউট বা ব্যবহারকারীর বিকল্প পরিবর্তন করার প্রস্তাব দেয়৷ উপরে বর্ণিত সেটআপ স্ক্রিনের মতো, এই স্ক্রীনগুলির উচিত:

  • স্ক্রীন স্ট্যাকের পূর্ববর্তী স্ক্রিনে ফিরে যাওয়ার বিকল্পটি প্রদান করুন (উদাহরণস্বরূপ, গাড়ি সেটিংসে)।
  • গাড়ি চালানোর সময় অনুমতি দেওয়া হবে না। বিস্তারিত জানার জন্য, ড্রাইভারের বিভ্রান্তি নির্দেশিকা দেখুন।
  • প্রতিটি গাড়ির নকশা সিস্টেমের সাথে মিল করুন। বিস্তারিত জানার জন্য, কাস্টমাইজেশন দেখুন।

ম্যানিফেস্ট ফাইলে প্রয়োজনীয় অনুমতি ঘোষণা করুন

ভিআইএ-এর প্রয়োজনীয় অনুমতিগুলি তিনটি বিভাগে বিভক্ত করা যেতে পারে:

  • সিস্টেম স্বাক্ষর অনুমতি. এগুলি শুধুমাত্র পূর্ব-ইন্সটল করা, সিস্টেম স্বাক্ষরিত APK-কে দেওয়া অনুমতি। ব্যবহারকারীরা এই অনুমতিগুলি মঞ্জুর করতে সক্ষম নয়, শুধুমাত্র OEMগুলি তাদের সিস্টেমের চিত্রগুলি তৈরি করার সময় অনুমতি দিতে পারে৷ স্বাক্ষর অনুমতি প্রাপ্তির বিষয়ে আরও তথ্যের জন্য, গ্রান্ট সিস্টেম-প্রিভিলেজড পারমিশন দেখুন।
  • বিপজ্জনক অনুমতি. এই অনুমতিগুলি একজন ব্যবহারকারীকে PermissionsController ডায়ালগ ব্যবহার করে দিতে হবে। OEM গুলি ডিফল্ট 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);
}

একটি ভয়েস প্লেট UI প্রয়োগ করুন

যখন একটি VoiceInteractionSession একটি onShow() কলব্যাক পায়, তখন এটি একটি ভয়েস প্লেট UI উপস্থাপন করতে পারে। ভয়েস প্লেট বাস্তবায়নের ভিজ্যুয়াল এবং UX নির্দেশিকাগুলির জন্য, প্রিলোডেড অ্যাসিস্ট্যান্টস দেখুন: UX গাইডেন্স

ভয়েস প্লেট প্রদর্শন করা হচ্ছে

চিত্র 6. ভয়েস প্লেট প্রদর্শন করা হচ্ছে

এই UI কিভাবে বাস্তবায়ন করতে হয় তার দুটি বিকল্প আছে:

  • 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);
    }
    …
}

এই পদ্ধতিটি ব্যবহার করার সময়, আপনি আপনার UI এর অস্পষ্ট অঞ্চলগুলির জন্য অ্যাকাউন্টে VoiceInteractionSession#onComputeInsets() সামঞ্জস্য করতে চাইতে পারেন।

startAssistantActivity() ব্যবহার করুন

এই ক্ষেত্রে, VoiceInteractionSession একটি নিয়মিত কার্যকলাপে ভয়েস প্লেট UI হ্যান্ডলিং অর্পণ করে। যখন এই বিকল্পটি ব্যবহার করা হয়, তখন একটি VoiceInteractionSession বাস্তবায়নকে অবশ্যই তার ডিফল্ট কন্টেন্ট উইন্ডোর নির্মাণ অক্ষম করতে হবে ( onCreateContentView() ব্যবহার করে onPrepareShow() কলব্যাকে। VoiceInteractionSession#onShow() এ, অধিবেশন ভয়েস প্লেট কার্যকলাপ শুরু করবে VoiceInteractionSession#startAssistantActivity() ব্যবহার করে। এই পদ্ধতিটি সঠিক উইন্ডো সেটিংস এবং কার্যকলাপের পতাকা সহ UI শুরু করে।

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() আহ্বান করা হয়, সেশনটি অবশ্যই এই অনুরোধটি কার্যকলাপে পাস করতে সক্ষম হবে।

গুরুত্বপূর্ণ। মোটরগাড়িতে, শুধুমাত্র বিশেষভাবে টীকাকৃত ক্রিয়াকলাপ বা UXR "অনুমোদিত তালিকা" তে তালিকাভুক্ত ক্রিয়াকলাপগুলি গাড়ি চালানোর সময় প্রদর্শিত হতে পারে। এটি VoiceInteractionSession#startAssistantActivity() দিয়ে শুরু হওয়া কার্যকলাপের ক্ষেত্রেও প্রযোজ্য। মনে রাখবেন হয় আপনার অ্যাক্টিভিটি <meta-data android:name="distractionOptimized" android:value="true"/> দিয়ে টীকা করতে বা এই কার্যকলাপটিকে /packages/services/Car/service/res/values/-এর systemActivityWhitelist কী-তে অন্তর্ভুক্ত করতে /packages/services/Car/service/res/values/config.xml ফাইল। আরও তথ্যের জন্য, ড্রাইভারের বিভ্রান্তি নির্দেশিকা দেখুন।

ভয়েস স্বীকৃতি প্রয়োগ করুন

এই বিভাগে, আপনি হটওয়ার্ড সনাক্তকরণ এবং স্বীকৃতির মাধ্যমে ভয়েস স্বীকৃতি কীভাবে প্রয়োগ করবেন তা শিখবেন। একটি হটওয়ার্ড একটি ট্রিগার শব্দ যা ভয়েস দ্বারা একটি নতুন প্রশ্ন বা অ্যাকশন শুরু করতে ব্যবহৃত হয়। যেমন, "OK Google" বা "Hey Google"।

ডিএসপি হটওয়ার্ড সনাক্তকরণ

Android AlwaysOnHotwordDetector এর মাধ্যমে DSP স্তরে একটি সর্বদা-অন- হটওয়ার্ড ডিটেক্টর অ্যাক্সেস প্রদান করে। কম CPU সহ হটওয়ার্ড সনাক্তকরণ বাস্তবায়নের উপায়। এই কার্যকারিতা ব্যবহার দুটি অংশে বিভক্ত করা হয়:

  • একটি AlwaysOnHotwordDetector এর ইনস্ট্যান্টেশন।
  • একটি হটওয়ার্ড সনাক্তকরণ শব্দ মডেলের তালিকাভুক্তি।

VoiceInteractionService বাস্তবায়ন VoiceInteractionService#createAlwaysOnHotwordDetector() ব্যবহার করে একটি হটওয়ার্ড ডিটেক্টর তৈরি করতে পারে, একটি কীফ্রেজ এবং লোকেল পাস করে যা তারা সনাক্তকরণের জন্য ব্যবহার করতে চায়। ফলস্বরূপ, অ্যাপটি নিম্নলিখিত সম্ভাব্য মানগুলির একটি সহ একটি onAvailabilityChanged() কলব্যাক পায়:

  • STATE_HARDWARE_UNAVAILABLE ডিএসপি ক্ষমতা ডিভাইসে উপলব্ধ নয়। এই ক্ষেত্রে, সফ্টওয়্যার হটওয়ার্ড সনাক্তকরণ ব্যবহার করা হয়।
  • STATE_HARDWARE_UNSUPPORTED ডিএসপি সমর্থন সাধারণভাবে উপলব্ধ নয়, তবে ডিএসপি প্রদত্ত কীফ্রেজ এবং লোকেল সমন্বয় সমর্থন করে না। অ্যাপটি সফ্টওয়্যার হটওয়ার্ড সনাক্তকরণ ব্যবহার করতে পারে।
  • STATE_HARDWARE_ENROLLED হট শব্দ সনাক্তকরণ প্রস্তুত এবং startRecognition() পদ্ধতিতে কল করে শুরু করা যেতে পারে।
  • STATE_HARDWARE_UNENROLLED অনুরোধ করা কীফ্রেজের জন্য একটি শব্দ মডেল উপলব্ধ নেই, তবে তালিকাভুক্তি সম্ভব।

IVoiceInteractionManagerService#updateKeyphraseSoundModel() ব্যবহার করে হটওয়ার্ড সনাক্তকরণ সাউন্ড মডেলের তালিকাভুক্তি করা যেতে পারে। একটি নির্দিষ্ট সময়ে একাধিক মডেল সিস্টেমে নিবন্ধিত হতে পারে, কিন্তু শুধুমাত্র একটি মডেল একটি AlwaysOnHotwordDetector এর সাথে যুক্ত। DSP হটওয়ার্ড সনাক্তকরণ সমস্ত ডিভাইসে উপলব্ধ নাও হতে পারে৷ ভিআইএ বিকাশকারীদের getDspModuleProperties() পদ্ধতি ব্যবহার করে হার্ডওয়্যার ক্ষমতা পরীক্ষা করা উচিত। সাউন্ড মডেল নথিভুক্ত করার নমুনা কোডের জন্য, VoiceEnrollment/src/com/android/test/voiceenrollment/EnrollmentUtil.java দেখুন। সমবর্তী হটওয়ার্ড স্বীকৃতি সম্পর্কিত সমবর্তী ক্যাপচার দেখুন।

সফ্টওয়্যার হটওয়ার্ড সনাক্তকরণ

উপরে নির্দেশিত হিসাবে, ডিএসপি হটওয়ার্ড সনাক্তকরণ সমস্ত ডিভাইসে উপলব্ধ নাও হতে পারে (উদাহরণস্বরূপ, অ্যান্ড্রয়েড এমুলেটর ডিএসপি ইমুলেশন প্রদান করে না)। এই ক্ষেত্রে, সফ্টওয়্যার ভয়েস স্বীকৃতি একমাত্র বিকল্প। মাইক্রোফোনে অ্যাক্সেসের প্রয়োজন হতে পারে এমন অন্যান্য অ্যাপগুলিতে হস্তক্ষেপ এড়াতে, ভিআইএগুলিকে ব্যবহার করে অডিও ইনপুট অ্যাক্সেস করতে হবে:

এই উভয় ধ্রুবক @hide লুকান এবং শুধুমাত্র বান্ডিল করা অ্যাপগুলিতে উপলব্ধ।

অডিও ইনপুট এবং ভয়েস শনাক্তকরণ পরিচালনা করুন

MediaRecorder ক্লাস ব্যবহার করে অডিও ইনপুট প্রয়োগ করা হবে। এই APIটি কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও তথ্যের জন্য, MediaRecorder ওভারভিউ দেখুন। ভয়েস ইন্টারঅ্যাকশন পরিষেবাগুলিও RecognitionService ক্লাস বাস্তবায়ন হতে পারে বলে আশা করা হচ্ছে। সিস্টেমের যেকোন অ্যাপের জন্য ভয়েস রিকগনিশন প্রয়োজন এই ক্ষমতা অ্যাক্সেস করতে ব্যবহার করে। ভয়েস রিকগনিশন করতে এবং মাইক্রোফোনে অ্যাক্সেস পেতে, VIA-কে অবশ্যই android.permission.RECORD_AUDIO ধারণ করতে হবে। একটি RecognitionService বাস্তবায়ন অ্যাক্সেস করা অ্যাপগুলিও এই অনুমতি ধারণ করবে বলে আশা করা হচ্ছে।

অ্যান্ড্রয়েড 10 এর আগে, মাইক্রোফোন অ্যাক্সেস একবারে শুধুমাত্র একটি অ্যাপে দেওয়া হয়েছিল (উপরে দেখুন হটওয়ার্ড সনাক্তকরণ বাদে)। Android 10 দিয়ে শুরু করে, মাইক্রোফোন অ্যাক্সেস শেয়ার করা যেতে পারে। আরও তথ্যের জন্য শেয়ারিং অডিও ইনপুট দেখুন।

অডিও আউটপুট অ্যাক্সেস করুন

VIA মৌখিক প্রতিক্রিয়া প্রদানের জন্য প্রস্তুত হলে, এই পরবর্তী নির্দেশিকাগুলি অনুসরণ করা গুরুত্বপূর্ণ:

  • অডিও ফোকাসের অনুরোধ করার সময় বা অডিও আউটপুট পরিচালনা করার সময়, অ্যাপটিকে অবশ্যই AudioAttributes#USAGE_ASSISTANT এবং AudioAttributes#CONTENT_TYPE_SPEECH ব্যবহার করতে হবে।
  • বক্তৃতা শনাক্তকরণের সময়, AudioManage#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE এর সাথে অডিও ফোকাস অনুরোধ করা আবশ্যক। সচেতন থাকুন যে কিছু মিডিয়া অ্যাপগুলি মিডিয়া কমান্ডগুলিতে সঠিকভাবে প্রতিক্রিয়া নাও করতে পারে ( মিডিয়া কমান্ডগুলি পূরণ করা দেখুন) যখন তাদের অডিও ফোকাস সরানো হয়।