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

1. সংক্ষিপ্ত বিবরণ

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

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

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

তুমি কী তৈরি করবে

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

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

পূর্বশর্ত

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

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

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

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

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

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

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

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

FitActions উইজেট

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

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

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

নমুনা অ্যাপটি রিসিভার widgets.StatsWidgetProvider সংজ্ঞায়িত করে। 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 প্যারামিটার ব্যবহার করে, ব্যবহারকারীরা "হে গুগল, ExampleApp-এ আমার রান স্ট্যাটাস দেখাও" এর মতো জিনিস জিজ্ঞাসা করে নির্দিষ্ট ওয়ার্কআউট পরিসংখ্যান দেখতে পারবেন।
    • TTS ভূমিকা স্ট্রিং প্রদান করা হচ্ছে।
    • বিশেষ ক্ষেত্রে পরিচালনা করা, যেমন যখন ব্যবহারকারীর কোয়েরিতে কোনও ওয়ার্কআউট টাইপ প্যারামিটার অন্তর্ভুক্ত থাকে না।

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

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

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

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

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

  1. Welcome to Android Studio ডায়ালগে, Import project এ ক্লিক করুন।
  2. আপনি যে ফোল্ডারে রিপোজিটরিটি ক্লোন করেছেন সেটি খুঁজুন এবং নির্বাচন করুন।

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

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

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

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

applicationId ক্ষেত্রের "MYUNIQUENAME" এর পরিবর্তে আপনার জন্য অনন্য কিছু লিখুন।

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

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

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

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

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

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

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

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

অ্যাপটি কী করতে পারে তা দেখার জন্য সংক্ষেপে এটি অন্বেষণ করুন। অ্যাপটি ১০টি ব্যায়াম কার্যকলাপ আগে থেকেই তৈরি করে এবং প্রথম ভিউতে এই তথ্য প্রদর্শন করে।

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

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

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

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

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

  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>
    
    android:targetPackage মান, PUT_YOUR_APPLICATION_ID_HERE , আপনার অনন্য applicationId দিয়ে প্রতিস্থাপন করুন।

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

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

  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" অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা হয়েছে। এই পরিস্থিতিতে, Assistant আপনাকে একটি ফলব্যাক ইন্টেন্ট সংজ্ঞায়িত করতে বাধ্য করে যাতে অনুরোধটি সফল হয়, এমনকি যদি কোয়েরিতে কোনও প্যারামিটার না থাকে।

  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>
    

এই নমুনা কনফিগারেশনে, ফলব্যাক পরিপূর্ণতা হল একটি অ্যান্ড্রয়েড অভিপ্রায় যার Extra ডেটাতে কোনও প্যারামিটার নেই।

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

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

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

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

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

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

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

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

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

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

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

টিটিএস সক্ষম করুন

আপনার উইজেট প্রদর্শনের সময় অ্যাসিস্ট্যান্টকে ঘোষণা করার জন্য আপনি একটি 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)
      }
    }
    

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

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

একটি প্রিভিউ তৈরি করুন

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

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

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

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

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

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

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

পরীক্ষার সরঞ্জামে একটি অপ্রত্যাশিত ব্যায়ামের ধরণ পরীক্ষা করতে:

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

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

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

ফলব্যাকের উদ্দেশ্য পরীক্ষা করুন

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

ফলব্যাক ইন্টেন্ট পরীক্ষা করতে:

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

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

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

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

অভিনন্দন!

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

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

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

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

এরপর কি?

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

অ্যাপ অ্যাকশনের মাধ্যমে এই অ্যাপটি কীভাবে সম্প্রসারিত করা যায় সে সম্পর্কে আরও জানার জন্য এখানে কিছু পরামর্শ দেওয়া হল:

আপনার অ্যাকশনস অন গুগল যাত্রা চালিয়ে যেতে, এই রিসোর্সগুলি ঘুরে দেখুন:

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

প্রতিক্রিয়া জরিপ

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