खोज से जुड़े कस्टम सुझाव जोड़ें

Android के खोज डायलॉग या खोज विजेट का इस्तेमाल करते समय, पसंद के मुताबिक खोज के ऐसे सुझाव जो आपके ऐप्लिकेशन के डेटा से मिलते हैं. उदाहरण के लिए, अगर आपका ऐप्लिकेशन एक डिक्शनरी है, तो आप शब्दकोश से ऐसे शब्दों का सुझाव दे सकते हैं जो उपयोगकर्ता के डालने से पहले, खोज फ़ील्ड में डाले गए टेक्स्ट का मिलान करना उनकी क्वेरी का जवाब देंगे. ये सुझाव इसलिए अहम हैं, क्योंकि इनसे असरदार तरीके से अनुमान लगाया जा सकता है उपयोगकर्ता क्या चाहता है और उसका तुरंत ऐक्सेस उपलब्ध कराता है. पहली इमेज में एक उदाहरण दिखाया गया है कस्टम सुझावों वाले खोज डायलॉग बॉक्स की इमेज.

पसंद के मुताबिक सुझाव देने के बाद, उन्हें सिस्टम-व्यापी शीघ्र खोज बॉक्स, जो आपके है.

इससे पहले कि आप कस्टम सुझाव जोड़ें, Android खोज डायलॉग लागू करें या खोजने के लिए विजेट भी होता है. बनाएं सर्च इंटरफ़ेस और कॉन्टेंट सेवा देने वाली कंपनियां.

बुनियादी बातें

पहला डायग्राम. इसके साथ किए गए खोज डायलॉग का स्क्रीनशॉट कस्टम खोज सुझाव.

जब उपयोगकर्ता अपनी पसंद के मुताबिक कोई सुझाव चुनता है, तो सिस्टम Intent को आपके खोजने की सुविधा मिलती है. किसी ऐसी सामान्य खोज क्वेरी के उलट जो ACTION_SEARCH अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है कार्रवाई नहीं करते हैं, तो आप इसके बजाय इस्तेमाल करने के लिए अपने कस्टम सुझाव तय कर सकते हैं ACTION_VIEW—या अन्य सभी कार्रवाइयों के साथ-साथ वह डेटा भी शामिल करें जो चुना गया सुझाव. डिक्शनरी के उदाहरण में, जब उपयोगकर्ता किसी सुझाव के तौर पर, ऐप्लिकेशन तुरंत उस शब्द की परिभाषा खोल सकता है. शब्दकोश में खोजना होगा.

पसंद के मुताबिक सुझाव देने के लिए, यह तरीका अपनाएं:

  • खोजने लायक बुनियादी गतिविधि लागू करें. इसके बारे में यहां बताया गया है कोई सर्च इंटरफ़ेस बनाएं.
  • खोजे जा सकने वाले कॉन्फ़िगरेशन में, कॉन्टेंट के बारे में जानकारी शामिल करें की सेवा देने वाली कंपनी के नाम का इस्तेमाल करें.
  • एक टेबल बनाएं, जैसे कि SQLiteDatabase, और टेबल को ज़रूरी कॉलम के साथ फ़ॉर्मैट करें.
  • कोई कॉन्टेंट बनाएं सेवा देने वाली कंपनी जिसके पास आपके सुझावों की टेबल का ऐक्सेस है और प्रोवाइडर का इस्तेमाल करें.
  • बताएं कि जब उपयोगकर्ता कोई विकल्प चुनता है, तो उसे किस तरह का Intent भेजा जाना है सुझाव, जिसमें कस्टम कार्रवाई और कस्टम डेटा शामिल है.

जैसे Android सिस्टम खोज डायलॉग दिखाता है, उसी तरह यह खोज से जुड़े सुझाव. आपको कॉन्टेंट देने वाले की ज़रूरत होगी, जिससे सिस्टम यह काम कर सके अपने सुझावों को फिर से पाएं. मैसेज पढ़ा गया कॉन्टेंट देने वाले लोग या कंपनियां पढ़ें.

जब सिस्टम को यह पता चलता है कि आपकी गतिविधि को खोजा जा सकता है और खोज सुझाव दिखाई देते हैं, तो निम्न प्रक्रिया तब लागू होती है जब उपयोगकर्ता किसी क्वेरी:

  1. सिस्टम खोज क्वेरी का टेक्स्ट लेता है—मतलब, जो भी डाला गया हो अभी तक—यह आपके कॉन्टेंट देने वाले को ऐसी क्वेरी भेजता है जो सुझाव.
  2. आपका कॉन्टेंट देने वाला, Cursor अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है जो खोज क्वेरी के हिसाब से काम के सभी सुझावों को दिखाता है टेक्स्ट.
  3. सिस्टम, Cursor.

पसंद के मुताबिक सुझाव दिखाए जाने पर, ये चीज़ें हो सकती हैं:

  • अगर उपयोगकर्ता कोई दूसरा अक्षर डालता है या क्वेरी में किसी भी तरह से बदलाव करता है, तो पिछले चरण दोहराए जाते हैं और उसी हिसाब से सुझाव सूची अपडेट हो जाती है.
  • अगर उपयोगकर्ता खोज करता है, तो सुझावों को अनदेखा कर दिया जाता है और खोज की सुविधा को आपकी खोज गतिविधि पर डिलीवर किया जाता है. इसके लिए, ACTION_SEARCH इंटेंट.
  • अगर उपयोगकर्ता किसी सुझाव को चुनता है, तो एक इंटेंट आपके खोजे जा सकने वाले पेज पर भेजा जाता है जिसमें कस्टम ऐक्शन और कस्टम डेटा शामिल होना चाहिए, ताकि आपका ऐप्लिकेशन खोला जा सके उसे ध्यान में रखते हुए कॉन्टेंट बनाया जाता है.

