একটি অনুসন্ধান ইন্টারফেস তৈরি করুন

কম্পোজ পদ্ধতিটি চেষ্টা করুন
অ্যান্ড্রয়েডের জন্য Jetpack Compose হলো প্রস্তাবিত UI টুলকিট। Compose-এ কীভাবে সার্চ ফাংশন যুক্ত করবেন তা জানুন।

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

সার্চ ডায়ালগ এবং উইজেটের জন্য উপলব্ধ অন্যান্য বৈশিষ্ট্যগুলির মধ্যে রয়েছে:

  • ভয়েস সার্চ
  • সাম্প্রতিক অনুসন্ধানের উপর ভিত্তি করে পরামর্শ
  • আপনার অ্যাপ ডেটাতে প্রকৃত ফলাফলের সাথে মেলে এমন অনুসন্ধানের পরামর্শ

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

সম্পর্কিত সম্পদ:

মৌলিক বিষয়গুলো

শুরু করার আগে, সিদ্ধান্ত নিন যে আপনি আপনার সার্চ ইন্টারফেসটি সার্চ ডায়ালগ নাকি সার্চ উইজেট ব্যবহার করে তৈরি করতে চান। এগুলি একই সার্চ বৈশিষ্ট্য প্রদান করে, তবে কিছুটা ভিন্ন উপায়ে:

  • সার্চ ডায়ালগ হলো একটি UI কম্পোনেন্ট যা অ্যান্ড্রয়েড সিস্টেম দ্বারা নিয়ন্ত্রিত হয়। ব্যবহারকারী কর্তৃক সক্রিয় করা হলে, সার্চ ডায়ালগটি অ্যাক্টিভিটির শীর্ষে প্রদর্শিত হয়।

    অ্যান্ড্রয়েড সিস্টেম সার্চ ডায়ালগের সমস্ত ইভেন্ট নিয়ন্ত্রণ করে। যখন ব্যবহারকারী কোনো কোয়েরি জমা দেন, তখন সিস্টেম সেই কোয়েরিটি আপনার নির্দিষ্ট করা অ্যাক্টিভিটিতে পাঠিয়ে দেয়, যা সার্চ পরিচালনার জন্য ব্যবহৃত হয়। ব্যবহারকারী টাইপ করার সময় ডায়ালগটি সার্চ সাজেশনও প্রদান করতে পারে।

  • সার্চ উইজেট হলো SearchView এর একটি ইনস্ট্যান্স, যা আপনি আপনার লেআউটের যেকোনো জায়গায় রাখতে পারেন। ডিফল্টরূপে, সার্চ উইজেট একটি সাধারণ EditText উইজেটের মতো আচরণ করে এবং কিছুই করে না, কিন্তু আপনি এটিকে এমনভাবে কনফিগার করতে পারেন যাতে অ্যান্ড্রয়েড সিস্টেম সমস্ত ইনপুট ইভেন্ট পরিচালনা করে, উপযুক্ত অ্যাক্টিভিটিতে কোয়েরি পৌঁছে দেয় এবং সার্চ ডায়ালগের মতোই সার্চ সাজেশন প্রদান করে।

যখন ব্যবহারকারী সার্চ ডায়ালগ বা সার্চ উইজেট থেকে কোনো সার্চ করেন, তখন সিস্টেম একটি Intent তৈরি করে এবং তাতে ব্যবহারকারীর কোয়েরিটি সংরক্ষণ করে। এরপর সিস্টেম সার্চ পরিচালনার জন্য আপনার ঘোষিত অ্যাক্টিভিটি—অর্থাৎ ‘সার্চেবল অ্যাক্টিভিটি’—চালু করে এবং সেটিতে ইন্টেন্টটি ডেলিভার করে। এই ধরনের সহায়ক সার্চের জন্য আপনার অ্যাপ সেট আপ করতে নিম্নলিখিত বিষয়গুলোর প্রয়োজন হবে:

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

এই ডকুমেন্টের বাকি অংশে দেখানো হয়েছে কীভাবে সার্চ কনফিগারেশন ও সার্চযোগ্য অ্যাক্টিভিটি তৈরি করতে হয় এবং কীভাবে সার্চ ডায়ালগ অথবা সার্চ উইজেট ব্যবহার করে একটি সার্চ ইন্টারফেস বাস্তবায়ন করতে হয়।

একটি অনুসন্ধানযোগ্য কনফিগারেশন তৈরি করুন

সর্বপ্রথম আপনার একটি সার্চ কনফিগারেশন নামের XML ফাইল প্রয়োজন। এটি সার্চ ডায়ালগ বা উইজেটের কিছু UI দিক কনফিগার করে এবং সাজেশন ও ভয়েস সার্চের মতো ফিচারগুলো কীভাবে কাজ করবে তা নির্ধারণ করে। এই ফাইলটির প্রচলিত নাম হলো searchable.xml এবং এটি অবশ্যই res/xml/ প্রজেক্ট ডিরেক্টরিতে সেভ করতে হবে।

