গুগল অ্যাসিস্ট্যান্টের সাথে অ্যান্ড্রয়েড উইজেট একত্রিত করুন

1. ওভারভিউ

প্রথম অ্যাপ অ্যাকশন কোডল্যাবে , আপনি স্বাস্থ্য এবং ফিটনেস BII বিভাগ থেকে বিল্ট-ইন ইনটেন্ট (BII) প্রয়োগ করে নমুনা ফিটনেস অ্যাপে Google Assistant-কে কীভাবে প্রসারিত করতে হয় তা শিখেছেন।

অ্যাপ অ্যাকশন ব্যবহারকারীদের অ্যাসিস্ট্যান্ট থেকে নির্দিষ্ট অ্যাপ ফিচারে সরাসরি লঞ্চ করতে দেয়, যেমন " ওহে গুগল, এক্সাম্পলঅ্যাপে রান শুরু করুন।" অ্যাপ চালু করার পাশাপাশি, সহায়ক যোগ্য BII-এর অনুরোধ পূরণ করতে ব্যবহারকারীকে একটি ইন্টারেক্টিভ অ্যান্ড্রয়েড উইজেট প্রদর্শন করতে পারে।

একটি স্ক্রীন যেখানে সহকারীকে একটি উইজেট ফেরত দেখানো হচ্ছে একটি\nuser কোয়েরির জবাবে যা একটি অ্যাপের GET_EXERCISE_OBSERVATION BII সক্ষমতা ট্রিগার করেছে৷

আপনি কি নির্মাণ করবেন

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

  • উইজেট ব্যক্তিগতকৃত করার জন্য ব্যবহারকারীর BII পরামিতি।
  • আপনার উইজেটের জন্য Assistant-এ টেক্সট-টু-স্পিচ (TTS) ভূমিকা প্রদান করুন।
  • কোন BII সমর্থন উইজেট পরিপূর্ণতা নির্ধারণ করতে অন্তর্নির্মিত অভিপ্রায় রেফারেন্স ব্যবহার করুন.

পূর্বশর্ত

চালিয়ে যাওয়ার আগে, নিশ্চিত করুন যে আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট অ্যাপ অ্যাকশন ডেভেলপমেন্টের জন্য প্রস্তুত। এটি থাকা উচিত:

  • শেল কমান্ড চালানোর জন্য একটি টার্মিনাল, গিট ইনস্টল সহ।
  • অ্যান্ড্রয়েড স্টুডিওর সর্বশেষ স্থিতিশীল রিলিজ।
  • ইন্টারনেট অ্যাক্সেস সহ একটি শারীরিক বা ভার্চুয়াল অ্যান্ড্রয়েড ডিভাইস।
  • একটি Google অ্যাকাউন্ট যা Android Studio, Google অ্যাপ এবং Google Assistant অ্যাপে সাইন ইন করা আছে।

আপনি যদি একটি শারীরিক ডিভাইস ব্যবহার করেন, তাহলে এটি আপনার স্থানীয় উন্নয়ন মেশিনের সাথে সংযুক্ত করুন।

2. এটি কিভাবে কাজ করে তা বুঝুন

Google অ্যাসিস্ট্যান্ট ব্যবহারকারীর অনুরোধ পড়ার জন্য প্রাকৃতিক ভাষা বোঝার (NLU) ব্যবহার করে এবং এটি একটি সহকারী বিল্ট-ইন ইনটেন্ট (BII) এর সাথে মেলে। অ্যাসিস্ট্যান্ট তারপরে অভিপ্রায়কে সক্ষমতার সাথে ম্যাপ করে (যা BII প্রয়োগ করে), যা আপনি আপনার অ্যাপে সেই অভিপ্রায়ের জন্য নিবন্ধন করেন। অবশেষে, অ্যাসিস্ট্যান্ট আপনার অ্যাপের সক্ষমতায় পাওয়া বিশদ ব্যবহার করে তৈরি করা Android উইজেট প্রদর্শন করে ব্যবহারকারীর অনুরোধ পূরণ করে।

এই কোডল্যাবে, আপনি একটি ক্ষমতা সংজ্ঞায়িত করেন যা GET_EXERCISE_OBSERVATION BII-এর জন্য সমর্থন নিবন্ধন করে। এই ক্ষমতার মধ্যে, আপনি এই BII-এর অনুরোধগুলি পূরণ করার জন্য FitActions উইজেট ক্লাসে একটি Android অভিপ্রায় তৈরি করতে সহায়ককে নির্দেশ দেন। আপনি ব্যবহারকারীর কাছে সহায়কের জন্য একটি ব্যক্তিগতকৃত উইজেট তৈরি করতে এবং সহায়ক ঘোষণা করার জন্য একটি TTS ভূমিকা তৈরি করতে আপনি এই ক্লাসটি আপডেট করেন।

নিম্নলিখিত চিত্রটি এই প্রবাহটি প্রদর্শন করে:

সহকারী উইজেট পরিপূর্ণতা প্রদর্শন করে একটি ফ্লো ডায়াগ্রাম।

FitActions উইজেট