खोजने लायक कॉन्फ़िगरेशन में बदलाव करें

अगर आपको पसंद के मुताबिक सुझाव पाने की सुविधा जोड़नी है, तो android:searchSuggestAuthority एट्रिब्यूट की वैल्यू के तौर पर आपकी खोजी जा सकने वाली कॉन्फ़िगरेशन फ़ाइल में <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"
    android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider">
</searchable>

आपको अन्य एट्रिब्यूट की ज़रूरत पड़ सकती है. यह इस पर निर्भर करता है कि आपके पास किस तरह का इंटेंट है हर सुझाव के साथ अटैच करें और यह भी बताएं कि अपने कॉन्टेंट के हिसाब से क्वेरी को कैसे फ़ॉर्मैट किया जाए कंपनी. अन्य वैकल्पिक एट्रिब्यूट के बारे में यहां बताया गया है सेक्शन.

कॉन्टेंट देने वाला ऐप्लिकेशन बनाएं

अगर आप अपनी पसंद के मुताबिक सुझाव पाने के लिए कॉन्टेंट उपलब्ध कराना चाहते हैं, तो सबसे पहले देखें कॉन्टेंट देने वाले लोग या कंपनियां पढ़ें. कस्टम के लिए सामग्री देने वाला के सुझाव, कॉन्टेंट देने वाले किसी दूसरे प्लैटफ़ॉर्म के जैसे हैं. हालांकि, प्रत्येक आप सुझाव दें, Cursor में संबंधित पंक्ति को इसमें ऐसे कॉलम शामिल किए जा सकते हैं जिन्हें सिस्टम समझता है और फ़ॉर्मैट करने के लिए इस्तेमाल करता है सुझाव.

जब उपयोगकर्ता खोज डायलॉग या खोज विजेट में टेक्स्ट डालता है, तब सिस्टम सुझाव पाने के लिए, कॉन्टेंट देने वाले से जुड़ी क्वेरी के लिए कॉल करें query() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है डालें. query() को लागू करने पर, तो सामग्री उपलब्ध कराने वाले को आपके सुझाव डेटा को खोजना होगा और Cursor कोड, जो उन पंक्तियों पर ले जाता है जिनके बारे में इसे 'अच्छा' के तौर पर मार्क किया जाता है सुझाव.

कस्टम सुझावों के लिए सामग्री देने वाला बनाने के बारे में विवरण हैं यहां दिए गए दो सेक्शन में चर्चा की गई है:

सुझाव क्वेरी को मैनेज करना
सिस्टम, कॉन्टेंट देने वाले को अनुरोध कैसे भेजता है और उन्हें कैसे मैनेज करता है उन्हें.
सुझाव देने वाली टेबल बनाएं
ऐसे कॉलम कैसे तय करें जिन्हें सिस्टम, हर क्वेरी के साथ Cursor नतीजे मिलते हैं.

सुझाव क्वेरी को मैनेज करना

जब सिस्टम, कॉन्टेंट देने वाले से सुझावों का अनुरोध करता है, तो कॉन्टेंट देने वाले के query() तरीके से. यह तरीका लागू करें अपने सुझाव डेटा को खोजें औरCursor ऐसे सुझाव जो आपके काम के हैं.

यहां उन पैरामीटर की खास जानकारी दी गई है जिन्हें सिस्टम आपके पास query() तरीका, इस क्रम में दिया गया है:

  1. uri

    हमेशा एक कॉन्टेंट Uri, इस फ़ॉर्मैट में है अनुसरण करता है:

    content://your.authority/optional.suggest.path/SUGGEST_URI_PATH_QUERY
    

    डिफ़ॉल्ट तौर पर, सिस्टम इस यूआरआई को पास करता है और क्वेरी जोड़ता है इसे टेक्स्ट करें:

    content://your.authority/optional.suggest.path/SUGGEST_URI_PATH_QUERY/puppies
    

    अंत में दिया गया क्वेरी टेक्स्ट यूआरआई एन्कोडिंग नियमों का इस्तेमाल करके एन्कोड किया जाता है, इसलिए आप शायद करने से पहले उसे डिकोड करना होगा.

    optional.suggest.path वाला हिस्सा सिर्फ़ इसमें शामिल है यूआरआई का इस्तेमाल तब करें, जब आप इसके साथ अपनी खोजने लायक कॉन्फ़िगरेशन फ़ाइल में ऐसा पाथ सेट करें android:searchSuggestPath एट्रिब्यूट के लिए सबमिट किया गया है. यह सिर्फ़ तब ज़रूरी होता है, जब जब आप कई गतिविधियों में खोज करने के लिए, एक ही कॉन्टेंट प्रोवाइडर का इस्तेमाल करते हों. अगर आपने ऐसी स्थिति में, सुझाव क्वेरी के सोर्स को साफ़ तौर पर बताएं.

  2. projection
    हमेशा खाली.
  3. selection
    android:searchSuggestSelection में दी गई वैल्यू विशेषता का इस्तेमाल करें, या अगर आप जीतते-होते android:searchSuggestSelection एट्रिब्यूट का एलान करें. कॉन्टेंट बनाने अगले सेक्शन में इसके बारे में विस्तार से बताया गया है.
  4. selectionArgs
    इसमें खोज क्वेरी, अरे के पहले और सिर्फ़ एक एलिमेंट के तौर पर शामिल होती है. ऐसा तब होता है, जब आप android:searchSuggestSelection एट्रिब्यूट का एलान करते हैं खोजने-योग्य कॉन्फ़िगरेशन. अगर आपने एलान नहीं किया है, तो android:searchSuggestSelection है, तो यह पैरामीटर शून्य होता है. इस सेक्शन में, इस बारे में ज़्यादा जानकारी दी गई है.
  5. sortOrder
    हमेशा खाली.