সার্চ কনফিগারেশন ফাইলে অবশ্যই <searchable> এলিমেন্টটিকে এর রুট নোড হিসেবে অন্তর্ভুক্ত করতে হবে এবং এক বা একাধিক অ্যাট্রিবিউট নির্দিষ্ট করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint" >
</searchable>

` android:label অ্যাট্রিবিউটটি একমাত্র আবশ্যক অ্যাট্রিবিউট। এটি একটি স্ট্রিং রিসোর্সকে নির্দেশ করে, যা অবশ্যই অ্যাপের নাম হতে হবে। কুইক সার্চ বক্সের জন্য সার্চ সাজেশন চালু না করা পর্যন্ত এই লেবেলটি ব্যবহারকারীর কাছে দৃশ্যমান হয় না; এরপর এটি সিস্টেম সেটিংসের সার্চযোগ্য আইটেমের তালিকায় দৃশ্যমান হয়।

যদিও এটি বাধ্যতামূলক নয়, আমরা আপনাকে সর্বদা android:hint অ্যাট্রিবিউটটি অন্তর্ভুক্ত করার পরামর্শ দিই, যা ব্যবহারকারীরা কোনো কোয়েরি প্রবেশ করানোর আগে সার্চ বক্সে একটি ইঙ্গিতমূলক স্ট্রিং প্রদান করে। এই ইঙ্গিতটি গুরুত্বপূর্ণ কারণ এটি ব্যবহারকারীদের কী অনুসন্ধান করা যেতে পারে সে সম্পর্কে গুরুত্বপূর্ণ সূত্র প্রদান করে।

<searchable> এলিমেন্টটি আরও বেশ কিছু অ্যাট্রিবিউট গ্রহণ করে। তবে, সার্চ সাজেশন এবং ভয়েস সার্চের মতো ফিচারগুলো যোগ না করা পর্যন্ত বেশিরভাগ অ্যাট্রিবিউটের প্রয়োজন হয় না। সার্চ কনফিগারেশন ফাইল সম্পর্কে বিস্তারিত তথ্যের জন্য, সার্চ কনফিগারেশন রেফারেন্স ডকুমেন্টটি দেখুন।

একটি অনুসন্ধানযোগ্য কার্যকলাপ তৈরি করুন

সার্চেবল অ্যাক্টিভিটি হলো আপনার অ্যাপের এমন একটি Activity যা একটি কোয়েরি স্ট্রিং-এর উপর ভিত্তি করে অনুসন্ধান করে এবং অনুসন্ধানের ফলাফল প্রদর্শন করে।

যখন ব্যবহারকারী সার্চ ডায়ালগ বা উইজেটে কোনো সার্চ করেন, তখন সিস্টেম আপনার সার্চযোগ্য অ্যাক্টিভিটি চালু করে এবং ACTION_SEARCH অ্যাকশনসহ একটি Intent মাধ্যমে সার্চ কোয়েরিটি সরবরাহ করে। আপনার সার্চযোগ্য অ্যাক্টিভিটি ইন্টেন্টের QUERY এক্সট্রা থেকে কোয়েরিটি গ্রহণ করে, তারপর আপনার ডেটা সার্চ করে এবং ফলাফল উপস্থাপন করে।

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

একটি অনুসন্ধানযোগ্য কার্যকলাপ ঘোষণা করুন

আপনার যদি আগে থেকে একটি অ্যাক্টিভিটি না থাকে, তবে এমন একটি Activity তৈরি করুন যা অনুসন্ধান করে এবং ফলাফল প্রদর্শন করে। এখনই সার্চ ফাংশনালিটি ইমপ্লিমেন্ট করার প্রয়োজন নেই—শুধু এমন একটি অ্যাক্টিভিটি তৈরি করুন যা আপনি ম্যানিফেস্টে ডিক্লেয়ার করতে পারবেন। ম্যানিফেস্টের <activity> এলিমেন্টের ভিতরে, নিম্নলিখিত কাজগুলো করুন:

  1. একটি <intent-filter> এলিমেন্টে ACTION_SEARCH ইন্টেন্ট গ্রহণ করার জন্য অ্যাক্টিভিটিটি ডিক্লেয়ার করুন।
  2. <meta-data> এলিমেন্টে ব্যবহার করার জন্য সার্চ কনফিগারেশন নির্দিষ্ট করুন।

নিম্নলিখিত উদাহরণে এটি দেখানো হয়েছে:

<application ... >
    <activity android:name=".SearchableActivity" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
                   android:resource="@xml/searchable"/>
    </activity>
    ...
</application>

<meta-data> এলিমেন্টে অবশ্যই android:name অ্যাট্রিবিউট থাকতে হবে যার ভ্যালু হবে "android.app.searchable" এবং android:resource অ্যাট্রিবিউট থাকতে হবে যা সার্চেবল কনফিগারেশন ফাইলের একটি রেফারেন্স দেবে। পূর্ববর্তী উদাহরণে, এটি res/xml/searchable.xml ফাইলটিকে নির্দেশ করে।

অনুসন্ধান করুন

ম্যানিফেস্টে আপনার সার্চযোগ্য অ্যাক্টিভিটি ঘোষণা করার পর, সেটির মধ্যে সার্চ করার জন্য এই পদ্ধতি অনুসরণ করুন:

  1. কোয়েরিটি গ্রহণ করুন
  2. আপনার ডেটা অনুসন্ধান করুন
  3. ফলাফলগুলো উপস্থাপন করুন

কোয়েরিটি গ্রহণ করুন

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

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.search)

    // Verify the action and get the query.
    if (Intent.ACTION_SEARCH == intent.action) {
        intent.getStringExtra(SearchManager.QUERY)?.also { query ->
            doMySearch(query)
        }
    }
}

জাভা

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search);

    // Get the intent, verify the action, and get the query.
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      doMySearch(query);
    }
}

ACTION_SEARCH ইন্টেন্টের সাথে QUERY স্ট্রিংটি সর্বদা অন্তর্ভুক্ত থাকে। পূর্ববর্তী উদাহরণে, কোয়েরিটি সংগ্রহ করে একটি স্থানীয় doMySearch() মেথডে পাঠানো হয়, যেখানে প্রকৃত অনুসন্ধান কার্যক্রমটি সম্পন্ন করা হয়।

আপনার ডেটা অনুসন্ধান করুন

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

  • আপনার ডেটা যদি ডিভাইসের কোনো SQLite ডেটাবেসে সংরক্ষিত থাকে, তাহলে LIKE কোয়েরির পরিবর্তে FTS3 ব্যবহার করে ফুল-টেক্সট সার্চ করলে টেক্সট ডেটার মধ্যে আরও শক্তিশালী অনুসন্ধান করা যায় এবং ফলাফলও উল্লেখযোগ্যভাবে দ্রুত পাওয়া যায়। FTS3 সম্পর্কে তথ্যের জন্য sqlite.org এবং অ্যান্ড্রয়েডে SQLite সম্পর্কে তথ্যের জন্য SQLiteDatabase ক্লাসটি দেখুন।
  • আপনার ডেটা যদি অনলাইনে সংরক্ষিত থাকে, তাহলে ব্যবহারকারীর ডেটা সংযোগের কারণে অনুসন্ধানের কার্যকারিতা ব্যাহত হতে পারে। আপনার অনুসন্ধানের ফলাফল না আসা পর্যন্ত আপনি একটি অগ্রগতি সূচক প্রদর্শন করতে পারেন। নেটওয়ার্ক এপিআই (API)-এর তথ্যের জন্য android.net এবং কীভাবে একটি অগ্রগতি সূচক প্রদর্শন করতে হয় সে সম্পর্কে তথ্যের জন্য ProgressBar দেখুন।

ফলাফল উপস্থাপন করুন

আপনার ডেটা যেখানেই থাকুক না কেন এবং আপনি যেভাবে এটি অনুসন্ধান করুন না কেন, আমরা আপনাকে একটি Adapter ব্যবহার করে আপনার অনুসন্ধানযোগ্য অ্যাক্টিভিটিতে অনুসন্ধানের ফলাফল ফেরত পাঠানোর পরামর্শ দিই। এইভাবে, আপনি একটি RecyclerView তে সমস্ত অনুসন্ধানের ফলাফল উপস্থাপন করতে পারবেন। যদি আপনার ডেটা একটি SQLite ডাটাবেস কোয়েরি থেকে আসে, তাহলে আপনি একটি CursorAdapter ব্যবহার করে আপনার ফলাফল একটি RecyclerView তে প্রয়োগ করতে পারেন। যদি আপনার ডেটা অন্য কোনো ফরম্যাটে আসে, তাহলে আপনি BaseAdapter এর একটি এক্সটেনশন তৈরি করতে পারেন।

একটি Adapter একটি সেট থেকে প্রতিটি আইটেমকে একটি View অবজেক্টে বাইন্ড করে। যখন Adapter একটি RecyclerView তে প্রয়োগ করা হয়, তখন ডেটার প্রতিটি অংশ তালিকায় একটি স্বতন্ত্র ভিউ হিসাবে যুক্ত হয়। Adapter শুধুমাত্র একটি ইন্টারফেস, তাই CursorAdapter মতো ইমপ্লিমেন্টেশনের প্রয়োজন হয়—যা একটি Cursor থেকে ডেটা বাইন্ড করার জন্য ব্যবহৃত হয়। যদি বিদ্যমান কোনো ইমপ্লিমেন্টেশন আপনার ডেটার জন্য কাজ না করে, তাহলে আপনি BaseAdapter থেকে আপনার নিজস্ব ইমপ্লিমেন্টেশন তৈরি করতে পারেন।

অনুসন্ধান ডায়ালগ ব্যবহার করুন

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

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

সার্চ ডায়ালগকে সার্চ করার সুযোগ দিতে, সিস্টেমকে নির্দেশ করুন কোন সার্চেবল অ্যাক্টিভিটি সার্চ ডায়ালগ থেকে সার্চ কোয়েরি গ্রহণ করবে। উদাহরণস্বরূপ, একটি সার্চেবল অ্যাক্টিভিটি তৈরি করার পূর্ববর্তী বিভাগে, SearchableActivity নামের একটি সার্চেবল অ্যাক্টিভিটি তৈরি করা হয়েছে। যদি আপনি OtherActivity এর মতো একটি পৃথক অ্যাক্টিভিটি দিয়ে সার্চ ডায়ালগটি দেখাতে এবং SearchableActivity তে সার্চগুলো পৌঁছে দিতে চান, তাহলে ম্যানিফেস্টে ঘোষণা করুন যে OtherActivity এর সার্চ ডায়ালগের জন্য SearchableActivity ই হলো ব্যবহৃত সার্চেবল অ্যাক্টিভিটি।

কোনো অ্যাক্টিভিটির সার্চ ডায়ালগের জন্য সার্চযোগ্য অ্যাক্টিভিটি ঘোষণা করতে, সংশ্লিষ্ট অ্যাক্টিভিটির <activity> এলিমেন্টের ভিতরে একটি <meta-data> এলিমেন্ট যোগ করুন। <meta-data> এলিমেন্টটিতে অবশ্যই android:value অ্যাট্রিবিউট থাকতে হবে, যা সার্চযোগ্য অ্যাক্টিভিটির ক্লাস নেম নির্দিষ্ট করে, এবং android:name অ্যাট্রিবিউটের ভ্যালু হিসেবে "android.app.default_searchable" থাকতে হবে।

উদাহরণস্বরূপ, এখানে একটি অনুসন্ধানযোগ্য অ্যাক্টিভিটি, SearchableActivity , এবং আরেকটি অ্যাক্টিভিটি, OtherActivity , উভয়ের ডিক্লারেশন দেওয়া হলো, যেটি তার সার্চ ডায়ালগ থেকে অনুসন্ধান সম্পাদনের জন্য SearchableActivity ব্যবহার করে:

<application ... >
    <!-- This is the searchable activity; it performs searches. -->
    <activity android:name=".SearchableActivity" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
                   android:resource="@xml/searchable"/>
    </activity>

    <!-- This activity enables the search dialog to initiate searches
         in the SearchableActivity. -->
    <activity android:name=".OtherActivity" ... >
        <!-- Enable the search dialog to send searches to SearchableActivity. -->
        <meta-data android:name="android.app.default_searchable"
                   android:value=".SearchableActivity" />
    </activity>
    ...
</application>

যেহেতু OtherActivity এখন অনুসন্ধানের জন্য কোন অনুসন্ধানযোগ্য অ্যাক্টিভিটি ব্যবহার করা হবে তা ঘোষণা করার জন্য একটি <meta-data> এলিমেন্ট অন্তর্ভুক্ত রয়েছে, তাই অ্যাক্টিভিটিটি সার্চ ডায়ালগটি সক্রিয় করে। যদিও ব্যবহারকারী এই অ্যাক্টিভিটিতে থাকেন, onSearchRequested() মেথডটি সার্চ ডায়ালগটি সক্রিয় করে। যখন ব্যবহারকারী অনুসন্ধানটি সম্পন্ন করেন, তখন সিস্টেম SearchableActivity চালু করে এবং এটিকে ACTION_SEARCH ইন্টেন্টটি প্রেরণ করে।

আপনি যদি চান আপনার অ্যাপের প্রতিটি অ্যাক্টিভিটি সার্চ ডায়ালগ প্রদান করুক, তাহলে প্রতিটি <activity> এর পরিবর্তে <application> এলিমেন্টের চাইল্ড হিসেবে পূর্ববর্তী <meta-data> এলিমেন্টটি যুক্ত করুন। এভাবে, প্রতিটি অ্যাক্টিভিটি ভ্যালুটি ইনহেরিট করবে, সার্চ ডায়ালগ প্রদান করবে এবং সার্চের ফলাফল একই সার্চযোগ্য অ্যাক্টিভিটিতে পৌঁছে দেবে। যদি আপনার একাধিক সার্চযোগ্য অ্যাক্টিভিটি থাকে, তবে আপনি প্রতিটি অ্যাক্টিভিটির ভেতরে ভিন্ন ভিন্ন <meta-data> ডিক্লারেশন বসিয়ে ডিফল্ট সার্চযোগ্য অ্যাক্টিভিটিকে ওভাররাইড করতে পারেন।

আপনার অ্যাক্টিভিটিগুলোর জন্য সার্চ ডায়ালগ এখন সক্রিয় হওয়ায়, আপনার অ্যাপটি সার্চ করার জন্য প্রস্তুত।

অনুসন্ধান ডায়ালগটি চালু করুন

যদিও কিছু ডিভাইসে একটি ডেডিকেটেড সার্চ বাটন থাকে, তবে ডিভাইসভেদে বাটনটির আচরণ ভিন্ন হতে পারে, এবং অনেক ডিভাইসে একেবারেই কোনো সার্চ বাটন থাকে না। তাই সার্চ ডায়ালগ ব্যবহার করার সময়, আপনাকে অবশ্যই আপনার UI-তে একটি সার্চ বাটন রাখতে হবে, যা onSearchRequested() কল করার মাধ্যমে সার্চ ডায়ালগটি সক্রিয় করে।

উদাহরণস্বরূপ, আপনার অপশন মেনু বা UI লেআউটে একটি সার্চ বাটন যোগ করুন যা onSearchRequested() কল করে।

আপনি "টাইপ-টু-সার্চ" কার্যকারিতাও সক্রিয় করতে পারেন, যা ব্যবহারকারী কীবোর্ডে টাইপ করা শুরু করলে সার্চ ডায়ালগটি সক্রিয় করে। কীস্ট্রোকগুলো সার্চ ডায়ালগে প্রবেশ করানো হয়। আপনার অ্যাক্টিভিটির onCreate() মেথডের সময় setDefaultKeyMode —অথবা DEFAULT_KEYS_SEARCH_LOCAL —কল করার মাধ্যমে আপনি আপনার অ্যাক্টিভিটিতে টাইপ-টু-সার্চ সক্রিয় করতে পারেন।

আপনার কার্যকলাপের জীবনচক্রের উপর অনুসন্ধান ডায়ালগের প্রভাব

সার্চ ডায়ালগ হলো একটি Dialog যা স্ক্রিনের উপরে ভাসমান থাকে। এটি অ্যাক্টিভিটি স্ট্যাকে কোনো পরিবর্তন ঘটায় না, তাই যখন সার্চ ডায়ালগটি প্রদর্শিত হয়, তখন onPause() এর মতো কোনো লাইফসাইকেল মেথড কল করা হয় না। আপনার অ্যাক্টিভিটি ইনপুট ফোকাস হারায়, কারণ ইনপুট ফোকাস সার্চ ডায়ালগকে দেওয়া হয়।

সার্চ ডায়ালগ সক্রিয় হলে বিজ্ঞপ্তি পেতে চাইলে, onSearchRequested() মেথডটি ওভাররাইড করুন। যখন সিস্টেম এই মেথডটি কল করে, তখন এটি নির্দেশ করে যে আপনার অ্যাক্টিভিটি সার্চ ডায়ালগ থেকে ইনপুট ফোকাস হারিয়েছে, ফলে আপনি এই ইভেন্টের জন্য উপযুক্ত যেকোনো কাজ করতে পারেন, যেমন একটি গেম পজ করা। যদি না আপনি সার্চ কনটেক্সট ডেটা পাস করেন —যা এই ডকুমেন্টের অন্য একটি অংশে আলোচনা করা হয়েছে— তাহলে সুপারক্লাস ইমপ্লিমেন্টেশন কল করে মেথডটি শেষ করুন:

কোটলিন

override fun onSearchRequested(): Boolean {
    pauseSomeStuff()
    return super.onSearchRequested()
}

জাভা

@Override
public boolean onSearchRequested() {
    pauseSomeStuff();
    return super.onSearchRequested();
}

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

যদি বর্তমান অ্যাক্টিভিটিটি সার্চযোগ্য অ্যাক্টিভিটি না হয়, তাহলে ব্যবহারকারী যখন কোনো সার্চ চালান, তখন সাধারণ অ্যাক্টিভিটি লাইফসাইকেল ইভেন্টগুলো ট্রিগার হয়—বর্তমান অ্যাক্টিভিটিটি onPause() ইভেন্ট পায়, যেমনটি "অ্যাক্টিভিটি পরিচিতি" অংশে বর্ণনা করা হয়েছে। তবে, যদি বর্তমান অ্যাক্টিভিটিটি সার্চযোগ্য অ্যাক্টিভিটি হয়, তাহলে দুটি ঘটনার মধ্যে একটি ঘটে:

  • ডিফল্টরূপে, সার্চেবল অ্যাক্টিভিটিটি onCreate() কল সহ ACTION_SEARCH ইন্টেন্ট গ্রহণ করে এবং অ্যাক্টিভিটিটির একটি নতুন ইনস্ট্যান্স অ্যাক্টিভিটি স্ট্যাকের শীর্ষে চলে আসে। এখন অ্যাক্টিভিটি স্ট্যাকে আপনার সার্চেবল অ্যাক্টিভিটির দুটি ইনস্ট্যান্স থাকে, তাই ব্যাক বাটনে ট্যাপ করলে সার্চেবল অ্যাক্টিভিটি থেকে বেরিয়ে না গিয়ে, আপনাকে এর পূর্ববর্তী ইনস্ট্যান্সে ফিরিয়ে নিয়ে যায়।
  • যদি আপনি android:launchMode "singleTop" হিসেবে সেট করেন, তাহলে সার্চেবল অ্যাক্টিভিটিটি onNewIntent(Intent) কলের মাধ্যমে ACTION_SEARCH ইন্টেন্টটি গ্রহণ করে, যেখানে নতুন ACTION_SEARCH ইন্টেন্টটি পাস করা হয়। উদাহরণস্বরূপ, সার্চেবল অ্যাক্টিভিটির লঞ্চ মোড "singleTop" হলে আপনি এই পরিস্থিতিটি যেভাবে সামলাতে পারেন তা নিচে দেওয়া হলো:

    কোটলিন

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.search)
        handleIntent(intent)
    }
    
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        setIntent(intent)
        handleIntent(intent)
    }
    
    private fun handleIntent(intent: Intent) {
        if (Intent.ACTION_SEARCH == intent.action) {
            intent.getStringExtra(SearchManager.QUERY)?.also { query ->
                doMySearch(query)
            }
        }
    }

    জাভা

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);
        handleIntent(getIntent());
    }
    
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        handleIntent(intent);
    }
    
    private void handleIntent(Intent intent) {
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
          String query = intent.getStringExtra(SearchManager.QUERY);
          doMySearch(query);
        }
    }

    সার্চ করার অংশের উদাহরণ কোডের তুলনায়, সার্চ ইন্টেন্ট হ্যান্ডেল করার সমস্ত কোড এখন handleIntent() মেথডের মধ্যে রাখা হয়েছে, যাতে onCreate() এবং onNewIntent() উভয় মেথডই এটি এক্সিকিউট করতে পারে।

    যখন সিস্টেম onNewIntent(Intent) কল করে, তখন অ্যাক্টিভিটি পুনরায় চালু হয় না, তাই getIntent() মেথডটি সেই একই ইন্টেন্ট রিটার্ন করে যা onCreate() এর মাধ্যমে পাওয়া গিয়েছিল। এই কারণেই onNewIntent(Intent) setIntent(Intent) কল করতে হবে: যাতে ভবিষ্যতে আপনি getIntent() কল করলে অ্যাক্টিভিটি দ্বারা সংরক্ষিত ইন্টেন্টটি আপডেট হয়ে যায়।

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

<activity android:name=".SearchableActivity"
          android:launchMode="singleTop" >
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data
          android:name="android.app.searchable"
          android:resource="@xml/searchable"/>
  </activity>

অনুসন্ধানের প্রাসঙ্গিক তথ্য পাস করুন

কিছু ক্ষেত্রে, প্রতিটি অনুসন্ধানের জন্য আপনি সার্চযোগ্য অ্যাক্টিভিটির ভিতরে সার্চ কোয়েরিতে প্রয়োজনীয় পরিমার্জন করতে পারেন। তবে, ব্যবহারকারী কোন অ্যাক্টিভিটি থেকে অনুসন্ধান করছেন তার উপর ভিত্তি করে যদি আপনি আপনার অনুসন্ধানের মানদণ্ড পরিমার্জন করতে চান, তাহলে সিস্টেম আপনার সার্চযোগ্য অ্যাক্টিভিটিতে যে ইন্টেন্ট পাঠায়, তাতে আপনি অতিরিক্ত ডেটা প্রদান করতে পারেন। আপনি এই অতিরিক্ত ডেটা APP_DATA Bundle পাস করতে পারেন, যা ACTION_SEARCH ইন্টেন্টের অন্তর্ভুক্ত থাকে।

এই ধরনের ডেটা আপনার সার্চযোগ্য অ্যাক্টিভিটিতে পাঠাতে, যে অ্যাক্টিভিটি থেকে ব্যবহারকারী সার্চ করতে পারবেন, সেটির onSearchRequested() মেথডটি ওভাররাইড করুন, অতিরিক্ত ডেটা সহ একটি Bundle তৈরি করুন, এবং সার্চ ডায়ালগটি সক্রিয় করতে startSearch() কল করুন। উদাহরণস্বরূপ:

কোটলিন

override fun onSearchRequested(): Boolean {
    val appData = Bundle().apply {
        putBoolean(JARGON, true)
    }
    startSearch(null, false, appData, false)
    return true
}

জাভা

@Override
public boolean onSearchRequested() {
     Bundle appData = new Bundle();
     appData.putBoolean(SearchableActivity.JARGON, true);
     startSearch(null, false, appData, false);
     return true;
 }

'true' রিটার্ন করার অর্থ হলো, আপনি এই কলব্যাক ইভেন্টটি সফলভাবে হ্যান্ডেল করেছেন এবং সার্চ ডায়ালগটি সক্রিয় করতে startSearch() ফাংশনটি কল করেছেন। ব্যবহারকারী একটি কোয়েরি সাবমিট করার পর, আপনার যোগ করা ডেটাসহ সেটি আপনার সার্চযোগ্য অ্যাক্টিভিটিতে পৌঁছে দেওয়া হয়। সার্চকে আরও পরিমার্জিত করার জন্য আপনি APP_DATA Bundle থেকে অতিরিক্ত ডেটা এক্সট্র্যাক্ট করতে পারেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

val jargon: Boolean = intent.getBundleExtra(SearchManager.APP_DATA)?.getBoolean(JARGON) ?: false

জাভা

Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA);
if (appData != null) {
    boolean jargon = appData.getBoolean(SearchableActivity.JARGON);
}

সার্চ উইজেট ব্যবহার করুন

অ্যাপের টপ বারে সার্চ ভিউ দেখানো একটি ছবি।

চিত্র ১. অ্যাপ বারে অ্যাকশন ভিউ হিসেবে SearchView উইজেট।

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

সার্চ উইজেট কনফিগার করুন

একটি সার্চ কনফিগারেশন এবং একটি সার্চযোগ্য অ্যাক্টিভিটি তৈরি করার পরে, প্রতিটি SearchView জন্য অ্যাসিস্টেড সার্চ সক্রিয় করতে setSearchableInfo() কল করুন এবং আপনার সার্চযোগ্য কনফিগারেশনকে প্রতিনিধিত্বকারী SearchableInfo অবজেক্টটি পাস করুন।

SearchManagergetSearchableInfo() কল করে আপনি SearchableInfo এর একটি রেফারেন্স পেতে পারেন।

উদাহরণস্বরূপ, যদি আপনি অ্যাপ বারে একটি অ্যাকশন ভিউ হিসেবে SearchView ব্যবহার করেন, onCreateOptionsMenu() কলব্যাকের সময় উইজেটটি সক্রিয় করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    // Inflate the options menu from XML.
    val inflater = menuInflater
    inflater.inflate(R.menu.options_menu, menu)

    // Get the SearchView and set the searchable configuration.
    val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
    (menu.findItem(R.id.menu_search).actionView as SearchView).apply {
        // Assumes current activity is the searchable activity.
        setSearchableInfo(searchManager.getSearchableInfo(componentName))
        setIconifiedByDefault(false) // Don't iconify the widget. Expand it by default.
    }

    return true
}

জাভা

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the options menu from XML.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    // Get the SearchView and set the searchable configuration.
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    // Assumes current activity is the searchable activity.
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false); // Don't iconify the widget. Expand it by default.

    return true;
}

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

অ্যাপ বারে অ্যাকশন ভিউ সম্পর্কে আরও তথ্যের জন্য, “অ্যাকশন ভিউ এবং অ্যাকশন প্রোভাইডার ব্যবহার” দেখুন।

অন্যান্য অনুসন্ধান উইজেট বৈশিষ্ট্য

SearchView উইজেটটি আরও কিছু অতিরিক্ত বৈশিষ্ট্য প্রদান করে যা আপনার প্রয়োজন হতে পারে:

একটি জমা বোতাম
ডিফল্টভাবে, সার্চ কোয়েরি সাবমিট করার জন্য কোনো বাটন থাকে না, তাই সার্চ শুরু করার জন্য ব্যবহারকারীকে কিবোর্ডের রিটার্ন কী চাপতে হয়। আপনি setSubmitButtonEnabled(true) কল করে একটি 'সাবমিট' বাটন যোগ করতে পারেন।
অনুসন্ধানের পরামর্শের জন্য কোয়েরি পরিমার্জন
যখন আপনি সার্চ সাজেশন চালু করেন, তখন সাধারণত আশা করা হয় যে ব্যবহারকারীরা একটি সাজেশন বেছে নেবেন, কিন্তু তারা প্রস্তাবিত সার্চ কোয়েরিটি আরও পরিমার্জন করতেও চাইতে পারেন। আপনি setQueryRefinementEnabled(true) কল করে প্রতিটি সাজেশনের পাশে একটি বাটন যোগ করতে পারেন, যা ব্যবহারকারীকে পরিমার্জনের জন্য সাজেশনটি সার্চ বক্সে যুক্ত করে দেবে।
সার্চ বক্সের দৃশ্যমানতা পরিবর্তন করার ক্ষমতা
ডিফল্টরূপে, সার্চ উইজেটটি "আইকনিফাইড" থাকে, যার অর্থ হলো এটি শুধুমাত্র একটি সার্চ আইকন—একটি ম্যাগনিফাইং গ্লাস—দ্বারা উপস্থাপিত হয়। ব্যবহারকারী আইকনটিতে ট্যাপ করলে এটি প্রসারিত হয়ে সার্চ বক্সটি দেখায়। পূর্ববর্তী উদাহরণে যেমন দেখানো হয়েছে, আপনি setIconifiedByDefault(false) কল করে ডিফল্টরূপে সার্চ বক্সটি দেখাতে পারেন। এছাড়াও আপনি setIconified() কল করে সার্চ উইজেটের চেহারা পরিবর্তন (টগল) করতে পারেন।

SearchView ক্লাসে আরও বেশ কিছু API আছে যা দিয়ে আপনি সার্চ উইজেটটি কাস্টমাইজ করতে পারেন। তবে, এগুলোর বেশিরভাগই কেবল তখনই ব্যবহৃত হয় যখন আপনি সার্চ কোয়েরি পাঠানো ও সার্চ সাজেশন দেখানোর জন্য অ্যান্ড্রয়েড সিস্টেম ব্যবহার না করে, ব্যবহারকারীর সমস্ত ইনপুট নিজেই সামলান।

উইজেট এবং ডায়ালগ উভয়ই ব্যবহার করুন

যদি আপনি সার্চ উইজেটটিকে অ্যাপ বারে একটি অ্যাকশন ভিউ হিসেবে যুক্ত করেন এবং android:showAsAction="ifRoom" সেট করে এটিকে অ্যাপ বারে জায়গা থাকলে প্রদর্শিত হওয়ার জন্য সক্ষম করেন, তাহলে সার্চ উইজেটটি অ্যাকশন ভিউ হিসেবে নাও প্রদর্শিত হতে পারে। এর পরিবর্তে, ওভারফ্লো মেনুতে একটি মেনু আইটেম প্রদর্শিত হতে পারে। উদাহরণস্বরূপ, যখন আপনার অ্যাপটি একটি ছোট স্ক্রিনে চলে, তখন অন্যান্য অ্যাকশন আইটেম বা নেভিগেশন এলিমেন্টের সাথে সার্চ উইজেটটি দেখানোর জন্য অ্যাপ বারে যথেষ্ট জায়গা নাও থাকতে পারে, তাই মেনু আইটেমটি পরিবর্তে ওভারফ্লো মেনুতে প্রদর্শিত হয়। ওভারফ্লো মেনুতে রাখলে, আইটেমটি একটি সাধারণ মেনু আইটেমের মতো কাজ করে এবং অ্যাকশন ভিউ—অর্থাৎ, সার্চ উইজেটটি—প্রদর্শন করে না।

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

অ্যাপ বারের আইটেমগুলো কীভাবে কাজ করে এবং এই পরিস্থিতি কীভাবে সামাল দিতে হয়, সে সম্পর্কে আরও তথ্যের জন্য, ‘অ্যাপ বার যোগ করুন’ দেখুন।

ভয়েস সার্চ যোগ করুন

আপনার সার্চেবল কনফিগারেশনে android:voiceSearchMode অ্যাট্রিবিউটটি যোগ করে আপনি আপনার সার্চ ডায়ালগ বা উইজেটে ভয়েস সার্চের সুবিধা যোগ করতে পারেন। এটি একটি ভয়েস সার্চ বাটন যুক্ত করে যা একটি ভয়েস প্রম্পট চালু করে। ব্যবহারকারী কথা বলা শেষ করলে, অনুলিখিত সার্চ কোয়েরিটি আপনার সার্চেবল অ্যাক্টিভিটিতে পাঠানো হয়।

নিম্নলিখিত উদাহরণে এটি দেখানো হয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/search_label"
    android:hint="@string/search_hint"
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" >
</searchable>

ভয়েস সার্চ চালু করার জন্য showVoiceSearchButton ভ্যালুটি আবশ্যক। দ্বিতীয় ভ্যালু, launchRecognizer , নির্দিষ্ট করে যে ভয়েস সার্চ বাটনটিকে অবশ্যই একটি রিকগনাইজার চালু করতে হবে, যা ট্রান্সক্রাইব করা টেক্সটটিকে সার্চযোগ্য অ্যাক্টিভিটিতে ফেরত পাঠাবে।

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

অনুসন্ধানের পরামর্শ যোগ করুন

অ্যান্ড্রয়েড সিস্টেমের সহায়তায়, সার্চ ডায়ালগ এবং সার্চ উইজেট উভয়ই ব্যবহারকারীর টাইপ করার সাথে সাথে সার্চ সাজেশন প্রদান করতে পারে। সিস্টেমটি সাজেশনের তালিকাটি পরিচালনা করে এবং ব্যবহারকারী কোনো সাজেশন নির্বাচন করলে সেই ইভেন্টটি নিয়ন্ত্রণ করে।

আপনি দুই ধরনের অনুসন্ধানের পরামর্শ দিতে পারেন:

সাম্প্রতিক অনুসন্ধানের পরামর্শ
এই সাজেশনগুলো হলো সেইসব শব্দ যা ব্যবহারকারী পূর্বে আপনার অ্যাপে সার্চ কোয়েরি হিসেবে ব্যবহার করেছেন। আরও তথ্যের জন্য ‘কাস্টম সার্চ সাজেশন যোগ করুন’ দেখুন।
কাস্টম অনুসন্ধানের পরামর্শ
এগুলো হলো আপনার নিজস্ব ডেটা উৎস থেকে দেওয়া সার্চ সাজেশন, যা ব্যবহারকারীদের তাদের অনুসন্ধান করা সঠিক বানান বা আইটেমটি তাৎক্ষণিকভাবে বেছে নিতে সাহায্য করে। আরও তথ্যের জন্য ‘কাস্টম সার্চ সাজেশন যোগ করুন’ দেখুন।