FitActions নমুনা অ্যাপটিতে একটি ওয়ার্কআউট তথ্য উইজেট রয়েছে যা ব্যবহারকারীরা তাদের হোম স্ক্রিনে যোগ করতে পারে। এই উইজেটটি GET_EXERCISE_OBSERVATION BII কে ট্রিগার করে এমন ব্যবহারকারীর প্রশ্নগুলি পূরণ করার জন্য একটি দুর্দান্ত প্রার্থী৷

কিভাবে উইজেট কাজ করে

যখন একজন ব্যবহারকারী হোম স্ক্রিনে একটি উইজেট যোগ করেন, তখন উইজেটটি ব্রডকাস্ট রিসিভার ডিভাইসটিকে পিং করে। এই পরিষেবাটি অ্যাপের AndroidManifest.xml রিসোর্সে উইজেটের রিসিভার সংজ্ঞা থেকে উইজেট সম্পর্কে তথ্য পুনরুদ্ধার করে। এটি উইজেট প্রতিনিধিত্বকারী একটি RemoteViews বস্তু তৈরি করতে এই তথ্য ব্যবহার করে।

নমুনা অ্যাপটি রিসিভার widgets.StatsWidgetProvider সংজ্ঞায়িত করে। স্ট্যাটসউইজেটপ্রোভাইডার, যা StatsWidgetProvider ক্লাসের সাথে মিলে যায়:

<!-- app/src/main/AndroidManifest.xml -->

<receiver
  android:name=".widgets.StatsWidgetProvider"
  android:exported="false">
  <intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  </intent-filter>
  <meta-data
    android:name="android.appwidget.provider"
    android:resource="@xml/stats_widget" />
</receiver>

StatsWidgetProvider ক্লাস, StatsWidgetProvider.kt , StatsWidget বস্তু তৈরির প্রবাহ পরিচালনা করে। এটি এই দায়িত্বগুলি পরিচালনা করে:

  • উইজেট দৃষ্টান্ত তৈরি করা এবং অ্যাপ ডাটাবেস থেকে ব্যায়াম ডেটা দিয়ে সেগুলি পপুলেট করা।
  • formatDataAndSetWidget() সহ পঠনযোগ্যতার জন্য ওয়ার্কআউট ডেটা ফর্ম্যাটিং।
  • setNoActivityDataWidget() ব্যবহার করে ওয়ার্কআউট ডেটা অনুপলব্ধ হলে ডিফল্ট মান প্রদান করা।

সহকারী সমর্থন যোগ করুন

এই কোডল্যাবে, আপনি অ্যাপ অ্যাকশন কার্যকারিতা পরিচালনা করতে নমুনা অ্যাপ আপডেট করেন। এই পরিবর্তনগুলি অন্তর্ভুক্ত:

  1. StatsWidget অবজেক্টের একটি উদাহরণ ফেরাতে GET_EXERCISE_OBSERVATION BII ক্ষমতা কনফিগার করা হচ্ছে।
  2. অ্যাপ্লিকেশান অ্যাকশন বৈশিষ্ট্যগুলি ব্যবহার করতে StatsWidget ক্লাস আপডেট করা হচ্ছে যেমন:
    • BII প্যারামিটার ব্যবহার করে, ব্যবহারকারীদেরকে কিছু জিজ্ঞাসা করে নির্দিষ্ট ওয়ার্কআউট পরিসংখ্যান দেখার অনুমতি দেয়, "Hey Google, ExampleApp-এ আমার রানের পরিসংখ্যান দেখান।"
    • TTS পরিচিতি স্ট্রিং প্রদান করা।
    • বিশেষ ক্ষেত্রে পরিচালনা করা, যেমন যখন ব্যবহারকারীর ক্যোয়ারীতে ওয়ার্কআউট টাইপ প্যারামিটার অন্তর্ভুক্ত থাকে না।

3. আপনার উন্নয়ন পরিবেশ প্রস্তুত করুন

আপনার বেস ফাইল ডাউনলোড করুন

নমুনা অ্যাপের GitHub সংগ্রহস্থল ক্লোন করতে এই কমান্ডটি চালান:

git clone --branch start-widget-codelab https://github.com/actions-on-google/appactions-fitness-kotlin.git

একবার আপনি সংগ্রহস্থলটি ক্লোন করার পরে, Android স্টুডিওতে এটি খুলতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. অ্যান্ড্রয়েড স্টুডিওতে স্বাগতম ডায়ালগে, ইমপোর্ট প্রোজেক্টে ক্লিক করুন।
  2. আপনি যে ফোল্ডারটি সংগ্রহস্থল ক্লোন করেছেন সেটি খুঁজুন এবং নির্বাচন করুন।

সম্পূর্ণ কোডল্যাবের প্রতিনিধিত্বকারী অ্যাপটির একটি সংস্করণ দেখতে, --branch master ফ্ল্যাগ ব্যবহার করে নমুনা অ্যাপ রেপো ক্লোন করুন।

অ্যান্ড্রয়েড অ্যাপ্লিকেশন আইডি আপডেট করুন