सिस्टम आपको खोज क्वेरी का टेक्स्ट दो तरीकों से भेज सकता है. डिफ़ॉल्ट तरीका यह है इसमें पास किए गए कॉन्टेंट यूआरआई के आखिरी पाथ के तौर पर क्वेरी टेक्स्ट को शामिल किया जाएगा uri पैरामीटर. हालांकि, अगर आप आपके खोजे जा सकने वाले कॉन्फ़िगरेशन की android:searchSuggestSelection विशेषता शामिल है, तो क्वेरी टेक्स्ट इसके बजाय selectionArgs स्ट्रिंग अरे. इन दो विकल्पों के बारे में बताया गया है अगला.

Uri में क्वेरी पाना

डिफ़ॉल्ट रूप से, क्वेरी को uri के आखिरी सेगमेंट के तौर पर जोड़ा जाता है पैरामीटर—एक Uri ऑब्जेक्ट. इसमें क्वेरी टेक्स्ट को फिर से पाने के लिए केस, इस्तेमाल getLastPathSegment(), जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

Kotlin

val query: String = uri.lastPathSegment.toLowerCase()

Java

String query = uri.getLastPathSegment().toLowerCase();

यह Uri का आखिरी सेगमेंट दिखाता है, जो कि क्वेरी है उपयोगकर्ता जो टेक्स्ट डालता है.

चुने गए आर्ग्युमेंट में क्वेरी पाएं

यूआरआई का इस्तेमाल करने के बजाय, यह आपके लिए ज़्यादा काम का हो सकता है यह करने के लिए ज़रूरी सभी चीज़ें पाने का query() तरीका देख लिया है और हो सकता है कि आप selection और selectionArgs पैरामीटर में सही वैल्यू शामिल करें. इसमें केस, अपनेandroid:searchSuggestSelection आपकी SQLite सेलेक्शन स्ट्रिंग के साथ खोजा जा सकने वाला कॉन्फ़िगरेशन. चुनाव में स्ट्रिंग में, असल वैल्यू के लिए प्लेसहोल्डर के तौर पर सवाल का निशान (?) शामिल करें खोज क्वेरी. सिस्टम query() को इस रूप में चुनी गई स्ट्रिंग के साथ कॉल करता है पहले एलिमेंट के तौर पर, selection पैरामीटर और खोज क्वेरी selectionArgs कलेक्शन में.

उदाहरण के लिए, यहां पूरा टेक्स्ट बनाने के लिए android:searchSuggestSelection एट्रिब्यूट खोज स्टेटमेंट:

<?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"
    android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestSelection="word MATCH ?">
</searchable>

इस कॉन्फ़िगरेशन के साथ, आपका query() तरीका "word MATCH ?" के तौर पर selection पैरामीटर और खोज क्वेरी के तौर पर selectionArgs पैरामीटर. जब आप इन पासवर्ड को SQLite query() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है विधि के रूप में, उनके तर्क के आधार पर, उन्हें एक साथ हो जाए—मतलब, सवाल के निशान को क्वेरी के टेक्स्ट से बदल दिया जाता है. अगर आपने इस तरह आपको सुझाव क्वेरी मिलेंगी और आपको क्वेरी में वाइल्डकार्ड जोड़ने होंगे selectionArgs पैरामीटर में टेक्स्ट जोड़ें, जोड़ें या प्रीफ़िक्स करें, क्योंकि इस वैल्यू को कोटेशन में रखा जाता है और सवाल के निशान की जगह डाला जाता है.

ऊपर दिए गए उदाहरण में एक और एट्रिब्यूट है android:searchSuggestIntentAction, जो इंटेंट कार्रवाई के बारे में बताता है जब उपयोगकर्ता कोई सुझाव चुनता है, तो हर इंटेंट के साथ भेजा जाता है. इस पर चर्चा की गई इसके बाद, एक इंटेंट का एलान करें सुझाव सेक्शन में जाकर भी बताया जा सकता है.

सुझाव वाली टेबल बनाएं

जब Cursor की मदद से, सिस्टम को सुझाव दिए जाते हैं, तो सिस्टम के लिए हर पंक्ति में खास कॉलम होने चाहिए. भले ही, आप डिवाइस पर SQLite डेटाबेस में, आपके सुझाव का डेटा, वेब पर मौजूद एक डेटाबेस सर्वर या डिवाइस या वेब पर किसी दूसरे फ़ॉर्मैट में, सुझावों को पंक्तियों के तौर पर फ़ॉर्मैट करें और उन्हें Cursor के साथ प्रज़ेंट करें.

सिस्टम कई कॉलम को समझता है, लेकिन उनमें से सिर्फ़ दो की ही ज़रूरत है:

_ID
हर सुझाव के लिए एक यूनीक पूर्णांक लाइन आईडी. सिस्टम को ज़रूरी है कि इसमें सुझाव प्रस्तुत करें ListView.
SUGGEST_COLUMN_TEXT_1
सुझाव के तौर पर दिखाई गई स्ट्रिंग.

नीचे दिए गए कॉलम में जानकारी देना ज़रूरी नहीं है. इनमें से ज़्यादातर की चर्चा यहां दी गई है: सेक्शन पढ़ें.

