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