درخواست پیشنهاد جستجو، تولیدکننده نمای رابط کاربری
برای دریافت نمای رابط کاربری پیشنهادات جستجو، ابتدا باید مولد آن را با مراحل زیر دریافت کنید:
- بگذارید کلاس
Activityهدف شما رابطGetSearchSuggestionsViewGeneratorCallbackرا پیادهسازی کند یا از کلاس داخلی ناشناس استفاده کند. - متدهای
onSuccess(SearchSuggestionsViewGenerator)وonError(String)از رابطGetSearchSuggestionsViewGeneratorCallbackرا بازنویسی کنید. - نمونه کلاس
GetSearchSuggestionsViewOptionsرا با لیستی از زمینههای جستجو بسازید. (اختیاری) این شیء همچنین یک شیءSearchSuggestionsViewOptionsمیگیرد که گزینههایی برای سفارشیسازی ظاهر رابط کاربری پیشنهادات جستجو ارائه میدهد. - تابع
getSearchSuggestionsView(GetSearchSuggestionsViewOptions, GetSearchSuggestionsViewGeneratorCallback)ازSearchInAppsServiceرا فراخوانی کنید. - بعد از اینکه مولد رابط کاربری را دریافت کردید، میتوانید آن را در یک ViewModel ذخیره کنید تا وقتی که اکتیویتی نیاز به بازسازی دارد (مثلاً وقتی پیکربندی در حین اجرای برنامه تغییر کرده است) نیازی به درخواست مجدد مولد نداشته باشید.
کد نمونه
جاوا
package ...;
...
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewGeneratorCallback;
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewOptions;
import com.google.android.libraries.searchinapps.SearchInAppsService;
import com.google.android.libraries.searchinapps.SearchSuggestionsViewGenerator;
import java.util.Arrays;
import java.util.List;
...
public class MainActivity extends AppCompatActivity implements GetSearchSuggestionsViewGeneratorCallback {
private SearchInAppsService service;
@Override
public void onSuccess(SearchSuggestionsViewGenerator generator) {
...
}
@Override
public void onError(String errorMessage) {
...
}
@Override
protected void onCreate(Bundle savedInstanceState) {
...
service = SearchInAppsService.create(this);
// Right now only the first element of this list will be used.
List<String> searchContext = Arrays.asList(new String[]{"This is a test query, for example."});
// Uses the default SearchSuggestionsViewOptions.
service.getSearchSuggestionsView(
new GetSearchSuggestionsViewOptions().setTextContext(searchContext),this);
...
}
@Override
public void onDestroy() {
service.shutDown();
super.onDestroy();
}
}
جتپک آهنگسازی
package ...
...
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.platform.LocalContext
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewGeneratorCallback
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewOptions
import com.google.android.libraries.searchinapps.SearchInAppsService
import com.google.android.libraries.searchinapps.SearchSuggestionsViewGenerator
...
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SearchSuggestionsUI()
}
}
@Composable
fun SearchSuggestionsUI() {
...
var service by remember {
mutableStateOf<SearchInAppsService?>(
SearchInAppsService.create(LocalContext.current))
}
DisposableEffect(Unit) { onDispose { service?.shutDown() } }
val callback =
object : GetSearchSuggestionsViewGeneratorCallback {
override fun onSuccess(generator: SearchSuggestionsViewGenerator) {
...
}
override fun onError(errorMessage: String) {
...
}
}
var searchContexts: List<String> = listOf<String>("Query")
// Uses the default SearchSuggestionsViewOptions.
var options: GetSearchSuggestionsViewOptions =
GetSearchSuggestionsViewOptions()
.setTextContext(searchContexts)
service?.getSearchSuggestionsView(options, callback)
...
}
}
درخواست پیشنهادات جستجوی مبتنی بر مکان
نقطه ورودی getSearchSuggestionsView همچنین از پیشنهادهای جستجوی مبتنی بر مکان پشتیبانی میکند. با دنبال کردن این مراحل، یک شیء GetSearchSuggestionsViewOptions با لیستی از اشیاء LocationContext بسازید. سپس، با دنبال کردن مراحل بخش قبلی، GetSearchSuggestionsViewOptions را به تابع getSearchSuggestionsView منتقل کنید.
- (الزامی) شیء
LocationContextرا با شیءGeographicalRestrictionsبسازید. شیءGeographicalRestrictionsیک شیءCircularAreaمیگیرد که شامل طول و عرض جغرافیایی مرکز ناحیه و شعاع ناحیه است. - (اختیاری) شیء
TimeRestrictionsرا با شیءTimeSegmentبسازید. شیءTimeSegmentرشتهای را دریافت میکند که نشاندهندهی بخش زمانی در قالب ISO 8601 است. - (اختیاری) شیء
GeoTypeRestrictionsرا با انواع جغرافیایی درخواستی بسازید. انواع ارائه شده برای تنظیم رتبهبندی و فیلتر کردن نتایج برگردانده شده توسط سرویس استفاده میشوند. مقادیر پشتیبانی شده عبارتند از: "رستوران"، "کافه"، "بار"، "پارک"، "باغ وحش"، "موزه"، "جاذبه"، "خودپرداز"، "بانک"، "سالن مو"، "آژانس املاک"، "مکان اشتراک دوچرخه"، "آژانس اجاره خودرو"، "مرکز خرید"، "فروشگاه مواد غذایی" و "هتل".
کد نمونه
جاوا
package ...;
...
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewGeneratorCallback;
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewOptions;
import com.google.android.libraries.searchinapps.LocationContext;
import com.google.android.libraries.searchinapps.LocationContext.CircularArea;
import com.google.android.libraries.searchinapps.LocationContext.GeoTypeRestrictions;
import com.google.android.libraries.searchinapps.LocationContext.GeographicalRestrictions;
import com.google.android.libraries.searchinapps.LocationContext.LatLng;
import com.google.android.libraries.searchinapps.LocationContext.TimeRestrictions;
import com.google.android.libraries.searchinapps.LocationContext.TimeSegment;
import com.google.android.libraries.searchinapps.SearchInAppsService;
import com.google.android.libraries.searchinapps.SearchSuggestionsViewGenerator;
...
LocationContext locationContext = new LocationContext(
new GeographicalRestrictions(
new CircularArea(
new LatLng(
40.7414728,
-74.0059622),
1000)))
// Optional. If set, the returned suggestions are categories of which
// there are several businesses in the requested area that are open at
// the given time.
.setTimeRestrictions(
new TimeRestrictions(
new TimeSegment("2024-05-18T19:20:30.45+01:00")))
// Optional. If set, the returned suggestions are subset of the
// requested categories.
.setGeoTypeRestrictions(
new GeoTypeRestrictions("restaurant", "parks"));
// Uses the default SearchSuggestionsViewOptions.
service = SearchInAppsService.create(this);
// Uses the default SearchSuggestionsViewOptions.
service.getSearchSuggestionsView(
new GetSearchSuggestionsViewOptions().setLocationContext(Arrays.asList(locationContext)), this);
جتپک آهنگسازی
package ...
...
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewGeneratorCallback
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewOptions
import com.google.android.libraries.searchinapps.LocationContext
import com.google.android.libraries.searchinapps.LocationContext.CircularArea
import com.google.android.libraries.searchinapps.LocationContext.GeoTypeRestrictions
import com.google.android.libraries.searchinapps.LocationContext.GeographicalRestrictions
import com.google.android.libraries.searchinapps.LocationContext.LatLng
import com.google.android.libraries.searchinapps.LocationContext.TimeRestrictions
import com.google.android.libraries.searchinapps.LocationContext.TimeSegment
import com.google.android.libraries.searchinapps.SearchInAppsService
import com.google.android.libraries.searchinapps.SearchSuggestionsViewGenerator
...
var locationContext: LocationContext = LocationContext(
GeographicalRestrictions(
CircularArea(
LatLng(40.7414728, -74.0059622),
1000)))
// Optional. If set, there are several businesses in the requested area that
// are open at the given time.
.setTimeRestrictions(
TimeRestrictions(
TimeSegment("2024-05-18T19:20:30.45+01:00")))
// Optional. If set, the returned suggestions are subset of the requested
// categories.
.setGeoTypeRestrictions(
GeoTypeRestrictions("restaurant", "parks"))
// Uses the default SearchSuggestionsViewOptions.
var options: GetSearchSuggestionsViewOptions =
GetSearchSuggestionsViewOptions()
.setLocationContext(listOf<LocationContext>(locationContext))
service.getSearchSuggestionsView(options, callback)
...
نمای رابط کاربری، پیشنهادات جستجو را اضافه کنید
برای getSearchSuggestionsView ، خروجی نهایی یک شیء SearchSuggestionsViewGenerator است. میتوانید از تابع populateView(Context) این شیء برای تولید نمای رابط کاربری و updateView(View) برای بهروزرسانی نمای موجود استفاده کنید (بهویژه برای برنامههای Jetpack Compose).
برای برنامههای Jetpack Compose، باید از AndroidView برای استفاده از نمای کلاسیک تولید شده استفاده کنید.
کد نمونه
جاوا
package ...;
...
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewGeneratorCallback;
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewOptions;
import com.google.android.libraries.searchinapps.SearchInAppsService;
import com.google.android.libraries.searchinapps.SearchSuggestionsViewGenerator;
import java.util.Arrays;
import java.util.List;
...
public class MainActivity extends AppCompatActivity implements GetSearchSuggestionsViewGeneratorCallback {
private SearchInAppsService service;
@Override
public void onSuccess(SearchSuggestionsViewGenerator generator) {
ViewGroup container = findViewById(R.id.[container_id]);
container.removeAllViews();
container.addView(generator.populateView(this));
}
@Override
public void onError(String errorMessage) {
...
}
@Override
protected void onCreate(Bundle savedInstanceState) {
...
service = SearchInAppsService.create(this);
List<String> searchContext = Arrays.asList(new String[]{"Query"});
// Uses the default SearchSuggestionsViewOptions.
service.getSearchSuggestionsView(
new GetSearchSuggestionsViewOptions().setTextContext(searchContext),this);
...
}
@Override
public void onDestroy() {
service.shutDown();
super.onDestroy();
}
}
جتپک آهنگسازی
package ...
...
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.viewinterop.AndroidView
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewGeneratorCallback
import com.google.android.libraries.searchinapps.GetSearchSuggestionsViewOptions
import com.google.android.libraries.searchinapps.SearchInAppsService
import com.google.android.libraries.searchinapps.SearchSuggestionsViewGenerator
...
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent { SearchSuggestionsUI() }
}
@Composable
fun SearchSuggestionsUI() {
...
var service by remember {
mutableStateOf<SearchInAppsService?>(
SearchInAppsService.create(LocalContext.current))
}
var viewGenerator = mutableStateOf<SearchSuggestionsViewGenerator?>(null)
DisposableEffect(Unit) { onDispose { service?.shutDown() } }
val callback =
object : GetSearchSuggestionsViewGeneratorCallback {
override fun onSuccess(generator: SearchSuggestionsViewGenerator) {
viewGenerator.value = generator
}
override fun onError(errorMessage: String) {}
}
var searchContexts: List<String> = listOf<String>("Query")
// Uses the default SearchSuggestionsViewOptions.
var options: GetSearchSuggestionsViewOptions =
GetSearchSuggestionsViewOptions().setTextContext(searchContexts)
service?.getSearchSuggestionsView(options, callback)
ChipGroupUI(viewGenerator)
...
}
@Composable
fun ChipGroupUI(viewGenerator: MutableState<SearchSuggestionsViewGenerator?>) {
viewGenerator.value?.let { viewGenerator ->
var context = LocalContext.current
AndroidView(
factory = { context -> viewGenerator.populateView(context) },
update = { view -> viewGenerator.updateView(view, context) },
)
}
}
}