SUGGEST_COLUMN_TEXT_2
कोई स्ट्रिंग. अगर आपके Cursor में यह कॉलम शामिल है, तो सुझाव दो-पंक्ति वाले फ़ॉर्मैट में दिए जाते हैं. इस कॉलम में दी गई स्ट्रिंग है इसे मुख्य सुझाव के नीचे, दूसरी छोटी लाइन के तौर पर दिखाया जाता है टेक्स्ट. कोई सेकंडरी टेक्स्ट न होने के बारे में बताने के लिए, यह खाली या खाली हो सकता है.
SUGGEST_COLUMN_ICON_1
ड्रॉ करने लायक संसाधन, कॉन्टेंट या फ़ाइल की यूआरआई स्ट्रिंग. अगर आपके Cursor में यह कॉलम शामिल होता है और फिर सभी सुझाव दिए जाते हैं आइकॉन-प्लस-टेक्स्ट फ़ॉर्मैट में होना चाहिए, जिसमें बाईं ओर ड्रॉ करने लायक आइकॉन दिख रहा हो. यह शून्य या शून्य हो सकता है. इससे पता चलता है कि इस पंक्ति में कोई आइकॉन नहीं है.
SUGGEST_COLUMN_ICON_2
ड्रॉ करने लायक संसाधन, कॉन्टेंट या फ़ाइल की यूआरआई स्ट्रिंग. अगर आपके Cursor में यह कॉलम शामिल होता है और फिर सभी सुझाव दिए जाते हैं दाईं ओर आइकन के साथ आइकन-प्लस-टेक्स्ट प्रारूप में. यह काम किया जा सकता है इस पंक्ति में कोई आइकॉन नहीं दिखाने के लिए शून्य या शून्य.
SUGGEST_COLUMN_INTENT_ACTION
इंटेंट कार्रवाई स्ट्रिंग. यदि यह कॉलम मौजूद है और पंक्ति दी गई है, तो यहां परिभाषित कार्रवाई का उपयोग सुझाव बनाते समय किया जाता है इंटेंट. अगर एलिमेंट नहीं दिया गया है, तो कार्रवाई खोजे जा सकने वाले सेक्शन में android:searchSuggestIntentAction फ़ील्ड मौजूद है कॉन्फ़िगरेशन. अगर सभी सुझावों के लिए आपकी कार्रवाई एक जैसी है, तो ज़्यादा इसका इस्तेमाल करके कार्रवाई तय करें android:searchSuggestIntentAction पर जाएं और इस कॉलम को छोड़ दें.
SUGGEST_COLUMN_INTENT_DATA
डेटा यूआरआई स्ट्रिंग. अगर यह कॉलम मौजूद है और दिए गए कॉलम में कोई वैल्यू है लाइन में, इस डेटा का इस्तेमाल सुझाव के इंटेंट को बनाते समय किया जाता है. अगर एलिमेंट प्रदान नहीं किया गया है, तो डेटा खोजे जा सकने वाले सेक्शन में android:searchSuggestIntentData फ़ील्ड मौजूद है कॉन्फ़िगरेशन. अगर कोई भी सोर्स नहीं दिया गया है, तो इंटेंट का डेटा फ़ील्ड शून्य. अगर सभी सुझावों के लिए आपका डेटा एक जैसा है या उसके बारे में जानकारी दी जा सकती है कॉन्स्टेंट पार्ट और खास आईडी का इस्तेमाल करके, इसे तय करना ज़्यादा बेहतर होता है android:searchSuggestIntentData का इस्तेमाल करके इसे छोड़ दें कॉलम.
SUGGEST_COLUMN_INTENT_DATA_ID
यूआरआई पाथ स्ट्रिंग. अगर यह कॉलम मौजूद है और दिए गए कॉलम में कोई वैल्यू है पंक्ति, फिर "/" और यह वैल्यू इंटेंट के डेटा फ़ील्ड में जोड़ दी जाती है. इसका इस्तेमाल सिर्फ़ तब करें, जब खोजे जा सकने वाले एट्रिब्यूट की सूची में android:searchSuggestIntentData एट्रिब्यूट कॉन्फ़िगरेशन पहले से ही किसी उचित बेस स्ट्रिंग पर सेट है.
SUGGEST_COLUMN_INTENT_EXTRA_DATA
आर्बिट्ररी डेटा. अगर यह कॉलम मौजूद है और दी गई पंक्ति में कोई वैल्यू है, तो यह सुझाव के इंटेंट को बनाते समय, अतिरिक्त डेटा इस्तेमाल किया जाता है. अगर यह पैरामीटर उपलब्ध नहीं कराया जाता है, तो इंटेंट का अतिरिक्त डेटा फ़ील्ड शून्य होता है. इस कॉलम की मदद से सुझावों में अतिरिक्त डेटा दिया जाता है, जिसे इंटेंट का EXTRA_DATA_KEY अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है बटन दबाएं.
SUGGEST_COLUMN_QUERY
अगर यह कॉलम मौजूद है और यह एलिमेंट दी गई पंक्ति में मौजूद है, तो इसका मतलब है कि सुझाव की क्वेरी बनाते समय उपयोग किया जाने वाला डेटा, जिसे अतिरिक्त QUERY बटन दबाएं. अगर सुझाव के लिए कार्रवाई ACTION_SEARCH के तौर पर की गई है, तो यह ज़रूरी है. लेकिन यह ज़रूरी नहीं है.
SUGGEST_COLUMN_SHORTCUT_ID
सिर्फ़ क्विक सर्च बॉक्स के लिए सुझाव देते समय इस्तेमाल किया जाता है. यह कॉलम यह बताता है कि खोज सुझाव को शॉर्टकट के तौर पर सेव किया जाना चाहिए या नहीं और कि उसकी पुष्टि की जानी चाहिए या नहीं. शॉर्टकट आम तौर पर तब बनते हैं, जब उपयोगकर्ता क्विक सर्च बॉक्स से किसी सुझाव पर टैप करता है. अगर यह जानकारी उपलब्ध नहीं है, तो नतीजे को इस तरह सेव किया जाता है और कभी रीफ़्रेश न किया जाए. अगर इस पर सेट किया गया हो SUGGEST_NEVER_MAKE_SHORTCUT, परिणाम को शॉर्टकट के रूप में सेव नहीं किया जाता. अगर ऐसा नहीं है, तो शॉर्टकट आईडी का इस्तेमाल इन कामों के लिए किया जाता है तो अप-टू-डेट सुझाव के लिए फिर से देखें SUGGEST_URI_PATH_SHORTCUT.
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
सिर्फ़ क्विक सर्च बॉक्स के लिए सुझाव देते समय इस्तेमाल किया जाता है. यह कॉलम यह बताता है कि स्पिनर को, इसके आइकॉन के बजाय दिखाया जाना चाहिए SUGGEST_COLUMN_ICON_2 जबकि इस सुझाव का शॉर्टकट यह है और शीघ्र खोज बॉक्स में रीफ़्रेश करें.

