Android arama iletişim kutusunda son arama sorgularına dayalı arama önerileri sağlayabilirsiniz. Arama widget'ı. Örneğin, bir kullanıcı "yavru köpekler" sorgu öneri olarak görünür. aynı sorguyu tekrar yazın. Şekil 1'de son sorguyu içeren bir arama iletişim kutusu örneği gösterilmektedir öneriler.
Başlamadan önce temel aramalar için arama iletişim kutusunu veya bir arama widget'ı uygulayın tercih edebilirsiniz. Bunu nasıl yapacağınızı öğrenmek için bkz. Arama arayüzü oluşturun.
Temel bilgiler
Son sorgu önerileri kayıtlı aramalardır. Kullanıcı bir öneri seçtiğinde, arama yapılabilir
etkinlik
ACTION_SEARCH
intent
bunu aranabilir etkinliğinizin halihazırda işlediği arama sorgusu olarak ayarlar.
Son sorgularla ilgili öneriler sağlamak için şunları yapmanız gerekir:
- Aranabilir bir etkinlik uygulayın.
- Bir içerik sağlayıcı oluşturarak
SearchRecentSuggestionsProvider
. uygulama manifestinizde bunu beyan edin. - Aranabilir yapılandırmayı, sağlayan içerik sağlayıcısı hakkındaki bilgilerle değiştirin arama önerileri.
- Her arama yürütüldüğünde sorguları içerik sağlayıcınıza kaydedin.
Android sisteminin arama iletişim kutusunu görüntülediği gibi aşağıda arama önerileri de gösterilir iletişim kutusu veya arama widget'ı. Sistemin önerileri aldığı kaynağı siz sağlarsınız.
Sistem, etkinliğinizin aranabilir olduğunu saptadığında ve arama önerileri sunduğunda kullanıcı bir sorgu yazdığında şunlar olur:
- Sistem, kullanıcının yazmaya başladığı şey ne olursa olsun arama sorgusu metnini alır ve İçerik sağlayıcıya önerilerinizi içeren bir sorgu gerçekleştirir.
- İçerik sağlayıcınız şunu döndürür:
Tümünü işaret eden
Cursor
Arama sorgusu metniyle eşleşen öneriler sunar. - Sistem,
Cursor
tarafından sağlanan önerilerin listesini görüntüler.
Son sorgu önerileri görüntülendikten sonra, aşağıdakiler gerçekleşebilir:
- Kullanıcı başka bir anahtar girerse veya sorguyu herhangi bir şekilde değiştirirse önceki adımlar şunlardır: güncellenir ve öneri listesi güncellenir.
- Kullanıcı aramayı yürütürse öneriler yoksayılır ve arama,
normal
ACTION_SEARCH
niyetini kullanarak aranabilir etkinliğiniz. - Kullanıcı bir öneri seçerse hesabınıza
ACTION_SEARCH
niyeti iletilir sorgu olarak önerilen metni kullanarak arama yapılabilir etkinlik oluşturabilirsiniz.
İçerik sağlayıcınız için genişlettiğiniz SearchRecentSuggestionsProvider
sınıfı
önceki adımlarda açıklanan işlemleri otomatik olarak yaptığından, yazılacak çok az kod olur.
İçerik sağlayıcı oluşturun
Son sorgu önerileri için ihtiyacınız olan içerik sağlayıcı,
SearchRecentSuggestionsProvider
Bu sınıf sizin için her şeyi yapıyor. Yapmanız gerekenler
bir kod satırı yürüten sınıf kurucusu yazın.
Örneğin, burada son sorgu için bir içerik sağlayıcının eksiksiz uygulamasını öneriler:
Kotlin
class MySuggestionProvider : SearchRecentSuggestionsProvider() { init { setupSuggestions(AUTHORITY, MODE) } companion object { const val AUTHORITY = "com.example.MySuggestionProvider" const val MODE: Int = SearchRecentSuggestionsProvider.DATABASE_MODE_QUERIES } }
Java
public class MySuggestionProvider extends SearchRecentSuggestionsProvider { public final static String AUTHORITY = "com.example.MySuggestionProvider"; public final static int MODE = DATABASE_MODE_QUERIES; public MySuggestionProvider() { setupSuggestions(AUTHORITY, MODE); } }
Hedef
setupSuggestions()
.
arama yetkilisinin adını ve bir veritabanı modu iletir. Arama yetkilisi
dizesidir, ancak en iyi uygulama içerik sağlayıcınız için tam olarak uygun bir ad kullanmaktır:
paket adı ve ardından sağlayıcının sınıf adı. Örneğin,
"com.example.MySuggestionProvider"
Veritabanı modu
DATABASE_MODE_QUERIES
.
ve isteğe bağlı olarak
DATABASE_MODE_2LINES
,
Bu, öneriler tablosuna, her bir sütun için ikinci bir metin satırı sağlayabilmeniz için bir sütun ekler
öneririz. Her öneride iki satır sağlamak istiyorsanız aşağıdaki örneğe bakın:
Kotlin
const val MODE: Int = DATABASE_MODE_QUERIES or DATABASE_MODE_2LINES
Java
public final static int MODE = DATABASE_MODE_QUERIES | DATABASE_MODE_2LINES;
Uygulama manifestinizdeki içerik sağlayıcıyı,
SearchRecentSuggestionsProvider
sınıfınızda ve aranabilir yapılandırmada kullanın. Örneğin,
örnek:
<application> <provider android:name=".MySuggestionProvider" android:authorities="com.example.MySuggestionProvider" /> ... </application>
Aranabilir yapılandırmayı değiştirme
Sistemi, öneri sağlayıcınızı kullanacak şekilde yapılandırmak için
android:searchSuggestAuthority
android:searchSuggestSelection
özellikleri, aranabilir yapılandırma dosyanızdaki <searchable>
öğesine eklenir. Örneğin,
örnek:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" android:searchSuggestAuthority="com.example.MySuggestionProvider" android:searchSuggestSelection=" ?" > </searchable>
android:searchSuggestAuthority
değeri,
içerik sağlayıcıda kullanılan yetkili kurumla tam olarak eşleşen bir içerik sağlayıcı, örneğin
"com.example.MySuggestionProvider"
olarak tanımlanmıştır.
android:searchSuggestSelection
değerinin önünde tek bir soru işareti olmalıdır
bir alan tarafından: " ?"
. Bu, SQLite seçimi bağımsız değişkeni için bir yer tutucudur ve
kullanıcının girdiği sorgu metniyle otomatik olarak değiştirilir.
Sorguları kaydet
Son sorgulardan oluşan koleksiyonunuzu doldurmak için, arama yapılabilir
etkinliğiniz SearchRecentSuggestionsProvider
cihazınızda. Bunu yapmak için
SearchRecentSuggestions
.
arayın
saveRecentQuery()
her sorgu yapıldığında kullanılabilir. Örneğin, sorguyu nasıl kaydedebileceğiniz aşağıda
aktiviteleri sırasında
onCreate()
.
yöntem:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) if (Intent.ACTION_SEARCH == intent.action) { intent.getStringExtra(SearchManager.QUERY)?.also { query -> SearchRecentSuggestions(this, MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE) .saveRecentQuery(query, null) } } }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE); suggestions.saveRecentQuery(query, null); } }
SearchRecentSuggestionsProvider
oluşturucusu,
tarafından beyan edilen yetki ve veritabanı modunun aynısı.
saveRecentQuery()
yöntemi, arama sorgusu dizesini ilk parametre olarak alır
ve isteğe bağlı olarak önerinin ikinci satırı veya boş değer olarak eklenecek ikinci bir dize. İkinci
parametresi yalnızca
DATABASE_MODE_2LINES
İki satırlı modu etkinleştirirseniz sorgu metni
ikinci satıra yönlendirilirsiniz.
Öneri verilerini temizle
Kullanıcının gizliliğini korumak amacıyla her zaman kullanıcının son sorguyu temizlemesi için bir yöntem sağlayın
öneriler. Sorgu geçmişini temizlemek için şu numarayı arayın:
clearHistory()
Örnek:
Kotlin
SearchRecentSuggestions(this, HelloSuggestionsProvider.AUTHORITY, HelloSuggestionsProvider.MODE) .clearHistory()
Java
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, HelloSuggestionProvider.AUTHORITY, HelloSuggestionProvider.MODE); suggestions.clearHistory();
Bu işlemi, seçtiğiniz "Arama Geçmişini Temizle" seçeneğiyle yürütün menü öğesini, tercih öğesini veya düğmeyi tıklayın. Kullanıcının arama geçmişini silmek istediğini doğrulamak için bir onay iletişim kutusu sağlayın.