অ্যাপের অ্যাপ্লিকেশান আইডি আপডেট করা আপনার পরীক্ষা ডিভাইসে অ্যাপটিকে অনন্যভাবে সনাক্ত করে এবং অ্যাপটি প্লে কনসোলে আপলোড করা হলে একটি "ডুপ্লিকেট প্যাকেজ নাম" ত্রুটি এড়ায়। অ্যাপ্লিকেশন আইডি আপডেট করতে, app/build.gradle খুলুন:

android {
...
  defaultConfig {
    applicationId "com.MYUNIQUENAME.android.fitactions"
    ...
  }
}

applicationId ক্ষেত্রে "MYUNIQUENAME" প্রতিস্থাপন করুন আপনার জন্য অনন্য কিছুতে।

পরীক্ষা প্লাগইন ইনস্টল করুন

Google অ্যাসিস্ট্যান্ট প্লাগইন আপনাকে একটি টেস্ট ডিভাইসে আপনার অ্যাপ অ্যাকশন পরীক্ষা করতে দেয়। এটি আপনার Android ডিভাইসে Google অ্যাপের মাধ্যমে সহকারীকে তথ্য পাঠানোর মাধ্যমে কাজ করে। আপনার যদি প্লাগইনটি ইতিমধ্যেই না থাকে তবে এই পদক্ষেপগুলি দিয়ে এটি ইনস্টল করুন:

  1. ফাইল > সেটিংসে যান ( অ্যান্ড্রয়েড স্টুডিও > ম্যাকওএসে পছন্দ )।
  2. প্লাগইন বিভাগে, মার্কেটপ্লেসে যান এবং "গুগল সহকারী" অনুসন্ধান করুন। এছাড়াও আপনি ম্যানুয়ালি টেস্ট টুল ডাউনলোড এবং ইনস্টল করতে পারেন।
  3. টুলটি ইনস্টল করুন এবং অ্যান্ড্রয়েড স্টুডিও পুনরায় চালু করুন।

আপনার ডিভাইসে অ্যাপটি পরীক্ষা করুন

অ্যাপটিতে আরও পরিবর্তন করার আগে, নমুনা অ্যাপটি কী করতে পারে সে সম্পর্কে ধারণা পেতে সাহায্য করে।

আপনার পরীক্ষা ডিভাইসে অ্যাপটি চালান:

  1. অ্যান্ড্রয়েড স্টুডিওতে, আপনার শারীরিক বা ভার্চুয়াল ডিভাইস নির্বাচন করুন এবং রান > অ্যাপ চালান নির্বাচন করুন বা রান ক্লিক করুন অ্যান্ড্রয়েড স্টুডিওতে অ্যাপ আইকন চালান। টুলবারে
  2. সহকারী সেট আপ করতে এবং এটি কাজ করে কিনা তা যাচাই করতে হোম বোতামটি দীর্ঘক্ষণ টিপুন। আপনার ডিভাইসে অ্যাসিস্ট্যান্ট-এ সাইন-ইন করতে হবে, যদি আপনি ইতিমধ্যে না করে থাকেন।

অ্যান্ড্রয়েড ভার্চুয়াল ডিভাইস সম্পর্কে আরও তথ্যের জন্য, ভার্চুয়াল ডিভাইস তৈরি করুন এবং পরিচালনা করুন দেখুন।

সংক্ষিপ্তভাবে অ্যাপটি কী করতে পারে তা দেখতে দেখুন। অ্যাপটি 10টি ব্যায়াম ক্রিয়াকলাপ তৈরি করে এবং এই তথ্যটি প্রথম দৃশ্যে প্রদর্শন করে।

বিদ্যমান উইজেট চেষ্টা করুন

  1. আপনার টেস্ট ডিভাইসের হোম স্ক্রিনে যেতে হোম বোতামে ট্যাপ করুন।
  2. হোম স্ক্রীনে একটি খালি জায়গায় দীর্ঘক্ষণ চাপ দিন এবং উইজেট নির্বাচন করুন।
  3. উইজেট তালিকা থেকে FitActions-এ স্ক্রোল করুন।
  4. FitActions আইকনে দীর্ঘক্ষণ চাপ দিন এবং এর উইজেটটি হোম স্ক্রিনে রাখুন।

ডিভাইসের হোম স্ক্রিনে FitActions উইজেট প্রদর্শন করা স্ক্রিনশট।

4. অ্যাপ অ্যাকশন যোগ করুন

