แสดงผลการค้นหาที่เรียกดูได้

แอปทั้งหมดต้องรองรับการค้นหาด้วยเสียง หน้านี้อธิบายวิธีปรับปรุงประสบการณ์การค้นหาเพิ่มเติมโดยรองรับการเริ่มการค้นหาโดยไม่ต้องใช้เสียงและโดยการแสดงรายการผลการค้นหาเพื่อให้ผู้ใช้เลือกผลการค้นหาอื่นได้ เช่น หากผลการค้นหาที่แนะนำไม่เกี่ยวข้องมากที่สุด

แอปสื่อของคุณสามารถแสดงผลการค้นหาตามบริบทใน 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&lt;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&lt;MediaItem> resultsToFill) {
    // Implement this method.
}