इनमें से ज़्यादातर कॉलम के बारे में नीचे दिए गए सेक्शन में बताया गया है.

सुझावों के लिए इंटेंट का एलान करें

जब उपयोगकर्ता खोज डायलॉग या विजेट, सिस्टम एक कस्टम Intent खोजने की सुविधा मिलती है. आपको इंटेंट के लिए कार्रवाई और डेटा तय करना होगा.

इंटेंट कार्रवाई का एलान करें

किसी कस्टम सुझाव के लिए सबसे सामान्य इंटेंट कार्रवाई यह है ACTION_VIEW, जो तब सही होता है, जब आपको कुछ खोलना हो, जैसे, किसी शब्द की परिभाषा, किसी व्यक्ति की संपर्क जानकारी या वेब पेज. हालांकि, इंटेंट कार्रवाई कोई दूसरी कार्रवाई हो सकती है और हर कार्रवाई के लिए अलग हो सकती है सुझाव.

इस आधार पर कि क्या आप सभी सुझावों को एक ही इंटेंट कार्रवाई का इस्तेमाल करना चाहते हैं, तो आप कार्रवाई को दो तरह से परिभाषित कर सकते हैं:

  • अपनेandroid:searchSuggestIntentAction सभी सुझावों के लिए कार्रवाई परिभाषित करने के लिए कॉन्फ़िगरेशन फ़ाइल खोजी जा सकती है, जैसे नीचे दिए गए उदाहरण में दिखाया गया है:
    <?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"
        android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
        android:searchSuggestIntentAction="android.intent.action.VIEW" >
    </searchable>
    
  • SUGGEST_COLUMN_INTENT_ACTION कॉलम का इस्तेमाल करके अलग-अलग सुझावों के लिए कार्रवाई. ऐसा करने के लिए, SUGGEST_COLUMN_INTENT_ACTION कॉलम को आपकी सुझावों की टेबल में जोड़ा गया और, हर सुझाव के लिए, उसमें इस्तेमाल करने की कार्रवाई रखें—जैसे "android.intent.action.VIEW".

आप इन दोनों तकनीकों को भी मिला सकते हैं. उदाहरण के लिए, आपके पास android:searchSuggestIntentAction एट्रिब्यूट, जिसमें कार्रवाई होनी चाहिए डिफ़ॉल्ट रूप से सभी सुझावों के साथ उपयोग किया जाता है, तो कुछ की सूचना देने के लिए, SUGGEST_COLUMN_INTENT_ACTION कॉलम. अगर आप कोई मान शामिल नहीं करते हैं SUGGEST_COLUMN_INTENT_ACTION कॉलम में, इसके बाद इंटेंट android:searchSuggestIntentAction एट्रिब्यूट में दी गई है इस्तेमाल किया गया.

इंटेंट डेटा का एलान करें

जब उपयोगकर्ता किसी सुझाव को चुनता है, तो आपकी खोजी जा सकने वाली गतिविधि को इंटेंट—जैसा कि पिछली चर्चा में बताया गया है सेक्शन में रखें—लेकिन इंटेंट में भी ऐसा डेटा होना चाहिए जिससे आपकी गतिविधि किस सुझाव को चुना गया. खास तौर पर, डेटा कुछ अलग होना चाहिए हर सुझाव के लिए, जैसे कि SQLite टेबल में दिए गए सुझाव का लाइन आईडी. इंटेंट मिलने पर, अटैच किए गए डेटा को इसकी मदद से वापस लाया जा सकता है getData() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है या getDataString().

इंटेंट में शामिल किए गए डेटा को दो तरीकों से तय किया जा सकता है:

  • इसके अंदर हर सुझाव के लिए डेटा तय करें आपकी सुझावों की टेबल का SUGGEST_COLUMN_INTENT_DATA कॉलम.

    सुझावों में हर इंटेंट के लिए, डेटा से जुड़ी सभी ज़रूरी जानकारी दें टेबल में, SUGGEST_COLUMN_INTENT_DATA कॉलम और इसके बाद, उसे हर लाइन के लिए यूनीक डेटा से भरें. इस कॉलम में मौजूद डेटा इंटेंट से ठीक वैसे ही जुड़ा हुआ है जैसा आपने इस कॉलम में इसे बताया है. आप फिर getData() की मदद से उसे वापस पाएं या getDataString().

  • डेटा यूआरआई को दो हिस्सों में बांटें: वह हिस्सा जो सभी सुझावों के लिए एक जैसा होता है और वह हिस्सा हर सुझाव के लिए खास होगा. इन हिस्सों को ऐसा android:searchSuggestintentData एट्रिब्यूट जिसे खोजा जा सकता है कॉन्फ़िगरेशन और इसका SUGGEST_COLUMN_INTENT_DATA_ID कॉलम आपकी सुझाव टेबल भी दिखाता है.

    नीचे दिए गए उदाहरण में बताया गया है कि यूआरआई के उस हिस्से का कैसे एलान किया जाता है जो सभी सुझावों के लिए खोजे जा सकने वाले एट्रिब्यूट का android:searchSuggestIntentData एट्रिब्यूट कॉन्फ़िगरेशन:

      <?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"
          android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
          android:searchSuggestIntentAction="android.intent.action.VIEW"
          android:searchSuggestIntentData="content://com.example/datatable" >
      </searchable>
      

    हर सुझाव के लिए फ़ाइनल पाथ—जिसमें उसका खास हिस्सा शामिल है, शामिल करें आपके सुझावों के SUGGEST_COLUMN_INTENT_DATA_ID कॉलम में टेबल. जब उपयोगकर्ता किसी सुझाव को चुनता है, तो सिस्टम android:searchSuggestIntentData, एक स्लैश (/) जोड़ता है, और फिर SUGGEST_COLUMN_INTENT_DATA_ID कॉलम में पूरा कॉन्टेंट बनाएं यूआरआई. इसके बाद, Uri को इससे वापस लाया जा सकता है getData().