এই ধাপে, আপনি GET_EXERCISE_OBSERVATION BII ক্ষমতা যোগ করুন। আপনি shortcuts.xml এ একটি নতুন capability উপাদান যোগ করে এটি করতে পারেন। এই ক্ষমতাটি কীভাবে সক্ষমতা ট্রিগার করা হয়, কীভাবে BII পরামিতিগুলি ব্যবহার করা হয় এবং অনুরোধটি পূরণ করার জন্য কোন অ্যান্ড্রয়েডের অভিপ্রায়গুলি ব্যবহার করা হয় তা নির্দিষ্ট করে৷

  1. এই কনফিগারেশনের সাথে নমুনা প্রকল্প shortcuts.xml রিসোর্সে একটি নতুন capability উপাদান যোগ করুন:
    <!-- fitnessactions/app/src/main/res/xml/shortcuts.xml -->
    
    <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION">
      <app-widget
        android:identifier="GET_EXERCISE_OBSERVATION"
        android:targetClass="com.devrel.android.fitactions.widgets.StatsWidgetProvider"
        android:targetPackage="PUT_YOUR_APPLICATION_ID_HERE">
        <parameter
          android:name="exerciseObservation.aboutExercise.name"
          android:key="aboutExerciseName"
          android:required="true">
        </parameter>
        <extra android:name="hasTts" android:value="true"/>
      </app-widget>
      <!-- Add Fallback Intent-->
    </capability>
    
    আপনার অনন্য applicationId দিয়ে android:targetPackage মান, PUT_YOUR_APPLICATION_ID_HERE প্রতিস্থাপন করুন।

এই ক্ষমতা GET_EXERCISE_OBSERVATION BII কে app-widget অভিপ্রায়ে ম্যাপ করে যাতে যখন BII ট্রিগার হয়, উইজেটটি তাৎক্ষণিকভাবে ব্যবহারকারীর কাছে প্রদর্শন করে।

উইজেট ট্রিগার করার আগে, সহকারী ব্যবহারকারীর ক্যোয়ারী থেকে সমর্থিত BII প্যারামিটার বের করে। এই কোডল্যাবের জন্য BII পরামিতি exerciseObservation.aboutExercise.name প্রয়োজন, যা ব্যবহারকারীর অনুরোধ করা ব্যায়ামের ধরনকে উপস্থাপন করে। অ্যাপটি তিনটি ব্যায়ামের ধরন সমর্থন করে: "দৌড়ানো", "হাঁটা" এবং "সাইকেল চালানো।" এই সমর্থিত মানগুলি সহকারীকে জানাতে আপনি একটি ইনলাইন ইনভেন্টরি প্রদান করেন।

  1. GET_EXERCISE_OBSERVATION ক্ষমতার উপরে, shortcuts.xml এ এই কনফিগারেশন যোগ করে এই ইনভেন্টরি উপাদানগুলিকে সংজ্ঞায়িত করুন :
    <!-- shortcuts.xml -->
    
    <!-- shortcuts are bound to the GET_EXERCISE_OBSERVATION capability and
         represent the types of exercises supported by the app. -->
    
    <shortcut
      android:shortcutId="running"
      android:shortcutShortLabel="@string/activity_running">
      <capability-binding android:key="actions.intent.GET_EXERCISE_OBSERVATION">
        <parameter-binding
          android:key="exerciseObservation.aboutExercise.name"
          android:value="@array/runningSynonyms"/>
      </capability-binding>
    </shortcut>
    
    <shortcut
      android:shortcutId="walking"
      android:shortcutShortLabel="@string/activity_walking">
      <capability-binding android:key="actions.intent.GET_EXERCISE_OBSERVATION">
        <parameter-binding
          android:key="exerciseObservation.aboutExercise.name"
          android:value="@array/walkingSynonyms"/>
      </capability-binding>
    </shortcut>
    
    <shortcut
      android:shortcutId="cycling"
      android:shortcutShortLabel="@string/activity_cycling">
      <capability-binding android:key="actions.intent.GET_EXERCISE_OBSERVATION">
        <parameter-binding
          android:key="exerciseObservation.aboutExercise.name"
          android:value="@array/cyclingSynonyms"/>
      </capability-binding>
    </shortcut>
    
    <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION">
      <!-- ... -->
    </capability>
    

একটি ফলব্যাক অভিপ্রায় যোগ করুন

ফলব্যাক ইন্টেন্টগুলি এমন পরিস্থিতিতে পরিচালনা করে যেখানে ব্যবহারকারীর ক্যোয়ারী পূর্ণ করা যায় না কারণ ক্যোয়ারীটি সক্ষমতার জন্য প্রয়োজনীয় প্যারামিটারগুলি অনুপস্থিত। GET_EXERCISE_OBSERVATION ক্ষমতার জন্য exerciseObservation.aboutExercise.name প্যারামিটার প্রয়োজন, android:required="true" অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা হয়েছে। এই পরিস্থিতিগুলির জন্য, অ্যাসিস্ট্যান্ট আপনাকে অনুরোধটি সফল করার অনুমতি দেওয়ার জন্য একটি ফলব্যাক অভিপ্রায় নির্ধারণ করতে হবে, এমনকি কোয়েরিতে কোনও প্যারামিটার দেওয়া না থাকলেও৷

  1. shortcuts.xml এ, এই কনফিগারেশনটি ব্যবহার করে GET_EXERCISE_OBSERVATION সক্ষমতায় একটি ফলব্যাক অভিপ্রায় যোগ করুন:
    <!-- shortcuts.xml -->
    
    <capability android:name="actions.intent.GET_EXERCISE_OBSERVATION">
    
      <app-widget>
        <!-- ... -->
      </app-widget>
    
      <!-- Fallback intent with no parameters needed to successfully execute.-->
      <intent
        android:identifier="GET_EXERCISE_OBSERVATION_FALLBACK"
        android:action="android.intent.action.VIEW"
        android:targetClass="com.devrel.android.fitactions.widgets.StatsWidgetProvider">
      </intent>
    </capability>
    

