Göz atılabilir arama sonuçlarını görüntüleyin

Tüm uygulamalar sesli aramaları desteklemelidir. Bu sayfada, ses olmadan arama başlatmayı destekleyerek ve kullanıcıların başka bir sonuç seçebilmesi için arama sonuçlarının listesini göstererek arama deneyimini daha da iyileştirme yöntemleri açıklanmaktadır. Örneğin, önerilen sonuç en alakalı sonuç değilse.

Medya uygulamanız, Android Auto ve Android Automotive OS'de (AAOS) bağlama göre arama sonuçları sağlayabilir. Bu sonuçlar, kullanıcı bir arama sorgusu başlattığında veya en son aramanın sonuçlarını görüntülediğinde gösterilir.

Bu arama sonuçlarını etkinleştirmek ve sağlamak için:

  • Hizmetinizin onGetRoot yönteminde arama desteğini bildirin.

  • Kullanıcı arama terimlerini işlemek için medya tarayıcı hizmetinizdeki onSearch yöntemini geçersiz kılın.

  • Gelişmiş göz atma deneyimi için arama sonuçlarını başlık öğelerini kullanarak düzenleyin.

Uygulamanız, bir arama sorgusu başlatıldığında görünen bağlamsal arama sonuçları sağlayabilir. Android Auto ve AAOS, bu sonuçları arama sorgusu arayüzleri veya daha önce yapılan sorgulara dayalı fırsatlar aracılığıyla gösterir. Daha fazla bilgi edinmek için Sesli işlemleri destekleme başlıklı makaleyi inceleyin.

Kullanıcının sesli aramasıyla ilgili medya öğelerini görüntülemek için **Arama sonuçları** seçeneğinin bulunduğu oynatma görünümü

1.şekil Kullanıcının sesli aramasıyla ilgili medya öğelerini görüntülemek için Arama sonuçları seçeneğinin bulunduğu oynatma görünümü.

Uygulamanızın arama sonuçlarının gösterilmesini desteklediğini belirtmek için hizmetinizin onGetRoot yöntemi tarafından döndürülen ekler paketine BROWSER_SERVICE_EXTRAS_KEY_SEARCH_SUPPORTED sabit anahtarını ekleyin. Bu anahtar, Boolean true ile eşlenir.

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);
}

Arama sonuçları sağlamak için medya tarayıcı hizmetinizdeki onSearch yöntemini geçersiz kılın. Android Auto ve AAOS, kullanıcı bir arama sorgusu arayüzünü veya arama sonuçları işlevini çağırdığında kullanıcının arama terimlerini bu yönteme yönlendirir.

Arama sonuçlarına daha kolay göz atmak için başlık öğelerini kullanabilirsiniz. Örneğin, uygulamanızda müzik çalınıyorsa arama sonuçlarını albüme, sanatçıya ve şarkıya göre düzenleyebilirsiniz. Bu kod snippet'inde onSearch yönteminin bir uygulaması gösterilmektedir:

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.
}