ज़्यादा डेटा जोड़ना

अगर आपको अपने इंटेंट के साथ ज़्यादा जानकारी देनी है, तो एक और जानकारी जोड़ें टेबल कॉलम में, जैसे कि SUGGEST_COLUMN_INTENT_EXTRA_DATA, जो ये कर सकते हैं सुझाव के बारे में अतिरिक्त जानकारी संग्रहित करें. इस कॉलम में सेव किया गया डेटा इंटेंट के अतिरिक्त बंडल के EXTRA_DATA_KEY में रखा जाता है.

मकसद को हैंडल करना

कस्टम इंटेंट के साथ, पसंद के मुताबिक खोज से जुड़े सुझाव देने के बाद, आपको जब उपयोगकर्ता किसी सुझाव. यह ACTION_SEARCH को मैनेज करने के अलावा इंटेंट के लिए काम करते हैं, जो आपकी सर्च करने लायक गतिविधि पहले से ही मौजूद है. यहां इसका उदाहरण दिया गया है कि आपके पास अपनी ऐक्टिविटी गतिविधि के दौरान इंटेंट को हैंडल करने का विकल्प है. onCreate() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है कॉलबैक:

Kotlin

when(intent.action) {
    Intent.ACTION_SEARCH -> {
        // Handle the normal search query case.
        intent.getStringExtra(SearchManager.QUERY)?.also { query ->
            doSearch(query)
        }
    }
    Intent.ACTION_VIEW -> {
        // Handle a suggestions click, because the suggestions all use ACTION_VIEW.
        showResult(intent.data)
    }
}

Java

Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
    // Handle the normal search query case.
    String query = intent.getStringExtra(SearchManager.QUERY);
    doSearch(query);
} else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
    // Handle a suggestions click, because the suggestions all use ACTION_VIEW.
    Uri data = intent.getData();
    showResult(data);
}

इस उदाहरण में, इंटेंट कार्रवाई ACTION_VIEW है और डेटा में सुझाए गए आइटम की ओर इशारा करता हुआ एक पूरा यूआरआई होता है, जैसा कि android:searchSuggestIntentData स्ट्रिंग और SUGGEST_COLUMN_INTENT_DATA_ID कॉलम. इसके बाद यूआरआई लोकल showResult() तरीका, जो यूआरआई के ज़रिए तय किया गया आइटम.

क्वेरी का टेक्स्ट फिर से लिखें

डिफ़ॉल्ट रूप से, अगर उपयोगकर्ता सुझावों की सूची पर नेविगेट करने के लिए इसका इस्तेमाल करता है डायरेक्शनल कंट्रोल, जैसे कि ट्रैकबॉल या डी-पैड से, क्वेरी टेक्स्ट ऐसा नहीं करता अपडेट. हालांकि, आप उपयोगकर्ता की क्वेरी का टेक्स्ट जैसे दिखने पर उसे कुछ समय के लिए दोबारा लिख सकते हैं डालें. इससे जब उपयोगकर्ता को सुझाई गई क्वेरी दिखती है, तो वह खोज बॉक्स पर क्लिक करके उसमें बदलाव कर सकता है क्वेरी को खोज के रूप में भेजने से पहले.

क्वेरी के टेक्स्ट को इन तरीकों से फिर से लिखा जा सकता है:

  • खोजे जा सकने वाले प्रॉडक्ट में android:searchMode एट्रिब्यूट जोड़ें "queryRewriteFromText" वैल्यू के साथ कॉन्फ़िगरेशन. इसमें मामला, सुझाव के SUGGEST_COLUMN_TEXT_1 से सामग्री कॉलम का इस्तेमाल क्वेरी के टेक्स्ट को फिर से लिखने के लिए किया जाता है.
  • खोजे जा सकने वाले एलिमेंट में android:searchMode एट्रिब्यूट जोड़ें\ "queryRewriteFromData" वैल्यू के साथ कॉन्फ़िगरेशन. इसमें मामला, सुझाव के SUGGEST_COLUMN_INTENT_DATA कॉलम का इस्तेमाल क्वेरी को फिर से लिखने के लिए किया जाता है टेक्स्ट. इसका इस्तेमाल सिर्फ़ यूआरआई या दूसरे डेटा फ़ॉर्मैट के साथ करें जिनका मकसद उपयोगकर्ताओं को दिखने वाले विज्ञापन, जैसे कि एचटीटीपी यूआरएल. फिर से लिखने के लिए इंटरनल यूआरआई स्कीम का इस्तेमाल न करें से क्वेरी को इस तरीके से ट्रैक करें.
  • इसमें क्वेरी की खास टेक्स्ट स्ट्रिंग उपलब्ध कराएं आपकी सुझावों की टेबल का SUGGEST_COLUMN_QUERY कॉलम. अगर यह कॉलम मौजूद है और इसमें वर्तमान सुझाव के लिए एक मान है, तो यह है इसका इस्तेमाल क्वेरी के टेक्स्ट को फिर से लिखने और ऊपर दिए गए विकल्पों में से किसी एक को बदलने के लिए किया जाता है लागू करना.