এই নমুনা কনফিগারেশনে, ফ্যালব্যাক পূর্ণতা একটি Android উদ্দেশ্য যার Extra ডেটাতে কোনো প্যারামিটার নেই।

5. সহকারীর জন্য উইজেট সক্ষম করুন৷

GET_EXERCISE_OBSERVATION সক্ষমতার সাথে, অ্যাপ অ্যাকশন ভয়েস আহ্বান সমর্থন করতে উইজেট ক্লাস আপডেট করুন।

উইজেট এক্সটেনশন লাইব্রেরি যোগ করুন

অ্যাপ অ্যাকশন উইজেট এক্সটেনশন লাইব্রেরি ভয়েস-ফরোয়ার্ড সহকারী অভিজ্ঞতার জন্য আপনার উইজেটগুলিকে উন্নত করে। বিশেষ করে, এটি আপনাকে আপনার উইজেটগুলির জন্য একটি কাস্টম TTS ভূমিকা প্রদান করতে সক্ষম করে।

  1. নমুনা অ্যাপ /app/build.gradle রিসোর্সে উইজেট এক্সটেনশন লাইব্রেরি নির্ভরতা যোগ করুন:
    // app/build.gradle
    
    dependencies {
      //...
      implementation "com.google.assistant.appactions:widgets:0.0.1"
    }
    
    অ্যান্ড্রয়েড স্টুডিওতে প্রদর্শিত সতর্কতা বাক্সে এখন সিঙ্ক এ ক্লিক করুন। প্রতিটি build.gradle পরিবর্তনের পরে সিঙ্ক করা আপনাকে অ্যাপ তৈরি করার সময় ত্রুটিগুলি এড়াতে সাহায্য করে৷

উইজেট পরিষেবা যোগ করুন

একটি পরিষেবা হল একটি অ্যাপ্লিকেশন উপাদান যা ব্যাকগ্রাউন্ডে দীর্ঘস্থায়ী ক্রিয়াকলাপ সম্পাদন করতে পারে। আপনার অ্যাপকে উইজেট অনুরোধ প্রক্রিয়া করার জন্য একটি পরিষেবা প্রদান করতে হবে।

  1. এই কনফিগারেশনের সাথে নমুনা অ্যাপের AndroidManifest.xml রিসোর্সে একটি পরিষেবা যোগ করুন:
    <!-- AndroidManifest.xml -->
    <service
       android:name=".widgets.StatsWidgetProvider"
       android:enabled="true"
       android:exported="true">
       <intent-filter>
           <action
               android:name="com.google.assistant.appactions.widgets.PIN_APP_WIDGET" />
       </intent-filter>
    </service>
    
    

একটি ভয়েস কোয়েরি যা উইজেট পূরণকে ট্রিগার করে, অ্যাসিস্ট্যান্ট অ্যাপে অনুরোধ পাঠাতে এই পরিষেবাটি ব্যবহার করে। পরিষেবাটি BII ডেটা সহ অনুরোধটি গ্রহণ করে। পরিষেবাটি সহকারীর মধ্যে রেন্ডার করার জন্য একটি RemoteView উইজেট বস্তু তৈরি করতে এই ডেটা ব্যবহার করে।

উইজেট ক্লাস আপডেট করুন

আপনার অ্যাপটি এখন আপনার উইজেট ক্লাসে GET_EXERCISE_OBSERVATION ক্ষমতার অনুরোধগুলি রুট করার জন্য কনফিগার করা হয়েছে৷ এরপরে, BII প্যারামিটার মান ব্যবহার করে ব্যবহারকারীর অনুরোধে ব্যক্তিগতকৃত উইজেট উদাহরণ তৈরি করতে StatsWidget.kt ক্লাস আপডেট করুন।

  1. StatsWidget.kt ক্লাস খুলুন এবং অ্যাপ অ্যাকশন উইজেট এক্সটেনশন লাইব্রেরি আমদানি করুন:
    // StatsWidget.kt
    
    // ... Other import statements
    import com.google.assistant.appactions.widgets.AppActionsWidgetExtension
    
    
  2. এই ব্যক্তিগত ভেরিয়েবলগুলি যোগ করুন, যেগুলি আপনি তথ্য নির্ধারণ করার সময় ব্যবহার করেন যা উইজেটটি পূরণ করবে:
    // StatsWidget.kt
    
    private val hasBii: Boolean
    private val isFallbackIntent: Boolean
    private val aboutExerciseName: String
    private val exerciseType: FitActivity.Type
    
  3. সহকারী থেকে পাস করা উইজেট বিকল্পের ডেটা ক্লাসকে ব্যবহার করতে দিতে init ফাংশন যোগ করুন:
    // StatsWidget.kt
    
    init {
      val optionsBundle = appWidgetManager.getAppWidgetOptions(appWidgetId)
      val bii = optionsBundle.getString(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_BII)
      hasBii = !bii.isNullOrBlank()
      val params = optionsBundle.getBundle(AppActionsWidgetExtension.EXTRA_APP_ACTIONS_PARAMS)
    
      if (params != null) {
        isFallbackIntent = params.isEmpty
        if (isFallbackIntent) {
          aboutExerciseName = context.resources.getString(R.string.activity_unknown)
        } else {
            aboutExerciseName = params.get("aboutExerciseName") as String
          }
      } else {
          isFallbackIntent = false
          aboutExerciseName = context.resources.getString(R.string.activity_unknown)
      }
      exerciseType = FitActivity.Type.find(aboutExerciseName)
    }
    
    

