Android 8.0 เพิ่มความสามารถในการค้นหาที่ขยายการให้บริการสำหรับเมนูการตั้งค่า เอกสารนี้อธิบายวิธีเพิ่มการตั้งค่าและตรวจสอบว่าได้รับการจัดทําดัชนีอย่างถูกต้องสําหรับการค้นหาการตั้งค่า
สร้างการตั้งค่าที่จัดทําดัชนีได้
ข้อมูลโค้ดการตั้งค่าแต่ละรายการที่ต้องจัดทำดัชนีจะใช้Indexable
อินเทอร์เฟซ และต้องใช้ช่องแบบคงที่ ดังนี้
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
หลังจากตั้งค่าข้อมูลโค้ดสำหรับการจัดทำดัชนีแล้ว ให้เพิ่มข้อมูลโค้ดนั้นลงใน
SearchIndexableResources
ซึ่งมีอยู่ที่นี่
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
วิธีการที่ไม่บังคับ
SearchIndexProvider
อินเทอร์เฟซนี้มีเมธอดที่ไม่บังคับ 4 รายการ
getXmlResourcesToIndex
- ลบล้างค่านี้หากเนื้อหาของข้อมูลโค้ดมาจาก
preference xml
- แสดงค่ากําหนด XML เป็นรายการที่จะจัดทําดัชนี
ตัวอย่างทรัพยากร XML
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled) { ArrayList<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); SearchIndexableResource sir = new SearchIndexableResource(context); sir.xmlResId = R.xml.display_settings; result.add(sir); return result; }
getRawDataToIndex
- ลบล้างค่านี้หากเนื้อหาของตัวอย่างเพลงไม่ได้มาจาก
preference xml
- แสดงรายการข้อมูลดิบ (
SearchIndexableRaw
) ที่จะจัดทำดัชนี
ตัวอย่างข้อมูลดิบ
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { final List<SearchIndexableRaw> result = new ArrayList<>(); final Resources res = context.getResources(); // Add fragment title SearchIndexableRaw data = new SearchIndexableRaw(context); data.title = res.getString(R.string.wifi_settings); data.screenTitle = res.getString(R.string.wifi_settings); data.keywords = res.getString(R.string.keywords_wifi); data.key = DATA_KEY_REFERENCE; result.add(data); return result; }
getNonIndexableKeys
- หากข้อมูลโค้ดคือ
DashboardFragment
คุณแทบจะไม่จําเป็นต้องลบล้างค่านี้ - แสดงรายการคีย์ที่สอดคล้องกับผลลัพธ์ที่ไม่ควรแสดงสำหรับผู้ใช้ อุปกรณ์ การกำหนดค่า ฯลฯ ที่ระบุ คีย์ที่ระบุที่นี่ควรตรงกับช่อง KEY ใน
SearchIndexableResource
และSearchIndexableRaw
- ตัวอย่างเช่น การใช้งานอินเทอร์เน็ตไม่ควรแสดงสำหรับผู้ใช้ที่ไม่เคยมีซิมการ์ดในอุปกรณ์
ตัวอย่างคีย์ที่จัดทำดัชนีไม่ได้
public List<String> getNonIndexableKeys(Context context) { final List<String> keys = super.getNonIndexableKeys(context); if (!checkIntentAction(context, "android.settings.TERMS")) { keys.add(KEY_TERMS); } if (!checkIntentAction(context, "android.settings.LICENSE")) { keys.add(KEY_LICENSE); } if (!checkIntentAction(context, "android.settings.COPYRIGHT")) { keys.add(KEY_COPYRIGHT); } if (!checkIntentAction(context, "android.settings.WEBVIEW_LICENSE")) { keys.add(KEY_WEBVIEW_LICENSE); } return keys; }
getPreferenceControllers
แสดงรายการตัวควบคุมค่ากําหนดที่เชื่อมโยงกับข้อมูลโค้ดนี้ รายการนี้ใช้ในการสร้างผลการค้นหาในบรรทัด อัปเดตรายการที่จัดทำดัชนีไม่ได้ ฯลฯ
ดังนั้น ทุกอย่างที่คุณต้องการแสดงในการค้นหาต้องรวมอยู่ใน getXmlResourcesToIndex
หรือ getRawDataToIndex
เพิ่มคีย์เวิร์ดสำหรับการตั้งค่า
เพิ่มคีย์เวิร์ดที่สอดคล้องกับการตั้งค่าที่ผู้ใช้อาจใช้ค้นหาการตั้งค่านั้นเพื่อให้ค้นหาการตั้งค่าได้ง่าย
สิ่งที่ควรพิจารณาเมื่อเพิ่มคีย์เวิร์ด
- คีย์เวิร์ดคือรายการคำที่ผู้ใช้ไม่จำเป็นต้องเห็น แต่อาจเป็นส่วนหนึ่งของรูปแบบความคิดเกี่ยวกับวิธีการทำงานของการตั้งค่า
- ซึ่งเป็นคำที่ผู้ใช้อาจพิมพ์เพื่อไปยังการตั้งค่าของคุณ
- โดยอาจเป็นคำพ้องความหมายหรือใช้คำใดก็ได้ที่เชื่อมโยงกับการตั้งค่า
- เช่น ระบบอาจใช้ "ปิดเสียง" เพื่อค้นหาการตั้งค่าระดับเสียง
หลีกเลี่ยงการซ้ำ
หากคุณจะระงับหน้าการตั้งค่าโดยไม่มีเงื่อนไข ให้นำการจัดทําดัชนีหน้าเดิมออกเพื่อไม่ให้ผลการค้นหาซ้ำกัน
- ค้นหา
PreferenceFragment
ของหน้าเว็บที่คุณต้องการระงับ - นำ
SearchIndexProvider
ออก
การตรวจสอบความถูกต้อง
วิธีทดสอบความสามารถในการค้นหาของการตั้งค่าใหม่
- ติดตั้ง O เวอร์ชันล่าสุดในอุปกรณ์
- จัดทำดัชนีฐานข้อมูลอีกครั้งโดยเลือกตัวเลือกต่อไปนี้ การตั้งค่า > แอปและการแจ้งเตือน > ข้อมูลแอป > การตั้งค่า > พื้นที่เก็บข้อมูล > ล้างข้อมูล
- ตรวจสอบว่าการตั้งค่าเป้าหมายปรากฏในการค้นหา
การค้นหาคำนำหน้าของชื่อการตั้งค่าจะจับคู่กับการตั้งค่านั้น
ระบบอาจเรียกใช้การทดสอบ Robolectric เหล่านี้เพื่อตรวจสอบการติดตั้งใช้งานฟีเจอร์นี้
packages/apps/Settings/tests/robotests/src/com/android/settings/search
เป้าหมายการสร้างคือ RunSettingsRoboTests