शीघ्र खोज बॉक्स में खोज से जुड़े सुझाव दिखाएं

ऐप्लिकेशन को पसंद के मुताबिक खोज से जुड़े सुझाव देने के लिए कॉन्फ़िगर करने के बाद, दुनिया भर में पहुँच के लिए सुलभ क्विक सर्च बॉक्स के लिए उपलब्ध है, खोजने-योग्य कॉन्फ़िगरेशन को शामिल करने के लिए वैल्यू के साथ android:includeInGlobalSearch "true".

अतिरिक्त काम सिर्फ़ तब ज़रूरी हो सकता है, जब आपके कॉन्टेंट पर सेवा देने वाली कंपनी को पढ़ने की अनुमति चाहिए. इस स्थिति में, आपको एक फटाफट अनुमति देने के लिए, सेवा देने वाली कंपनी के लिए <path-permission> एलिमेंट कॉन्टेंट देने वाले के लिए खोज बॉक्स का रीड ऐक्सेस, जैसा कि यहां दिखाया गया है उदाहरण:

<provider android:name="MySuggestionProvider"
          android:authorities="com.example.MyCustomSuggestionProvider"
          android:readPermission="com.example.provider.READ_MY_DATA"
          android:writePermission="com.example.provider.WRITE_MY_DATA">
  <path-permission android:pathPrefix="/search_suggest_query"
                   android:readPermission="android.permission.GLOBAL_SEARCH" />
</provider>

इस उदाहरण में, सेवा देने वाली कंपनी, कॉन्टेंट को पढ़ने और उसमें बदलाव करने के ऐक्सेस पर पाबंदी लगाती है. <path-permission> एलिमेंट इस तरह से पाबंदी को संशोधित करता है "/search_suggest_query" में मौजूद कॉन्टेंट को पढ़ने का ऐक्सेस देना "android.permission.GLOBAL_SEARCH" की अनुमति के समय पाथ प्रीफ़िक्स मौजूद है. इससे क्विक सर्च बॉक्स का ऐक्सेस मिल जाता है, ताकि यह आपके कॉन्टेंट के बारे में क्वेरी कर सके देखें.

अगर कॉन्टेंट देने वाला आपका कॉन्टेंट पढ़ने की अनुमतियां लागू नहीं करता है, तो 'क्विक सर्च' सुविधा चालू करें Box उसे डिफ़ॉल्ट रूप से पढ़ता है.

डिवाइस पर सुझाव पाने की सुविधा चालू करना

डिफ़ॉल्ट रूप से, ऐप्लिकेशन, शीघ्र खोज बॉक्स में सुझाव देने के लिए सक्षम नहीं होते हैं, भले ही उन्हें ऐसा करने के लिए कॉन्फ़िगर किया गया हो. उपयोगकर्ता चुन सकता है कि उसे शामिल करना है या नहीं Searchable खोलने के लिए, Quick Search Box में आपके ऐप्लिकेशन के सुझाव आइटम—जो सेटिंग > खोजें—और अपनी ऐप को खोजे जाने योग्य आइटम के रूप में शामिल करना.

शीघ्र खोज बॉक्स में उपलब्ध प्रत्येक ऐप्लिकेशन की खोजे जा सकने वाले आइटम की सेटिंग वाला पेज. एंट्री में ऐप्लिकेशन का नाम शामिल होता है और इस बारे में कम शब्दों में जानकारी कि ऐप्लिकेशन में कौनसा कॉन्टेंट खोजा जा सकता है और शीघ्र खोज बॉक्स में सुझावों के लिए उपलब्ध है. ब्यौरे का टेक्स्ट तय करने के लिए खोजने लायक ऐप्लिकेशन के लिए, android:searchSettingsDescription जोड़ें एट्रिब्यूट का इस्तेमाल करें, जैसा कि यहां दिखाया गया है उदाहरण:

<?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"
    android:searchSuggestAuthority="com.example.MyCustomSuggestionProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:includeInGlobalSearch="true"
    android:searchSettingsDescription="@string/search_description" >
</searchable>

android:searchSettingsDescription के लिए स्ट्रिंग को छोटा करें और खोजने लायक कॉन्टेंट के बारे में बताएं. उदाहरण के लिए, "कलाकार, एल्बम, और ट्रैक" संगीत ऐप्लिकेशन या "सेव किए गए नोट" के लिए नोटपैड ऐप्लिकेशन के लिए. यह जानकारी देना ज़रूरी है, ताकि उपयोगकर्ता को पता चल सके कि किस तरह सुझाव दिए गए हैं. इस एट्रिब्यूट को हमेशा तब शामिल करें, जब android:includeInGlobalSearch सही है.

क्योंकि खोज से जुड़े सुझावों को चालू करने के लिए उपयोगकर्ता को सेटिंग मेन्यू पर जाना होगा करते हैं, तो यदि खोज आपके ऐप्लिकेशन का महत्वपूर्ण पहलू है, तो लोगों को बताती हैं. उदाहरण के लिए, पहली बार में ही आपसे कोई नोट जोड़ा जा सकता है जब कोई उपयोगकर्ता ऐप्लिकेशन लॉन्च करता है. इसमें क्विक के लिए खोज से जुड़े सुझाव पाने की सुविधा चालू करने का तरीका बताया गया है खोज बॉक्स.

क्विक सर्च बॉक्स के सुझाव देने वाले शॉर्टकट मैनेज करें

सुझाव जो उपयोगकर्ता क्विक सर्च बॉक्स से चुनता है वे अपने-आप शॉर्टकट बनाए जा सकते हैं. ये वे सुझाव हैं जिन्हें सिस्टम आपके कॉन्टेंट प्रोवाइडर को सुझाव के तौर पर दिखाएं, ताकि वह बिना किसी समस्या के तुरंत सुझाव को ऐक्सेस कर सके अपने कॉन्टेंट देने वाले के बारे में दोबारा क्वेरी करें.