GET_EXERCISE_OBSERVATION সক্ষমতা দ্বারা উত্পন্ন অ্যান্ড্রয়েড অভিপ্রায়গুলিতে প্রতিক্রিয়া জানাতে এই আপডেটগুলি কীভাবে StatsWidget.kt ক্লাসকে সক্ষম করে তা নিয়ে চলুন:

  • optionsBundle = বান্ডিল
    • বান্ডেলগুলি এমন বস্তু যা প্রক্রিয়ার সীমানা জুড়ে, উদ্দেশ্য সহ কার্যকলাপের মধ্যে এবং কনফিগারেশন পরিবর্তন জুড়ে ক্ষণস্থায়ী অবস্থা সংরক্ষণ করার উদ্দেশ্যে ব্যবহার করা হয়। সহকারী উইজেটে কনফিগারেশন ডেটা পাস করতে Bundle অবজেক্ট ব্যবহার করে।
  • bii = actions.intent.GET_EXERCISE_OBSERVATION
    • AppActionsWidgetExtension ব্যবহার করে বান্ডেল থেকে BII-এর নাম পাওয়া যায়।
  • hasBii = true
    • একটি BII আছে কিনা তা পরীক্ষা করে।
  • params = Bundle[{aboutExerciseName=running}]
    • একটি বিশেষ বান্ডেল, অ্যাপ অ্যাকশন দ্বারা তৈরি, উইজেট বিকল্প Bundle ভিতরে নেস্ট করা হয়। এতে BII-এর কী/মান জোড়া রয়েছে। এই ক্ষেত্রে, "Hey Google, ExampleApp-এ আমার চলমান পরিসংখ্যান দেখান। running
  • isFallbackIntent = false
    • অভিপ্রায় Extras প্রয়োজনীয় BII প্যারামিটারের উপস্থিতির জন্য পরীক্ষা করে।
  • aboutExerciseName = running
    • aboutExerciseName এর জন্য অভিপ্রায় Extras মান পায়।
  • exerciseType = RUNNING
    • সংশ্লিষ্ট ডাটাবেস টাইপ অবজেক্ট দেখতে aboutExerciseName ব্যবহার করে।

এখন যেহেতু StatsWidget ক্লাস ইনকামিং অ্যাপ অ্যাকশন অ্যান্ড্রয়েড ইনটেন্ট ডেটা প্রক্রিয়া করতে পারে, উইজেট তৈরির ফ্লো লজিক আপডেট করুন যে উইজেটটি অ্যাপ অ্যাকশন দ্বারা ট্রিগার হয়েছে কিনা।

  1. StatsWidget.kt এ, এই কোড দিয়ে updateAppWidget() ফাংশন প্রতিস্থাপন করুন:
    // StatsWidget.kt
    
    fun updateAppWidget() {
       /**
        * Checks for App Actions BII invocation and if BII parameter data is present.
        * If parameter data is missing, use data from last exercise recorded to the
        *  fitness tracking database.
        */
       if (hasBii && !isFallbackIntent) {
           observeAndUpdateRequestedExercise()
       } else observeAndUpdateLastExercise()
    }
    
    

পূর্ববর্তী কোডটি একটি নতুন ফাংশন উল্লেখ করে, observeAndUpdateRequestedExercise । এই ফাংশনটি অ্যাপ অ্যাকশন অ্যান্ড্রয়েড অভিপ্রায় দ্বারা পাস করা exerciseType প্যারামিটার ডেটা ব্যবহার করে উইজেট ডেটা তৈরি করে।

  1. এই কোডের সাথে observeAndUpdateRequestedExercise ফাংশন যোগ করুন:
    // StatsWidget.kt
    
    /**
    * Create and observe the last exerciseType activity LiveData.
    */
    private fun observeAndUpdateRequestedExercise() {
      val activityData = repository.getLastActivities(1, exerciseType)
    
       activityData.observeOnce { activitiesStat ->
           if (activitiesStat.isNotEmpty()) {
               formatDataAndSetWidget(activitiesStat[0])
               updateWidget()
           } else {
               setNoActivityDataWidget()
               updateWidget()
           }
       }
    }
    
    

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

TTS সক্ষম করুন

