সমস্ত অ্যাপ অবশ্যই ভয়েস অনুসন্ধান সমর্থন করবে৷ এই পৃষ্ঠাটি বর্ণনা করে যে কীভাবে ভয়েস ছাড়াই অনুসন্ধানের সূচনাকে সমর্থন করে এবং অনুসন্ধান ফলাফলের একটি তালিকা দেখানোর মাধ্যমে অনুসন্ধানের অভিজ্ঞতাকে আরও উন্নত করা যায় যাতে ব্যবহারকারীরা অন্য ফলাফল বাছাই করতে পারে৷ উদাহরণস্বরূপ, যদি প্রস্তাবিত ফলাফলটি সবচেয়ে প্রাসঙ্গিক না হয়।
আপনার মিডিয়া অ্যাপটি Android Auto এবং Android Automotive OS (AAOS)-এ প্রাসঙ্গিক অনুসন্ধানের ফলাফল প্রদান করতে পারে। এই ফলাফলগুলি প্রদর্শিত হয় যখন একজন ব্যবহারকারী একটি অনুসন্ধান ক্যোয়ারী শুরু করেন বা সাম্প্রতিক অনুসন্ধানের ফলাফলগুলি দেখেন।
এই অনুসন্ধান ফলাফলগুলি সক্ষম করতে এবং প্রদান করতে:
আপনার পরিষেবার
onGetRoot
পদ্ধতিতে অনুসন্ধান সমর্থন ঘোষণা করুন।ব্যবহারকারীর অনুসন্ধান শব্দগুলি পরিচালনা করতে আপনার মিডিয়া ব্রাউজার পরিষেবাতে
onSearch
পদ্ধতিটি ওভাররাইড করুন৷উন্নত ব্রাউজেবিলিটির জন্য শিরোনাম আইটেম ব্যবহার করে অনুসন্ধান ফলাফলগুলি সংগঠিত করুন।
আপনার অ্যাপটি প্রাসঙ্গিক অনুসন্ধান ফলাফল প্রদান করতে পারে যা একটি অনুসন্ধান ক্যোয়ারী শুরু হলে প্রদর্শিত হয়। Android Auto এবং AAOS এই ফলাফলগুলি অনুসন্ধান ক্যোয়ারী ইন্টারফেসের মাধ্যমে বা সামর্থ্যের মাধ্যমে দেখায় যা পূর্বে করা প্রশ্নগুলিতে পিভট করে৷ আরও জানতে, সমর্থন ভয়েস অ্যাকশন দেখুন।
চিত্র 1. ব্যবহারকারীর ভয়েস অনুসন্ধানের সাথে সম্পর্কিত মিডিয়া আইটেমগুলি দেখতে একটি অনুসন্ধান ফলাফল বিকল্পের সাথে প্লেব্যাক দৃশ্য।
আপনার অ্যাপ্লিকেশান অনুসন্ধান ফলাফল প্রদর্শন সমর্থন করে তা নির্দেশ করার জন্য, আপনার পরিষেবার onGetRoot
পদ্ধতি দ্বারা প্রত্যাবর্তিত অতিরিক্ত বান্ডিলে বুলিয়ান true
ম্যাপিং করে ধ্রুবক কী BROWSER_SERVICE_EXTRAS_KEY_SEARCH_SUPPORTED
অন্তর্ভুক্ত করুন।
কোটলিন
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)
}
জাভা
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
পদ্ধতিটি ওভাররাইড করুন৷ অ্যান্ড্রয়েড অটো এবং এএওএস এই পদ্ধতিতে ব্যবহারকারীর অনুসন্ধান শব্দগুলিকে ফরোয়ার্ড করে যখন কোনও ব্যবহারকারী একটি অনুসন্ধান ক্যোয়ারী ইন্টারফেস বা অনুসন্ধান ফলাফলের সামর্থ্যের জন্য আহ্বান করে।
অনুসন্ধান ফলাফলগুলিকে আরও ব্রাউজযোগ্য করতে, আপনি শিরোনাম আইটেমগুলি ব্যবহার করতে পারেন৷ উদাহরণস্বরূপ, যদি আপনার অ্যাপ সঙ্গীত বাজায়, আপনি অ্যালবাম, শিল্পী এবং গান দ্বারা অনুসন্ধান ফলাফলগুলি সংগঠিত করতে পারেন৷ এই কোড স্নিপেট onSearch
পদ্ধতির বাস্তবায়ন দেখায়:
কোটলিন
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.
}
জাভা
@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.
}