डिफ़ॉल्ट रूप से, यह क्विक सर्च से मिले सभी सुझावों के लिए चालू होती है Box, लेकिन अगर समय के साथ आपके सुझाव के डेटा में बदलाव होता है, तो शॉर्टकट रीफ़्रेश करने होंगे. उदाहरण के लिए, अगर आपके सुझाव डाइनैमिक जैसे कि संपर्क की मौजूदगी की स्थिति के बारे में जानकारी. इसके बाद, सुझाव देने के लिए शॉर्टकट, उपयोगकर्ता को दिखाए जाने पर रीफ़्रेश किए जाएंगे. ऐसा करने के लिए, SUGGEST_COLUMN_SHORTCUT_ID आपकी सुझाव टेबल में. Google Analytics 4 पर माइग्रेट करने के लिए, इस कॉलम में, नीचे दिए गए विकल्पों में से किसी एक में मौजूद हर सुझाव के लिए, शॉर्टकट के व्यवहार को कॉन्फ़िगर किया जा सकता है इन तरीकों से मदद पाएं:

  • Quick Search Box से, कॉन्टेंट उपलब्ध कराने वाले ऐप्लिकेशन के बारे में फिर से क्वेरी करें देखें.

    SUGGEST_COLUMN_SHORTCUT_ID कॉलम में इनके लिए कोई वैल्यू दें हर बार शॉर्टकट का इस्तेमाल करके नए वर्शन के लिए दोबारा अनुरोध करने का सुझाव दिखाई देता है. शॉर्टकट की मदद से, आपको ज़ल्दी से ज़्यादा डेटा दिख सकता है हाल ही में तब तक उपलब्ध रहता है, जब तक रीफ़्रेश क्वेरी वापस नहीं आती, सुझाव को नई जानकारी के साथ रीफ़्रेश किया जाता है. रीफ़्रेश क्वेरी के यूआरआई पथ के साथ आपके कॉन्टेंट देने वाले को भेजा जाता है SUGGEST_URI_PATH_SHORTCUT—इसके बजाय SUGGEST_URI_PATH_QUERY.

    आप जो Cursor वापस करना चाहते हैं उसमें एक सुझाव शामिल करें. इसके लिए, कॉलम में किए गए बदलाव मूल सुझाव के जैसे हैं या वे खाली हैं. इससे पता चलता है कि शॉर्टकट अब मान्य नहीं है. इस स्थिति में, सुझाव गायब हो जाता है और शॉर्टकट को हटा दिया जाता है.

    अगर कोई सुझाव किसी ऐसे डेटा के बारे में बताता है जिसे रीफ़्रेश होने में ज़्यादा समय लग सकता है, जैसे कि नेटवर्क-आधारित रीफ़्रेश करते हैं, तो आप SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING कॉलम को सही वैल्यू वाली सुझाव टेबल, जो रीफ़्रेश पूरा होने तक दाएँ हाथ का आइकॉन दिखाएं. सही के अलावा कोई भी अन्य मान प्रोग्रेस स्पिनर नहीं दिखाता.

  • सुझाव को शॉर्टकट में कॉपी होने से रोकें.

    इस कॉलम में SUGGEST_NEVER_MAKE_SHORTCUT की वैल्यू दें: SUGGEST_COLUMN_SHORTCUT_ID कॉलम. इस मामले में, सुझाव को कभी भी शॉर्टकट में कॉपी नहीं किया जाता. ऐसा करना सिर्फ़ तब ज़रूरी होता है, जब पूर्व में कॉपी किए गए सुझाव को बिलकुल नहीं देखना चाहते. अगर आपको कॉलम के लिए एक सामान्य मान दें, फिर सुझाव शॉर्टकट सिर्फ़ तब तक दिखता है, जब तक रीफ़्रेश क्वेरी वापस नहीं आती.

  • डिफ़ॉल्ट शॉर्टकट को लागू होने दें.

    हर एक के लिए, SUGGEST_COLUMN_SHORTCUT_ID को खाली छोड़ दें वह सुझाव जो बदलता नहीं है और जिसे शॉर्टकट.

अगर आपका कोई भी सुझाव कभी नहीं बदलता है, तो आपको किसी SUGGEST_COLUMN_SHORTCUT_ID कॉलम.

शीघ्र खोज बॉक्स सुझाव रैंकिंग के बारे में

अपने ऐप्लिकेशन के खोज सुझावों को शीघ्र खोज बॉक्स में उपलब्ध कराने के बाद, शीघ्र खोज बॉक्स रैंकिंग निर्धारित करती है कि सुझाव किसी क्वेरी के लिए इस्तेमाल किया जाता है. यह इस बात पर निर्भर कर सकता है कि कितने उस क्वेरी के लिए परिणाम और उपयोगकर्ता आपके परिणामों को की तुलना में कितनी बार चुनता है दूसरे ऐप्लिकेशन में मौजूद हैं. इस बात की कोई गारंटी नहीं है कि आपके सुझाव कितने अच्छे हैं रैंक की गई हो या फिर दी गई क्वेरी के लिए आपके ऐप्लिकेशन के सुझाव दिखते हों. तय सीमा में आम तौर पर, क्वालिटी के नतीजे देने से यह संभावना बढ़ जाती है कि आपका ऐप्लिकेशन सुझावों को प्रमुखता से दिखाया जाता है. साथ ही, ऐसे ऐप्लिकेशन ख़राब क्वालिटी वाले सुझावों की रैंक कम हो जाने या उनके न दिखने की संभावना ज़्यादा होती है.