আপনার উইজেট প্রদর্শন করার সময় অ্যাসিস্ট্যান্টকে ঘোষণা করার জন্য আপনি একটি TTS স্ট্রিং প্রদান করতে পারেন। আপনার উইজেটগুলির সাথে শ্রবণযোগ্য প্রসঙ্গ সরবরাহ করতে আমরা এটি অন্তর্ভুক্ত করার পরামর্শ দিই৷ এই কার্যকারিতা অ্যাপ অ্যাকশন উইজেটস এক্সটেনশন লাইব্রেরি দ্বারা সরবরাহ করা হয়েছে, যা আপনাকে সহকারীতে আপনার উইজেটগুলির সাথে থাকা পাঠ্য এবং TTS ভূমিকা সেট করতে দেয়৷

আপনার TTS পরিচিতি প্রদান করার জন্য একটি ভাল জায়গা হল formatDataAndSetWidget ফাংশন, যা অ্যাপ ডাটাবেস থেকে ফিরে আসা কার্যকলাপ ডেটা ফর্ম্যাট করে।

  1. StatsWidget.kt এ, এই কোডটি formatDataAndSetWidget ফাংশনে যোগ করুন:
    // StatsWidget.kt
    
    private fun formatDataAndSetWidget(
      activityStat: FitActivity,
    ) {
          // ...
    
          // Add conditional for hasBii for widget with data
          if (hasBii) {
             // Formats TTS speech and display text for Assistant
             val speechText = context.getString(
                 R.string.widget_activity_speech,
                 activityExerciseTypeFormatted,
                 formattedDate,
                 durationInMin,
                 distanceInKm
             )
             val displayText = context.getString(
                 R.string.widget_activity_text,
                 activityExerciseTypeFormatted,
                 formattedDate
             )
             setTts(speechText, displayText)
          }
    }
    
    

পূর্ববর্তী কোড দুটি স্ট্রিং সংস্থান উল্লেখ করে: একটি বক্তৃতার জন্য এবং অন্যটি পাঠ্যের জন্য। TTS সুপারিশের জন্য আমাদের উইজেট ভিডিওর টেক্সট-টু-স্পিচ স্টাইল সুপারিশ অংশটি দেখুন। নমুনাটি setTts কেও নির্দেশ করে, একটি নতুন ফাংশন যা উইজেট উদাহরণে TTS তথ্য প্রদান করে।

  1. এই কোডটি ব্যবহার করে StatsWidget.kt এ এই নতুন setTts ফাংশন যোগ করুন:
    // StatsWidget.kt
    
    /**
     * Sets TTS to widget
     */
    private fun setTts(
      speechText: String,
      displayText: String,
    ) {
      val appActionsWidgetExtension: AppActionsWidgetExtension =
          AppActionsWidgetExtension.newBuilder(appWidgetManager)
            .setResponseSpeech(speechText)  // TTS to be played back to the user
            .setResponseText(displayText)  // Response text to be displayed in Assistant
            .build()
    
      // Update widget with TTS
      appActionsWidgetExtension.updateWidget(appWidgetId)
    }
    

অবশেষে, যখন ব্যায়াম ডাটাবেস অনুরোধকৃত ওয়ার্কআউট প্রকারের জন্য খালি ডেটা ফেরত দেয় তখন TTS তথ্য সেট করে TTS লজিক সম্পূর্ণ করুন।

  1. এই কোড দিয়ে StatsWidget.ktsetNoActivityDataWidget() ফাংশন আপডেট করুন:
    // StatsWidget.kt
    
    private fun setNoActivityDataWidget() {
      // ...
      // Add conditional for hasBii for widget without data
      if (hasBii) {
        // formats speech and display text for Assistant
        // https://developers.google.com/assistant/app/widgets#library
        val speechText =
          context.getString(R.string.widget_no_activity_speech, aboutExerciseName)
        val displayText =
          context.getString(R.string.widget_no_activity_text)
    
        setTts(speechText, displayText)
      }
    }
    

6. অ্যাপ অ্যাকশন পরীক্ষা করুন

ডেভেলপমেন্টের সময়, টেস্ট ডিভাইসে অ্যাসিস্ট্যান্ট অ্যাপ অ্যাকশনের পূর্বরূপ দেখতে Google অ্যাসিস্ট্যান্ট প্লাগইন ব্যবহার করুন। ব্যবহারকারী সহকারীকে এটি চালানোর জন্য জিজ্ঞাসা করতে পারে এমন বিভিন্ন উপায়ে আপনার অ্যাকশন কীভাবে পরিচালনা করে তা পরীক্ষা করার জন্য আপনি একটি অ্যাপ অ্যাকশনের জন্য ইন্টেন্ট প্যারামিটারগুলি সামঞ্জস্য করতে পারেন।

একটি পূর্বরূপ তৈরি করুন

