แอปทั้งหมดต้องรองรับการค้นหาด้วยเสียง หน้านี้อธิบายวิธีปรับปรุงประสบการณ์การค้นหาเพิ่มเติมโดยรองรับการเริ่มการค้นหาโดยไม่ต้องใช้เสียงและโดยการแสดงรายการผลการค้นหาเพื่อให้ผู้ใช้เลือกผลการค้นหาอื่นได้ เช่น หากผลการค้นหาที่แนะนำไม่เกี่ยวข้องมากที่สุด
แอปสื่อของคุณสามารถแสดงผลการค้นหาตามบริบทใน Android Auto และ Android Automotive OS (AAOS) ผลการค้นหาเหล่านี้จะปรากฏเมื่อผู้ใช้เริ่มคําค้นหา หรือดูผลการค้นหาล่าสุด
วิธีเปิดใช้และแสดงผลการค้นหาเหล่านี้
ประกาศการรองรับการค้นหาในเมธอด
onGetRoot
ของบริการลบล้างเมธอด
onSearch
ในบริการเบราว์เซอร์สื่อเพื่อจัดการคำค้นหาของผู้ใช้จัดระเบียบผลการค้นหาโดยใช้รายการชื่อเพื่อปรับปรุงความสามารถในการเรียกดู
แอปของคุณสามารถแสดงผลการค้นหาตามบริบทซึ่งจะปรากฏเมื่อเริ่มคำค้นหา Android Auto และ AAOS จะแสดงผลการค้นหาเหล่านี้ผ่านอินเทอร์เฟซคำค้นหา หรือผ่านความสามารถที่อิงตามคำค้นหาที่ทำไว้ก่อนหน้านี้ ดูข้อมูลเพิ่มเติมได้ที่รองรับการสั่งงานด้วยเสียง
รูปที่ 1 มุมมองการเล่นที่มีตัวเลือกผลการค้นหาเพื่อดูรายการสื่อ ที่เกี่ยวข้องกับการค้นหาด้วยเสียงของผู้ใช้
หากต้องการระบุว่าแอปของคุณรองรับการแสดงผลการค้นหา ให้ใส่คีย์ค่าคงที่ BROWSER_SERVICE_EXTRAS_KEY_SEARCH_SUPPORTED
ในกลุ่มข้อมูลพิเศษ
ที่ส่งคืนโดยเมธอด onGetRoot
ของบริการ โดยแมปกับ
บูลีน true
Kotlin
import androidx.media.utils.MediaConstants
@Nullable
override fun onGetRoot(
@NonNull clientPackageName: String,
clientUid: Int,
@Nullable rootHints: Bundle
): BrowserRoot {
val extras = Bundle()
extras.putBoolean(
MediaConstants.BROWSER_SERVICE_EXTRAS_KEY_SEARCH_SUPPORTED, true)
return BrowserRoot(ROOT_ID, extras)
}
Java
import androidx.media.utils.MediaConstants;
@Nullable
@Override
public BrowserRoot onGetRoot(
@NonNull String clientPackageName,
int clientUid,
@Nullable Bundle rootHints) {
Bundle extras = new Bundle();
extras.putBoolean(
MediaConstants.BROWSER_SERVICE_EXTRAS_KEY_SEARCH_SUPPORTED, true);
return new BrowserRoot(ROOT_ID, extras);
}
หากต้องการแสดงผลการค้นหา ให้ลบล้างเมธอด onSearch
ในบริการเบราว์เซอร์สื่อ
Android Auto และ AAOS จะส่งต่อคำค้นหาของผู้ใช้ไปยังเมธอดนี้เมื่อผู้ใช้เรียกใช้อินเทอร์เฟซคำค้นหาหรือผลการค้นหา
คุณใช้รายการชื่อเพื่อทำให้ผลการค้นหาเรียกดูได้ง่ายขึ้น เช่น หากแอปของคุณเล่นเพลง คุณสามารถจัดระเบียบผลการค้นหาตามอัลบั้ม ศิลปิน และเพลงได้ ข้อมูลโค้ดนี้แสดงการใช้งานเมธอด onSearch
Kotlin
fun onSearch(query: String, extras: Bundle) {
// Detach from results to unblock the caller (if a search is expensive).
result.detach()
object:AsyncTask() {
internal var searchResponse:ArrayList
internal var succeeded = false
protected fun doInBackground(vararg params:Void):Void {
searchResponse = ArrayList()
if (doSearch(query, extras, searchResponse))
{
succeeded = true
}
return null
}
protected fun onPostExecute(param:Void) {
if (succeeded)
{
// Sending an empty List informs the caller that there were no results.
result.sendResult(searchResponse)
}
else
{
// This invokes onError() on the search callback.
result.sendResult(null)
}
return null
}
}.execute()
}
// Populates resultsToFill with search results. Returns true on success or false on error.
private fun doSearch(
query: String,
extras: Bundle,
resultsToFill: ArrayList
): Boolean {
// Implement this method.
}
Java
@Override
public void onSearch(final String query, final Bundle extras,
Result<List<MediaItem>> result) {
// Detach from results to unblock the caller (if a search is expensive).
result.detach();
new AsyncTask<Void, Void, Void>() {
List>MediaItem> searchResponse;
boolean succeeded = false;
@Override
protected Void doInBackground(Void... params) {
searchResponse = new ArrayList<MediaItem>();
if (doSearch(query, extras, searchResponse)) {
succeeded = true;
}
return null;
}
@Override
protected void onPostExecute(Void param) {
if (succeeded) {
// Sending an empty List informs the caller that there were no results.
result.sendResult(searchResponse);
} else {
// This invokes onError() on the search callback.
result.sendResult(null);
}
}
}.execute()
}
/** Populates resultsToFill with search results. Returns true on success or false on error. */
private boolean doSearch(String query, Bundle extras, ArrayList<MediaItem> resultsToFill) {
// Implement this method.
}