เมื่อใช้กล่องโต้ตอบการค้นหาหรือวิดเจ็ตการค้นหาของ Android คุณสามารถระบุ คำแนะนำการค้นหาที่กำหนดเองซึ่งสร้างขึ้นจากข้อมูลในแอป ตัวอย่างเช่น ถ้าแอปของคุณเป็นพจนานุกรม คุณสามารถแนะนำคำจากพจนานุกรมที่ ตรงกับข้อความที่ป้อนในช่องค้นหาก่อนที่ผู้ใช้จะป้อนจนเสร็จสิ้น คำค้นหาของตน คำแนะนำเหล่านี้มีประโยชน์เนื่องจากสามารถคาดการณ์ สิ่งที่ผู้ใช้ต้องการ และมอบการเข้าถึงได้ทันที รูปที่ 1 แสดงตัวอย่าง กล่องโต้ตอบการค้นหาพร้อมคำแนะนำที่กำหนดเอง
เมื่อคุณให้คำแนะนำที่กำหนดเองแล้ว คุณยังทำให้ระบบพร้อมใช้งานกับ ช่อง Quick Search แบบทั้งระบบ ทำให้คุณสามารถเข้าถึงเนื้อหาของคุณจากภายนอก แอป
ก่อนจะเพิ่มคำแนะนำที่กำหนดเอง โปรดใช้กล่องโต้ตอบการค้นหาของ Android หรือ วิดเจ็ตค้นหาสำหรับการค้นหาในแอปของคุณ โปรดดูสร้าง อินเทอร์เฟซการค้นหา และ เนื้อหา ผู้ให้บริการ
ข้อมูลเบื้องต้น
![](https://developer.android.com/static/images/search/search-suggest-custom.png?authuser=19&hl=th)
รูปที่ 1 ภาพหน้าจอของกล่องโต้ตอบการค้นหากับ คำแนะนำการค้นหาที่กำหนดเอง
เมื่อผู้ใช้เลือกคำแนะนำที่กำหนดเอง ระบบจะส่ง
Intent
ไปยัง
กิจกรรมที่ค้นหาได้ ซึ่งต่างจากคำค้นหาทั่วไปที่ส่ง Intent ที่มี
ACTION_SEARCH
คุณสามารถกำหนดคำแนะนำที่กำหนดเองเพื่อใช้
ACTION_VIEW
หรือ
การดำเนินการผ่านความตั้งใจอื่นๆ และยังรวมข้อมูลที่เกี่ยวข้องกับ
คำแนะนำที่เลือกไว้ ในตัวอย่างพจนานุกรม เมื่อผู้ใช้เลือก
แอปนั้นจะสามารถเปิดคำจำกัดความของคำนั้นได้ทันทีแทน
ในการค้นหาคำที่ตรงกันจากพจนานุกรม
หากต้องการให้คำแนะนำที่กำหนดเอง ให้ทำตามขั้นตอนต่อไปนี้
- ดำเนินกิจกรรมพื้นฐานที่ค้นหาได้ ตามที่อธิบายไว้ใน สร้างอินเทอร์เฟซการค้นหา
- แก้ไขการกำหนดค่าที่ค้นหาได้ซึ่งมีข้อมูลเกี่ยวกับเนื้อหา ที่ให้คำแนะนำแบบกำหนดเอง
- สร้างตาราง เช่น ใน
SQLiteDatabase
, เพื่อดูคำแนะนำและจัดรูปแบบตารางด้วยคอลัมน์ที่จำเป็น - สร้างเนื้อหา ที่มีสิทธิ์เข้าถึงตารางคำแนะนำ และประกาศ ไว้ในไฟล์ Manifest
- ประกาศประเภทของ
Intent
ที่จะส่งเมื่อผู้ใช้เลือก คำแนะนำของคุณ ซึ่งรวมถึงการดำเนินการที่กำหนดเองและข้อมูลที่กำหนดเอง
เช่นเดียวกับที่ระบบ Android แสดงกล่องโต้ตอบการค้นหา กล่องโต้ตอบการค้นหาก็จะแสดงข้อมูล การแนะนำการค้นหา คุณต้องมีผู้ให้บริการเนื้อหาที่ระบบสามารถ เรียกดูคำแนะนำของคุณ อ่านแล้ว ผู้ให้บริการเนื้อหา เพื่อดูวิธีสร้างผู้ให้บริการเนื้อหา
เมื่อระบบระบุว่ากิจกรรมของคุณสามารถค้นหาได้และให้ การแนะนำการค้นหา ขั้นตอนต่อไปนี้จะเกิดขึ้นเมื่อผู้ใช้ป้อน ข้อความค้นหา:
- ระบบจะใช้คำค้นหา ซึ่งหมายถึงอะไรก็ตามที่ป้อน และดำเนินการค้นหาไปยังผู้ให้บริการเนื้อหาของคุณที่จัดการ แนะนำ
- ผู้ให้บริการเนื้อหาของคุณแสดง
Cursor
ซึ่งชี้ไปยังคำแนะนำทั้งหมดที่เกี่ยวข้องกับคำค้นหา ข้อความ - ระบบจะแสดงรายการคำแนะนำจาก
Cursor
เมื่อคำแนะนำที่กำหนดเองปรากฏขึ้น สิ่งต่อไปนี้อาจเกิดขึ้น
- หากผู้ใช้ป้อนตัวอักษรอื่นหรือเปลี่ยนคำค้นหาในลักษณะใดก็ตาม พารามิเตอร์ ที่ดำเนินขั้นตอนดังกล่าวซ้ำ และรายการคำแนะนำจะได้รับการอัปเดตตามนั้น
- หากผู้ใช้ดำเนินการค้นหา ระบบจะไม่สนใจคำแนะนำและ
ที่ส่งไปยังกิจกรรมที่ค้นหาได้ โดยใช้
Intent
ACTION_SEARCH
- หากผู้ใช้เลือกคำแนะนำ ระบบจะส่ง Intent ไปยัง กิจกรรมที่มีการดำเนินการที่กำหนดเองและข้อมูลที่กำหนดเองเพื่อให้แอปของคุณเปิดได้ เนื้อหาที่แนะนำ
แก้ไขการกำหนดค่าที่ค้นหาได้
หากต้องการเพิ่มการสนับสนุนสำหรับคำแนะนำที่กำหนดเอง ให้เพิ่ม
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>
คุณอาจต้องการแอตทริบิวต์เพิ่มเติม ทั้งนี้ขึ้นอยู่กับประเภทของ Intent แนบไปกับข้อเสนอแนะแต่ละรายการ และวิธี จัดรูปแบบข้อความค้นหาในเนื้อหาของคุณ แอตทริบิวต์ที่ไม่บังคับอื่นๆ จะกล่าวถึงในหัวข้อต่อไปนี้
สร้างผู้ให้บริการเนื้อหา
หากต้องการสร้างผู้ให้บริการเนื้อหาสำหรับคำแนะนำที่กำหนดเอง โปรดดูก่อน
ผู้ให้บริการเนื้อหา
เพื่อดูวิธีสร้างผู้ให้บริการเนื้อหา ผู้ให้บริการเนื้อหาที่กำหนดเอง
จะคล้ายกับผู้ให้บริการเนื้อหารายอื่น อย่างไรก็ตาม สำหรับ
ตามที่คุณให้มา แถวที่เกี่ยวข้องใน Cursor
จะต้อง
รวมคอลัมน์เฉพาะที่ระบบเข้าใจและใช้เพื่อจัดรูปแบบ
แนะนำ
เมื่อผู้ใช้ป้อนข้อความในกล่องโต้ตอบการค้นหาหรือวิดเจ็ตการค้นหา ระบบจะ
สอบถามผู้ให้บริการเนื้อหาของคุณเพื่อขอคำแนะนำโดยการโทร
query()
ทุกครั้งที่มีการป้อนตัวอักษร ในการใช้งาน query()
ผู้ให้บริการเนื้อหาของคุณจะต้องค้นหาข้อมูลการแนะนำของคุณและแสดงผล
Cursor
ที่ชี้ไปยังแถวที่พิจารณาว่าดี
แนะนำ
รายละเอียดเกี่ยวกับการสร้างผู้ให้บริการเนื้อหาสำหรับคำแนะนำที่กำหนดเองมีดังนี้ ที่กล่าวถึงใน 2 ส่วนต่อไปนี้
- จัดการการค้นหาคำแนะนำ
- วิธีที่ระบบส่งคำขอไปยังผู้ให้บริการเนื้อหาและวิธีจัดการ ให้พวกเขา
- สร้างตารางคำแนะนำ
- วิธีกำหนดคอลัมน์ที่ระบบคาดว่าจะพบในคอลัมน์
ผลลัพธ์
Cursor
รายการพร้อมคำค้นหาแต่ละรายการ
จัดการการค้นหาคำแนะนำ
เมื่อระบบขอคำแนะนำจากผู้ให้บริการเนื้อหา ระบบจะเรียก
เมธอด query()
ของผู้ให้บริการเนื้อหาของคุณ ใช้วิธีการนี้เพื่อ
ค้นหาข้อมูลคำแนะนำของคุณและแสดงผล Cursor
ซึ่งชี้ไปยัง
คำแนะนำที่คุณคิดว่าเกี่ยวข้อง
ข้อมูลสรุปเกี่ยวกับพารามิเตอร์ที่ระบบส่งไปยัง
query()
เมธอด แสดงตามลำดับ:
uri
เป็นเนื้อหาเสมอ
Uri
โดยมีรูปแบบเป็น ดังต่อไปนี้:content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
การทำงานเริ่มต้นคือการให้ระบบส่ง URI นี้และต่อท้ายข้อความค้นหา ป้อนข้อความ:
content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
/puppiesข้อความค้นหาในส่วนท้ายมีการเข้ารหัสโดยใช้กฎการเข้ารหัส URI ดังนั้นคุณอาจ จำเป็นต้องถอดรหัสก่อนทำการค้นหา
ส่วน
optional.suggest.path
รวมอยู่ใน URI ถ้าคุณกำหนดเส้นทางดังกล่าวไว้ในไฟล์การกำหนดค่าที่ค้นหาได้ แอตทริบิวต์android:searchSuggestPath
จำเป็นต้องใช้เฉพาะในกรณีที่ คุณใช้ผู้ให้บริการเนื้อหารายเดียวกันสำหรับกิจกรรมที่ค้นหาได้หลายรายการ ถ้า ในกรณีนี้ โปรดชี้แจงแหล่งที่มาของคำค้นหาคำแนะนำprojection
- ไม่มีค่าเสมอ
selection
- ค่าที่ระบุใน
android:searchSuggestSelection
ของไฟล์การกำหนดค่าที่ค้นหาได้ หรือเป็นค่าว่างหากคุณไม่ ประกาศแอตทริบิวต์android:searchSuggestSelection
หัวข้อต่อไปนี้จะกล่าวถึงเรื่องนี้เพิ่มเติมselectionArgs
- มีคำค้นหาเป็นองค์ประกอบแรกและองค์ประกอบเดียวของอาร์เรย์ถ้า คุณจะประกาศแอตทริบิวต์
android:searchSuggestSelection
ใน การกำหนดค่าที่ค้นหาได้ หากคุณไม่ประกาศandroid:searchSuggestSelection
พารามิเตอร์นี้จะเป็น Null หัวข้อต่อไปนี้จะอธิบายเรื่องนี้เพิ่มเติมsortOrder
- ไม่มีค่าเสมอ
ระบบสามารถส่งข้อความค้นหาให้คุณได้ 2 วิธี วิธีเริ่มต้นคือ
ข้อความค้นหาจะถูกรวมเป็นเส้นทางสุดท้ายของ URI เนื้อหาที่ส่งผ่าน
พารามิเตอร์ uri
อย่างไรก็ตาม หากคุณใส่ค่าการเลือกไว้ใน
android:searchSuggestSelection
ของการกำหนดค่าที่ค้นหาได้
ข้อความค้นหานี้จะส่งผ่านเป็นองค์ประกอบแรกของ
อาร์เรย์สตริง selectionArgs
เราอธิบายตัวเลือก 2 อย่างนี้
ถัดไป
รับข้อความค้นหาใน URI
โดยค่าเริ่มต้น คำค้นหาจะเพิ่มต่อท้ายเป็นกลุ่มสุดท้ายของ uri
พารามิเตอร์ — ออบเจ็กต์ Uri
หากต้องการดึงข้อความค้นหาใน
การใช้งาน
getLastPathSegment()
,
ดังที่ปรากฏในตัวอย่างต่อไปนี้
Kotlin
val query: String = uri.lastPathSegment.toLowerCase()
Java
String query = uri.getLastPathSegment().toLowerCase();
แสดงผลกลุ่มสุดท้ายของ Uri
ซึ่งเป็นคำค้นหา
ข้อความที่ผู้ใช้ป้อน
รับคำค้นหาในอาร์กิวเมนต์การเลือก
แทนที่จะใช้ 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()
จะแสดงเมธอด
พารามิเตอร์ selection
เป็น "word MATCH ?"
และ
selectionArgs
เป็นคำค้นหา เมื่อคุณส่งต่อข้อมูลเหล่านี้ไปยัง
SQLite
query()
เนื่องจากอาร์กิวเมนต์ของแต่ละรายการ จะถูกสังเคราะห์
รวมกันหมายความว่าเครื่องหมายคำถามจะถูกแทนที่ด้วยข้อความค้นหา ถ้า
คุณได้รับข้อความค้นหาที่แนะนำด้วยวิธีนี้ และจำเป็นต้องเพิ่มไวลด์การ์ดให้กับการค้นหา
ให้เติมข้อความต่อท้ายหรือต่อท้ายพารามิเตอร์ selectionArgs
เนื่องจาก
ระบบจะรวมค่านี้ไว้ในเครื่องหมายคำพูดและแทรกไว้แทนที่เครื่องหมายคำถาม
แอตทริบิวต์อื่นในตัวอย่างก่อนหน้านี้คือ
android:searchSuggestIntentAction
ซึ่งกำหนดการดำเนินการของ Intent
ส่งไปพร้อมความตั้งใจแต่ละรายการเมื่อผู้ใช้เลือกคำแนะนำ เรื่องนี้ได้กล่าวถึงไปแล้ว
เพิ่มเติมในการประกาศเจตจำนงของ
คำแนะนำ
สร้างตารางคำแนะนำ
เมื่อคุณส่งคำแนะนำกลับไปยังระบบด้วย Cursor
ระบบจะทำเครื่องหมาย
ระบบต้องการคอลัมน์ที่เฉพาะเจาะจงในแต่ละแถว ไม่ว่าคุณจะจัดเก็บ
ข้อมูลคำแนะนำของคุณในฐานข้อมูล SQLite ในอุปกรณ์ ฐานข้อมูลบนเว็บ
หรือรูปแบบอื่นในอุปกรณ์หรือเว็บ ให้จัดรูปแบบคำแนะนำเป็นแถว
ในตารางและนำเสนอด้วย Cursor
ระบบจะเข้าใจหลายคอลัมน์ แต่มีเพียง 2 คอลัมน์เท่านั้นที่จำเป็น
_ID
- รหัสแถวที่เป็นจำนวนเต็มที่ไม่ซ้ำสำหรับคำแนะนำแต่ละรายการ ระบบกำหนดให้ดำเนินการเช่นนี้เพื่อ
ให้คำแนะนำใน
ListView
SUGGEST_COLUMN_TEXT_1
- สตริงที่แสดงเป็นคำแนะนำ
คอลัมน์ต่อไปนี้เป็นคอลัมน์ที่ไม่บังคับทั้งหมด ส่วนใหญ่มีการอธิบายเพิ่มเติมใน ส่วนต่างๆ ต่อไปนี้
SUGGEST_COLUMN_TEXT_2
- สตริง หาก
Cursor
มีคอลัมน์นี้ ข้อมูลทั้งหมด คำแนะนำจะอยู่ในรูปแบบ 2 บรรทัด สตริงในคอลัมน์นี้คือ แสดงเป็นบรรทัดที่ 2 ข้อความเล็กๆ ใต้คำแนะนำหลัก ข้อความ ค่านี้อาจเป็น Null หรือเว้นว่างไว้เพื่อระบุว่าไม่มีข้อความรอง SUGGEST_COLUMN_ICON_1
- ทรัพยากรที่ถอนออกได้ เนื้อหา หรือสตริง URI ของไฟล์ หาก
Cursor
มีคอลัมน์นี้ ระบบจะแสดงคำแนะนำทั้งหมด ในรูปแบบไอคอนบวกข้อความพร้อมด้วยไอคอนที่ถอนออกได้ทางด้านซ้าย ช่วงเวลานี้ อาจเป็น Null หรือ 0 เพื่อระบุว่าไม่มีไอคอนในแถวนี้ SUGGEST_COLUMN_ICON_2
- ทรัพยากรที่ถอนออกได้ เนื้อหา หรือสตริง URI ของไฟล์ หาก
Cursor
มีคอลัมน์นี้ ระบบจะแสดงคำแนะนำทั้งหมด ในรูปแบบไอคอนบวกข้อความ โดยมีไอคอนอยู่ด้านขวา ประเภท null หรือ 0 เพื่อระบุว่าไม่มีไอคอนในแถวนี้ SUGGEST_COLUMN_INTENT_ACTION
- สตริงการดำเนินการผ่าน Intent หากมีคอลัมน์นี้อยู่และมีค่าที่ตำแหน่ง
การทำงานที่กำหนดในที่นี้จะใช้ในการสร้างคำสั่ง
Intent หากไม่ได้ระบุองค์ประกอบ ระบบจะดำเนินการจาก
android:searchSuggestIntentAction
ในช่องที่ค้นหาได้ของคุณ การกำหนดค่า หากการดำเนินการของคุณเหมือนกันทั้งหมดในทุกคำแนะนำจะ ที่มีประสิทธิภาพเพื่อระบุการดำเนินการโดยใช้android:searchSuggestIntentAction
และข้ามคอลัมน์นี้ SUGGEST_COLUMN_INTENT_DATA
- สตริง URI ข้อมูล ถ้าคอลัมน์นี้มีอยู่และมีค่าใน
ข้อมูลนี้จะใช้เมื่อสร้าง Intent ของคำแนะนำ หากองค์ประกอบ
ไม่ได้ระบุไว้ เนื่องจากจะนำมาจาก
android:searchSuggestIntentData
ในช่องที่ค้นหาได้ของคุณ การกำหนดค่า หากไม่ระบุแหล่งที่มา ช่องข้อมูลของ Intent จะเป็น ค่าว่าง ข้อมูลในคำแนะนำทั้งหมดเหมือนกันหรืออธิบายได้ จะใช้ส่วนคงที่และรหัสที่เจาะจง การระบุจะมีประสิทธิภาพมากกว่า โดยใช้android:searchSuggestIntentData
และละเว้นค่านี้ SUGGEST_COLUMN_INTENT_DATA_ID
- สตริงเส้นทาง URI ถ้าคอลัมน์นี้มีอยู่และมีค่าใน
แล้วตามด้วย "/" และค่านี้จะต่อท้ายช่องข้อมูลใน Intent
ใช้ตัวเลือกนี้เฉพาะเมื่อช่องข้อมูลที่ระบุโดย
android:searchSuggestIntentData
ในส่วน "ค้นหาได้" ตั้งค่าเป็นสตริงพื้นฐานที่เหมาะสมแล้ว SUGGEST_COLUMN_INTENT_EXTRA_DATA
- ข้อมูลที่กำหนดเอง หากมีคอลัมน์นี้อยู่และมีค่าในแถวที่ระบุ
นี่คือข้อมูลเพิ่มเติมที่ใช้ในการสร้างจุดประสงค์ของคำแนะนำ
หากไม่ระบุ ช่องข้อมูลเพิ่มเติมของ Intent จะเป็นค่าว่าง คอลัมน์นี้จะช่วยให้
คำแนะนำจะให้ข้อมูลเพิ่มเติมซึ่งรวมอยู่ในส่วนเสริมใน
Intent
EXTRA_DATA_KEY
SUGGEST_COLUMN_QUERY
- หากมีคอลัมน์นี้และองค์ประกอบนี้อยู่ในแถวที่ระบุ ค่านี้จะ
ข้อมูลที่ใช้ในการสร้างคำค้นหาของคำแนะนำ ซึ่งรวมถึง
ในจุดประสงค์ของ
วันที่
QUERY
ต้องระบุหากการดำเนินการของคำแนะนำคือACTION_SEARCH
แต่ไม่บังคับ SUGGEST_COLUMN_SHORTCUT_ID
- ใช้เมื่อให้คำแนะนำสำหรับช่อง Quick Search เท่านั้น คอลัมน์นี้
ระบุว่าจะต้องจัดเก็บการแนะนำการค้นหาเป็นทางลัดหรือไม่
ว่าจะต้องได้รับการตรวจสอบหรือไม่ โดยปกติ ทางลัดจะเกิดขึ้นเมื่อผู้ใช้
แตะคำแนะนำจากช่อง Quick Search หากไม่มี ผลลัพธ์จะจัดเก็บเป็น
ทางลัดและไม่มีการรีเฟรช หากตั้งค่าเป็น
SUGGEST_NEVER_MAKE_SHORTCUT
, ระบบไม่ได้จัดเก็บผลลัพธ์เป็นทางลัด มิฉะนั้น ระบบจะใช้รหัสทางลัดเพื่อ โปรดกลับมาดูคำแนะนำล่าสุดโดยใช้SUGGEST_URI_PATH_SHORTCUT
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
- ใช้เมื่อให้คำแนะนำสำหรับช่อง Quick Search เท่านั้น คอลัมน์นี้
กำหนดว่าจะต้องแสดงไอคอนหมุนแทนไอคอนจาก
SUGGEST_COLUMN_ICON_2
ในขณะที่ทางลัดของคำแนะนำนี้คือ การรีเฟรชในช่องค้นหาแบบรวดเร็ว
คอลัมน์เหล่านี้ส่วนใหญ่จะอธิบายเพิ่มเติมในหัวข้อต่อไปนี้
ประกาศความตั้งใจสำหรับคำแนะนำ
เมื่อผู้ใช้เลือกคำแนะนำจากรายการที่ปรากฏใต้
ระบบจะส่งIntent
ที่กำหนดเองไปยัง
กิจกรรมที่ค้นหาได้ คุณต้องกำหนดการกระทำและข้อมูลสำหรับความตั้งใจ
ประกาศการดำเนินการผ่าน Intent
การดำเนินการที่ใช้ความตั้งใจที่พบบ่อยที่สุดสำหรับคำแนะนำที่กำหนดเองคือ
ACTION_VIEW
ซึ่งเหมาะสำหรับเวลาที่คุณต้องการเปิดบางสิ่ง
เช่น คำจำกัดความของคำ ข้อมูลติดต่อของบุคคล หรือหน้าเว็บ
แต่การกระทำ Intent อาจเป็นการกระทำอื่นๆ และแตกต่างกันในแต่ละรายการ
แนะนำ
ขึ้นอยู่กับว่าคุณต้องการให้คำแนะนำทั้งหมดใช้การดำเนินการผ่าน Intent เดียวกันหรือไม่ คุณสามารถกำหนดการทำงานได้ 2 วิธีดังนี้
- ใช้แอตทริบิวต์
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"
หรือจะใช้ 2 เทคนิคนี้ร่วมกันก็ได้ ตัวอย่างเช่น คุณสามารถใส่
แอตทริบิวต์ android:searchSuggestIntentAction
ที่มีการดำเนินการ
ใช้กับคำแนะนำทั้งหมดโดยค่าเริ่มต้น จากนั้นลบล้างการดำเนินการนี้สำหรับ
โดยประกาศการดำเนินการอื่นใน
SUGGEST_COLUMN_INTENT_ACTION
หากไม่ได้ระบุค่า
ในคอลัมน์ SUGGEST_COLUMN_INTENT_ACTION
จากนั้น Intent
ที่ระบุในแอตทริบิวต์ android:searchSuggestIntentAction
คือ
ประกาศข้อมูลความตั้งใจ
เมื่อผู้ใช้เลือกคำแนะนำ กิจกรรมที่ค้นหาได้ของคุณจะได้รับ
ความตั้งใจในการดำเนินการที่คุณกำหนด ตามที่กล่าวไปแล้วใน
แต่ Intent นั้นต้องมีข้อมูลเพื่อให้กิจกรรมของคุณระบุได้ด้วย
คำแนะนำที่เลือกไว้ โดยเฉพาะอย่างยิ่ง ข้อมูลต้องไม่ซ้ำกัน
สําหรับคําแนะนําแต่ละรายการ เช่น รหัสแถวสําหรับคําแนะนําในตาราง SQLite
เมื่อได้รับ Intent แล้ว คุณสามารถดึงข้อมูลที่แนบมาด้วย
getData()
หรือ
getDataString()
คุณกําหนดข้อมูลที่รวมอยู่ใน Intent ได้ 2 วิธีดังนี้
- กำหนดข้อมูลสำหรับคำแนะนำแต่ละรายการภายใน
SUGGEST_COLUMN_INTENT_DATA
ของตารางคำแนะนำระบุข้อมูลที่จำเป็นทั้งหมดสำหรับความตั้งใจแต่ละรายการในคำแนะนำ ตารางโดยรวมคอลัมน์
SUGGEST_COLUMN_INTENT_DATA
และ จากนั้นให้ป้อนข้อมูลที่ไม่ซ้ำกันสำหรับแต่ละแถว ข้อมูลจากคอลัมน์นี้ จะแนบกับ Intent ที่คุณระบุในคอลัมน์นี้ทุกประการ คุณสามารถ จากนั้นดึงข้อมูลด้วยgetData()
หรือgetDataString()
- แบ่ง URI ข้อมูลออกเป็น 2 ส่วน: ส่วนที่พบได้ทั่วไปสำหรับทุกคำแนะนำ
และส่วนที่ไม่ซ้ำกันของคำแนะนำแต่ละข้อ วางส่วนเหล่านี้ลงใน
แอตทริบิวต์
android:searchSuggestintentData
ของรายการที่ค้นหาได้ และคอลัมน์SUGGEST_COLUMN_INTENT_DATA_ID
ของ ตารางคำแนะนำตามลำดับตัวอย่างต่อไปนี้แสดงวิธีประกาศส่วนของ URI ที่ เหมือนกันกับคำแนะนำทั้งหมดใน แอตทริบิวต์
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 จากนั้นคุณสามารถดึงข้อมูลUri
ด้วยgetData()
เพิ่มข้อมูลเพิ่มเติม
หากต้องการแสดงข้อมูลเพิ่มเติมพร้อมความตั้งใจ คุณก็เพิ่มรายการอื่นได้
ในตาราง เช่น SUGGEST_COLUMN_INTENT_EXTRA_DATA
ได้
จัดเก็บข้อมูลเพิ่มเติมเกี่ยวกับคำแนะนำดังกล่าว ข้อมูลที่บันทึกไว้ในคอลัมน์นี้
อยู่ใน EXTRA_DATA_KEY
ของแพ็กเกจเพิ่มเติมของ Intent
จัดการความตั้งใจ
หลังจากใช้การแนะนำการค้นหาที่กำหนดเองด้วยความตั้งใจที่กำหนดเองแล้ว คุณต้อง
กิจกรรมที่ค้นหาได้ของคุณเพื่อจัดการกับ Intent เหล่านี้เมื่อผู้ใช้เลือก
แนะนำ วิธีนี้นอกเหนือจากการจัดการ ACTION_SEARCH
ซึ่งกิจกรรมที่ค้นหาได้มีอยู่แล้ว ลองดูตัวอย่างว่า
คุณสามารถจัดการ Intent ในระหว่าง
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); }
ในตัวอย่างนี้ การดำเนินการผ่าน Intent คือ ACTION_VIEW
และข้อมูล
มี URI ที่สมบูรณ์ซึ่งชี้ไปยังรายการที่แนะนำ ซึ่งผ่านการสังเคราะห์โดย
android:searchSuggestIntentData
สตริงและ
SUGGEST_COLUMN_INTENT_DATA_ID
จากนั้น URI จะส่งผ่านไปยัง
เมธอด showResult()
ในระบบที่สืบค้นผู้ให้บริการเนื้อหาสำหรับ
รายการที่ระบุโดย URI
เขียนข้อความค้นหาใหม่
โดยค่าเริ่มต้น หากผู้ใช้ไปยังส่วนต่างๆ ในรายการคำแนะนำโดยใช้ การควบคุมทิศทาง เช่น ด้วยแทร็กบอล หรือ D-pad ข้อความค้นหาจึงไม่ อัปเดต แต่คุณสามารถเขียนข้อความค้นหาของผู้ใช้ใหม่ตามที่ปรากฏได้ชั่วคราว ในช่องข้อความที่มีข้อความค้นหาที่ตรงกับคำแนะนำที่กำลังโฟกัส ซึ่งช่วยให้ ผู้ใช้จะเห็นข้อความค้นหาที่แนะนำ และจะสามารถเลือกช่องค้นหาและแก้ไข ข้อความค้นหาก่อนที่จะส่งเป็นการค้นหา
คุณสามารถเขียนข้อความค้นหาใหม่ได้ด้วยวิธีต่อไปนี้
- เพิ่มแอตทริบิวต์
android:searchMode
ลงในรายการที่ค้นหาได้ ด้วยค่า"queryRewriteFromText"
ด้วยวิธีนี้ เนื้อหาจากคำแนะนำSUGGEST_COLUMN_TEXT_1
เพื่อเขียนข้อความค้นหาใหม่ - เพิ่มแอตทริบิวต์
android:searchMode
ลงในรายการที่ค้นหาได้ ด้วยค่า"queryRewriteFromData"
ด้วยวิธีนี้ เนื้อหาจากคำแนะนำ คอลัมน์SUGGEST_COLUMN_INTENT_DATA
ใช้เพื่อเขียนคำค้นหาใหม่ ข้อความ ใช้เฉพาะกับ URI หรือรูปแบบข้อมูลอื่นๆ ที่มีวัตถุประสงค์ ที่ผู้ใช้มองเห็นได้ เช่น HTTP URL อย่าใช้รูปแบบ URI ภายในเพื่อเขียนใหม่ คำค้นหาในลักษณะนี้ - ระบุสตริงข้อความค้นหาที่ไม่ซ้ำกันใน
SUGGEST_COLUMN_QUERY
ของตารางคำแนะนำ หากสิ่งนี้ มี คอลัมน์ และมีค่าสำหรับคำแนะนำปัจจุบัน ซึ่งเป็น ใช้เพื่อเขียนข้อความคำค้นหาใหม่และลบล้างข้อความก่อนหน้า การนำไปใช้งานจริง
แสดงคำแนะนำการค้นหาในช่อง Quick Search
เมื่อคุณกำหนดค่าแอปให้เสนอการแนะนำการค้นหาที่กำหนดเอง ซึ่งทำให้
ในช่อง Quick Search ที่เข้าถึงได้ทั่วโลกนั้นทำได้ง่าย เพียงแก้ไข
การกำหนดค่าที่ค้นหาได้ของคุณที่จะรวม
android:includeInGlobalSearch
ที่มีค่า
"true"
สถานการณ์เดียวที่จำเป็นต้องมีงานเพิ่มเติมคือเมื่อเนื้อหาของคุณ
จะต้องมีสิทธิ์อ่าน ในกรณีนี้ คุณจะต้องเพิ่ม
องค์ประกอบ <path-permission>
สำหรับผู้ให้บริการที่จะให้สิทธิ์ Quick
สิทธิ์การอ่านผู้ให้บริการเนื้อหาของคุณในช่องการค้นหา ดังที่แสดงใน
ตัวอย่าง:
<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"
มีอยู่ การดำเนินการนี้จะให้สิทธิ์เข้าถึงช่อง Quick Search เพื่อให้ค้นหาเนื้อหาของคุณได้
หากผู้ให้บริการเนื้อหาของคุณไม่บังคับใช้สิทธิ์การอ่าน Quick Search Box จะอ่านข้อความให้โดยค่าเริ่มต้น
เปิดใช้คำแนะนำในอุปกรณ์
โดยค่าเริ่มต้น แอปไม่ได้เปิดใช้งานเพื่อให้คำแนะนำในช่อง Quick Search แม้ว่าจะกำหนดค่าไว้ก็ตาม ผู้ใช้เลือกว่าจะรวมหรือไม่ จากแอปพลิเคชันของคุณในช่อง Quick Search ด้วยการเปิด Searchable รายการ - จะอยู่ในการตั้งค่า > ค้นหา และเปิดใช้ เป็นรายการที่ค้นหาได้
แต่ละแอปที่พร้อมใช้งานสำหรับช่อง Quick Search จะมีรายการใน
หน้าการตั้งค่ารายการที่ค้นหาได้ รายการจะมีชื่อแอป
และคำอธิบายสั้นๆ ว่าเนื้อหาที่สามารถค้นหาได้
จากแอปพลิเคชันและ
ดูคำแนะนำได้ในช่อง Quick Search เพื่อกำหนดข้อความคำอธิบาย
สำหรับแอปที่ค้นหาได้ ให้เพิ่ม 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
เป็นความจริง
เนื่องจากผู้ใช้ต้องไปที่เมนูการตั้งค่าเพื่อเปิดใช้งานคำแนะนำการค้นหา กับแอปของคุณ หากการค้นหาเป็นแง่มุมสำคัญของแอป ให้พิจารณาวิธีการ สื่อสารให้ผู้ใช้ทราบ เช่น คุณอาจใส่โน้ตในครั้งแรก ผู้ใช้เปิดแอปที่อธิบายวิธีเปิดใช้คำแนะนำการค้นหาสำหรับ Quick ช่องค้นหา
จัดการทางลัดการแนะนำช่อง Quick Search
คำแนะนำที่ผู้ใช้เลือกจากช่องค้นหาแบบรวดเร็วสามารถสร้างขึ้นโดยอัตโนมัติ เพื่อสร้างเป็นทางลัด รายการเหล่านี้คือคำแนะนำที่ระบบคัดลอกจาก ผู้ให้บริการเนื้อหาเพื่อให้สามารถเข้าถึงคำแนะนำ ได้อย่างรวดเร็วโดยไม่ต้อง ให้ค้นหาผู้ให้บริการเนื้อหาอีกครั้ง
โดยค่าเริ่มต้น การตั้งค่านี้จะเปิดใช้สำหรับคำแนะนำทั้งหมดที่ Quick Search ดึงขึ้นมา
Box แต่ถ้าข้อมูลคำแนะนำของคุณมีการเปลี่ยนแปลงเมื่อเวลาผ่านไป คุณสามารถร้องขอ
เพื่อรีเฟรชทางลัด เช่น หากคำแนะนำของคุณอ้างอิงถึงแบบไดนามิก
เช่น สถานะการมีตัวตนของผู้ติดต่อ แล้วขอให้ผู้ติดต่อ
จะมีการรีเฟรชทางลัดเมื่อแสดงให้ผู้ใช้เห็น ในการดำเนินการนี้ ให้ใส่
SUGGEST_COLUMN_SHORTCUT_ID
ในตารางคำแนะนำ คุณสามารถใช้
คอลัมน์นี้เพื่อกำหนดค่าลักษณะการทำงานของทางลัดสำหรับคำแนะนำแต่ละรายการใน
วิธีต่อไปนี้
ให้ช่อง Quick Search สืบค้นข้อมูลจากผู้ให้บริการเนื้อหาของคุณอีกครั้ง ทางลัดการแนะนำ
ระบุค่าในคอลัมน์
SUGGEST_COLUMN_SHORTCUT_ID
สำหรับ ข้อเสนอแนะให้ค้นหาใหม่เป็นเวอร์ชันใหม่ทุกครั้งที่ทางลัด จะปรากฏขึ้น ทางลัดจะปรากฏพร้อมข้อมูลใดก็ตามที่มีมากที่สุดได้อย่างรวดเร็ว ที่ใช้ได้ล่าสุดจนกว่าการค้นหาการรีเฟรชจะแสดงผล คำแนะนำจะรีเฟรชด้วยข้อมูลใหม่ ข้อความค้นหาที่รีเฟรชคือ ที่ส่งไปยังผู้ให้บริการเนื้อหาด้วยเส้นทาง URISUGGEST_URI_PATH_SHORTCUT
แทนSUGGEST_URI_PATH_QUERY
กำหนดให้
Cursor
ที่คุณส่งกลับมีคำแนะนำ 1 รายการโดยใช้ คอลัมน์เดียวกับคำแนะนำเดิม หรือว่างเปล่า ซึ่งแสดงว่า แป้นพิมพ์ลัดจะใช้งานไม่ได้อีกต่อไป ซึ่งในกรณีนี้คำแนะนำจะหายไป และนำทางลัดออกหากคำแนะนำหมายถึงข้อมูลที่ใช้เวลาในการรีเฟรชนานกว่า เช่น การรีเฟรชบนเครือข่าย คุณยังสามารถเพิ่ม
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
ไปยัง ตารางคำแนะนำที่มีค่าเป็น true เพื่อแสดงไอคอนหมุนแสดงความคืบหน้าสำหรับ ไอคอนด้านขวามือจนกว่าการรีเฟรชจะเสร็จสมบูรณ์ ค่าอื่นๆ นอกเหนือจาก true ไม่แสดงไอคอนหมุนแสดงความคืบหน้าป้องกันการคัดลอกคำแนะนำลงในทางลัดเลย
ระบุค่า
SUGGEST_NEVER_MAKE_SHORTCUT
ในSUGGEST_COLUMN_SHORTCUT_ID
ในกรณีนี้ ค่า จะไม่มีการคัดลอกคำแนะนำใดๆ ลงในทางลัด ซึ่งจำเป็นเฉพาะเมื่อคุณ ไม่ต้องการให้คำแนะนำที่คัดลอกไว้ก่อนหน้านี้ปรากฏขึ้น หากคุณ ระบุค่าปกติสำหรับคอลัมน์ จากนั้นป้อนทางลัดการแนะนำ จะปรากฏจนกว่าการค้นหาแบบรีเฟรชจะแสดงผลเท่านั้นอนุญาตให้ใช้ลักษณะการทำงานของทางลัดเริ่มต้น
เว้น
SUGGEST_COLUMN_SHORTCUT_ID
ว่างไว้สำหรับแต่ละรายการ ที่ไม่มีการเปลี่ยนแปลงและสามารถบันทึกเป็น ทางลัด
หากไม่มีคำแนะนำใดเปลี่ยนแปลงเลย คุณไม่จำเป็น
SUGGEST_COLUMN_SHORTCUT_ID
เกี่ยวกับการจัดอันดับคำแนะนำของช่อง Quick Search
เมื่อคุณแสดงคำแนะนำการค้นหาของแอปพลิเคชันในช่อง Quick Search แล้ว การจัดอันดับของช่อง Quick Search จะกำหนดว่าคำแนะนำจะปรากฏอย่างไร ผู้ใช้สำหรับคำค้นหาหนึ่งๆ ซึ่งอาจขึ้นอยู่กับจำนวนแอปอื่นๆ สำหรับข้อความค้นหานั้น และความถี่ที่ผู้ใช้เลือกผลลัพธ์ของคุณเมื่อเทียบกับ ที่มาจากแอปอื่นๆ เราไม่รับประกันว่าจะให้คำแนะนำอย่างไร หรือว่ามีการแสดงคำแนะนำของแอปสำหรับข้อความค้นหาหนึ่งๆ หรือไม่ ใน โดยทั่วไป การแสดงผลที่มีคุณภาพจะช่วยเพิ่มแนวโน้มที่แอปของคุณจะได้รับ แสดงในตำแหน่งที่โดดเด่น และแอปที่ให้ คำแนะนำคุณภาพต่ำมีแนวโน้มมากขึ้นที่จะมีอันดับต่ำกว่าหรือไม่ได้แสดง