প্লাগইন দিয়ে আপনার অ্যাপ অ্যাকশন পরীক্ষা করতে:

  1. টুলস > গুগল অ্যাসিস্ট্যান্ট > অ্যাপ অ্যাকশন টেস্ট টুলে যান। আপনাকে আপনার Google অ্যাকাউন্ট ব্যবহার করে Android স্টুডিওতে সাইন ইন করতে বলা হতে পারে।
  2. পূর্বরূপ তৈরি করুন ক্লিক করুন। জিজ্ঞাসা করা হলে, অ্যাপ অ্যাকশন নীতি এবং পরিষেবার শর্তাবলী পর্যালোচনা করুন এবং স্বীকার করুন।

একটি প্রত্যাশিত ব্যায়ামের ধরন পরীক্ষা করুন

পরীক্ষা টুলে এই ধাপগুলি অনুসরণ করে অ্যাপে শেষ চালানোর তথ্য দেখানো একটি উইজেট ফেরত দিন:

  1. প্রথম ধাপে যেখানে টুলটি আপনাকে একটি BII নির্বাচন এবং কনফিগার করতে বলে, সেখানে actions.intent.GET_EXERCISE_OBSERVATION নির্বাচন করুন।
  2. ব্যায়াম অবজারভেশন বক্সে, climbing থেকে run পর্যন্ত ডিফল্ট ব্যায়ামের নাম আপডেট করুন।
  3. রান অ্যাপ অ্যাকশনে ক্লিক করুন।

Google অ্যাসিস্ট্যান্ট প্লাগইন ব্যবহার করে ফিরে আসা উইজেট দেখানো একটি স্ক্রীন।

একটি অপ্রত্যাশিত ব্যায়ামের ধরন পরীক্ষা করুন

টেস্ট টুলে একটি অপ্রত্যাশিত ব্যায়ামের ধরন পরীক্ষা করতে:

  1. ব্যায়াম অবজারভেশন বক্সে, Run থেকে Climbing পর্যন্ত name মান আপডেট করুন।
  2. রান অ্যাপ অ্যাকশনে ক্লিক করুন।

সহকারীকে "কোন কার্যকলাপ পাওয়া যায়নি" তথ্য প্রদর্শন করে একটি উইজেট ফেরত দেওয়া উচিত।

Google অ্যাসিস্ট্যান্ট প্লাগইন ব্যবহার করে ব্যায়ামের তথ্য ছাড়াই একটি উইজেট দেখানো একটি স্ক্রীন।

ফলব্যাক অভিপ্রায় পরীক্ষা

ফলব্যাক অভিপ্রায় ট্রিগারকারী প্রশ্নগুলি যে কোনও ব্যায়ামের প্রকারের শেষ লগ করা কার্যকলাপ সম্পর্কে তথ্য প্রদর্শন করে একটি উইজেট ফেরত দেবে।

ফলব্যাক অভিপ্রায় পরীক্ষা করতে:

  1. ব্যায়াম পর্যবেক্ষণ বাক্সে, aboutExercise অবজেক্টটি মুছুন।
  2. রান অ্যাপ অ্যাকশনে ক্লিক করুন।

সহকারীকে শেষ সম্পন্ন হওয়া অনুশীলনের তথ্য প্রদর্শন করে একটি উইজেট ফেরত দেওয়া উচিত।

Google অ্যাসিস্ট্যান্ট প্লাগইন ব্যবহার করে শেষ রেকর্ড করা অ্যাক্টিভিটি দেখানো একটি উইজেট দেখানো একটি স্ক্রীন।

7. পরবর্তী পদক্ষেপ

অভিনন্দন!

আপনার কাছে এখন অ্যাসিস্ট্যান্টের সাথে একটি অ্যান্ড্রয়েড উইজেট ব্যবহার করে ব্যবহারকারীদের প্রশ্ন পূরণ করার ক্ষমতা আছে।

আমরা কভার করেছি কি

এই কোডল্যাবে, আপনি শিখেছেন কিভাবে:

  • একটি BII এ একটি অ্যাপ উইজেট যোগ করুন।
  • Android Extras থেকে প্যারামিটার অ্যাক্সেস করতে একটি উইজেট পরিবর্তন করুন।

এরপর কি

এখান থেকে, আপনি আপনার ফিটনেস অ্যাপে আরও পরিমার্জন করার চেষ্টা করতে পারেন। সমাপ্ত প্রকল্প উল্লেখ করতে, GitHub এ প্রধান রেপো দেখুন।

অ্যাপ অ্যাকশনগুলির সাথে এই অ্যাপটি প্রসারিত করার বিষয়ে আরও শেখার জন্য এখানে কিছু পরামর্শ রয়েছে:

আপনার অ্যাকশন অন Google যাত্রা চালিয়ে যেতে, এই সম্পদগুলি অন্বেষণ করুন:

আমাদের লেটেস্ট ঘোষণার সাথে থাকতে টুইটার @ActionsOnGoogle- এ আমাদের অনুসরণ করুন, এবং আপনি যা তৈরি করেছেন তা শেয়ার করতে #অ্যাপকেশনে টুইট করুন!

প্রতিক্রিয়া সমীক্ষা

অবশেষে, এই কোডল্যাবের সাথে আপনার অভিজ্ঞতা সম্পর্কে প্রতিক্রিয়া জানাতে অনুগ্রহ করে এই সমীক্ষাটি পূরণ করুন