Android arama iletişim kutusunu veya arama widget'ını kullanırken uygulamanızdaki verilerden oluşturulan özel arama önerileri sağlayabilirsiniz. Örneğin, uygulamanız bir sözlükse kullanıcı sorgusunu girmeyi tamamlamadan önce arama alanına girilen metinle eşleşen sözlükteki kelimeleri önerebilirsiniz. Bu öneriler, kullanıcının ne istediğini etkili bir şekilde tahmin edebildikleri ve buna anında erişim sağlayabildikleri için değerlidir. Şekil 1'de, özel öneriler içeren bir arama iletişim kutusu örneği gösterilmektedir.
Özel öneriler sağladıktan sonra bunları sistem genelinde Hızlı Arama Kutusu'nda da kullanılabilir hale getirebilirsiniz. Böylece, uygulamanızın dışından içeriğinize erişim sağlanır.
Özel öneriler eklemeden önce uygulamanızdaki aramalar için Android arama iletişim kutusunu veya bir arama widget'ı uygulayın. Arama arayüzü oluşturma ve İçerik sağlayıcılar başlıklı makalelere bakın.
Temel özellikler
Şekil 1. Özel arama önerileri içeren bir arama iletişim kutusunun ekran görüntüsü.
Kullanıcı özel bir öneri seçtiğinde sistem, aranabilir etkinliğinize bir Intent gönderir. Bir niyet gönderen normal arama sorgusunun aksine, özel önerilerinizi ACTION_SEARCH
işlemini kullanacak şekilde tanımlayabilir veya ACTION_VIEW ya da başka bir niyet işlemi kullanabilirsiniz. Ayrıca, seçilen öneriyle alakalı veriler de ekleyebilirsiniz. Sözlük örneğinde, kullanıcı bir öneri seçtiğinde uygulama, sözlükte eşleşme aramak yerine kelimenin tanımını hemen açabilir.
Özel öneriler sunmak için aşağıdaki adımları uygulayın:
- Arama arayüzü oluşturma bölümünde açıklandığı gibi temel bir aranabilir etkinlik uygulayın.
- Özel öneriler sunan içerik sağlayıcı hakkında bilgilerle aranabilir yapılandırmayı değiştirin.
- Önerileriniz için
SQLiteDatabasegibi bir tablo oluşturun ve tabloyu gerekli sütunlarla biçimlendirin. - Öneri tablonuza erişimi olan bir içerik sağlayıcı oluşturun ve sağlayıcıyı manifest dosyanızda bildirin.
- Kullanıcı bir öneri seçtiğinde gönderilecek
Intenttürünü (özel işlem ve özel veriler dahil) bildirin.
Android sistemi, arama iletişim kutusunu gösterdiği gibi arama önerilerinizi de gösterir. Sistemin önerilerinizi alabileceği bir içerik sağlayıcıya ihtiyacınız vardır. İçerik sağlayıcı oluşturmayı öğrenmek için İçerik sağlayıcılar başlıklı makaleyi okuyun.
Sistem, etkinliğinizin aranabilir olduğunu belirleyip arama önerileri sunduğunda, kullanıcı bir sorgu girdiğinde aşağıdaki prosedür uygulanır:
- Sistem, arama sorgusu metnini (yani şu ana kadar girilenleri) alır ve önerilerinizi yöneten içerik sağlayıcınıza bir sorgu gönderir.
- İçerik sağlayıcınız, arama sorgusu metniyle alakalı tüm önerilere işaret eden bir
Cursordöndürür. - Sistem,
Cursortarafından sağlanan öneri listesini gösterir.
Özel öneriler gösterildikten sonra aşağıdakiler olabilir:
- Kullanıcı başka bir harf girerse veya sorguyu herhangi bir şekilde değiştirirse önceki adımlar tekrarlanır ve öneri listesi buna göre güncellenir.
- Kullanıcı aramayı gerçekleştirirse öneriler yoksayılır ve arama, normal
ACTION_SEARCHamaç kullanılarak aranabilir etkinliğinize iletilir. - Kullanıcı bir öneri seçerse aranabilir etkinliğinize bir amaç gönderilir. Bu amaç, uygulamanızın önerilen içeriği açabilmesi için özel bir işlem ve özel veriler içerir.
Aranabilir yapılandırmayı değiştirme
Özel öneri desteği eklemek için aşağıdaki örnekte gösterildiği gibi, aranabilir yapılandırma dosyanızdaki <searchable> öğesine android:searchSuggestAuthority özelliğini ekleyin:
<?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.MyCustomSuggestionProvider"> </searchable>
Her öneriye eklediğiniz amaç türüne ve içerik sağlayıcınıza yönelik sorguları nasıl biçimlendirmek istediğinize bağlı olarak ek özelliklere ihtiyacınız olabilir. Diğer isteğe bağlı özellikler aşağıdaki bölümlerde ele alınmaktadır.
İçerik sağlayıcı oluşturma
Özel öneriler için içerik sağlayıcı oluşturmak üzere öncelikle İçerik sağlayıcılar başlıklı makaleyi inceleyerek içerik sağlayıcı oluşturmayı öğrenin. Özel öneriler için içerik sağlayıcı, diğer içerik sağlayıcılara benzer. Ancak, sağladığınız her öneri için Cursor dosyasındaki ilgili satırda, sistemin anlayıp önerileri biçimlendirmek için kullandığı belirli sütunlar bulunmalıdır.
Kullanıcı arama iletişim kutusuna veya arama widget'ına metin girdiğinde sistem, her harf girildiğinde query() çağırarak içerik sağlayıcınızdan öneri ister. query() uygulamanızda,
içerik sağlayıcınız öneri verilerinizde arama yapmalı ve iyi öneriler olduğuna karar verdiği satırları işaret eden bir Cursor döndürmelidir.
Özel öneriler için içerik sağlayıcı oluşturmayla ilgili ayrıntılar aşağıdaki iki bölümde ele alınmaktadır:
- Öneri sorgusunu işleme
- Sistemin, içerik sağlayıcınıza nasıl istek gönderdiği ve bu isteklerin nasıl işleneceği.
- Öneri tablosu oluşturma
- Sistemin her sorguyla birlikte döndürülmesini beklediği sütunları tanımlama.
Cursor
Öneri sorgusunu işleme
Sistem, içerik sağlayıcınızdan öneri istediğinde içerik sağlayıcınızın query() yöntemini çağırır. Öneri verilerinizde arama yapmak ve alakalı olduğunu düşündüğünüz önerilere Cursor işaretini döndürmek için bu yöntemi uygulayın.
Aşağıda, sistemin query() yönteminize ilettiği parametrelerin sırayla listelendiği bir özet verilmiştir:
uriHer zaman bir içerik
Uri, aşağıdaki gibi biçimlendirilmelidir:content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERYVarsayılan davranış, sistemin bu URI'yi iletmesi ve sorgu metnini eklemesidir:
content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY/puppiesSondaki sorgu metni, URI kodlama kuralları kullanılarak kodlanır. Bu nedenle, arama yapmadan önce kodu çözmeniz gerekebilir.
optional.suggest.pathkısmı, yalnızca aranabilir yapılandırma dosyanızdaandroid:searchSuggestPathözelliğiyle böyle bir yol ayarlarsanız URI'ye dahil edilir. Yalnızca birden fazla aranabilir etkinlik için aynı içerik sağlayıcıyı kullanıyorsanız gereklidir. Bu durumda, öneri sorgusunun kaynağını netleştirin.projection- Her zaman null.
selection- Aranabilir yapılandırma dosyanızın
android:searchSuggestSelectionözelliğinde sağlanan değer veyaandroid:searchSuggestSelectionözelliğini tanımlamazsanız null. Bu konu, aşağıdaki bölümde daha ayrıntılı olarak ele alınmıştır.selectionArgs- Arama sorgusunu, dizinin ilk ve tek öğesi olarak içerir. Bu, aranabilir yapılandırmanızda
android:searchSuggestSelectionözelliğini bildirmeniz durumunda geçerlidir.android:searchSuggestSelectiondeğerini belirtmezseniz bu parametre null olur. Bu konu, sonraki bölümde daha ayrıntılı olarak ele alınmaktadır.sortOrder- Her zaman null.
Sistem, arama sorgusu metnini size iki şekilde gönderebilir. Varsayılan yöntem, uri parametresinde iletilen içerik URI'sinin son yolu olarak sorgu metninin eklenmesidir. Ancak, aranabilir yapılandırmanızın android:searchSuggestSelection özelliğine bir seçim değeri eklerseniz sorgu metni bunun yerine selectionArgs dize dizisinin ilk öğesi olarak iletilir. Bu iki seçenek aşağıda açıklanmıştır.
Uri'deki sorguyu alma
Sorgu, varsayılan olarak uri parametresinin son segmenti olarak eklenir. Bu parametre, Uri nesnesidir. Bu durumda sorgu metnini almak için aşağıdaki örnekte gösterildiği gibi getLastPathSegment() kullanın:
Kotlin
val query: String = uri.lastPathSegment.toLowerCase()
Java
String query = uri.getLastPathSegment().toLowerCase();
Bu, Uri öğesinin son segmentini (kullanıcının girdiği sorgu metni) döndürür.
Sorguyu seçim bağımsız değişkenlerinde alma
URI kullanmak yerine, query() yönteminizin aramayı gerçekleştirmek için ihtiyaç duyduğu her şeyi alması daha mantıklı olabilir ve selection ile selectionArgs parametrelerinin uygun değerleri taşımasını isteyebilirsiniz. Bu durumda, SQLite seçim dizenizle birlikte android:searchSuggestSelection özelliğini aranabilir yapılandırmanıza ekleyin. Seçim dizesine, gerçek arama sorgusu için yer tutucu olarak bir soru işareti (?) ekleyin. Sistem, query() işlevini, seçim dizesini selection parametresi olarak ve arama sorgusunu selectionArgs dizisindeki ilk öğe olarak çağırır.
Örneğin, tam metin arama ifadesi oluşturmak için android:searchSuggestSelection özelliğini şu şekilde oluşturabilirsiniz:
<?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.MyCustomSuggestionProvider" android:searchSuggestIntentAction="android.intent.action.VIEW" android:searchSuggestSelection="word MATCH ?"> </searchable>
Bu yapılandırmayla query() yönteminiz, selection parametresini "word MATCH ?" olarak, selectionArgs parametresini ise arama sorgusu olarak sunar. Bunları, ilgili bağımsız değişkenleri olarak bir SQLite query() yöntemine ilettiğinizde birlikte sentezlenirler. Yani soru işareti, sorgu metniyle değiştirilir. Bu şekilde öneri sorguları alıyorsanız ve sorgu metnine joker karakterler eklemeniz gerekiyorsa bu değer tırnak içine alınmış ve soru işareti yerine yerleştirilmiş olduğundan, bunları selectionArgs parametresine ekleyin veya bu parametrenin önüne ekleyin.
Önceki örnekteki bir diğer özellik ise android:searchSuggestIntentAction. Bu özellik, kullanıcı bir öneri seçtiğinde her intent ile gönderilen intent işlemini tanımlar. Bu konu, Öneriler için niyet beyan etme bölümünde daha ayrıntılı olarak ele alınmaktadır.
Öneri tablosu oluşturma
Sisteme Cursor ile öneri döndürdüğünüzde sistem, her satırda belirli sütunlar olmasını bekler. Öneri verilerinizi cihazdaki bir SQLite veritabanında, bir web sunucusundaki veritabanında veya cihazda ya da web'deki başka bir biçimde depolamanızdan bağımsız olarak, önerileri bir tablodaki satırlar şeklinde biçimlendirin ve Cursor ile birlikte sunun.
Sistem birkaç sütunu anlar ancak yalnızca ikisi gereklidir:
_ID- Her öneri için benzersiz bir tam sayı satır kimliği. Sistem,
ListViewiçinde öneri sunmak için bu bilgiyi gerektirir. SUGGEST_COLUMN_TEXT_1- Öneri olarak sunulan dize.
Aşağıdaki sütunların tümü isteğe bağlıdır. Çoğu, aşağıdaki bölümlerde daha ayrıntılı olarak ele alınmıştır.
SUGGEST_COLUMN_TEXT_2- Bir dize.
Cursordosyanızda bu sütun varsa tüm öneriler iki satırlık biçimde sağlanır. Bu sütundaki dize, birincil öneri metninin altında ikinci ve daha küçük bir metin satırı olarak gösterilir. İkincil metin olmadığını belirtmek için bu değer null veya boş olabilir. SUGGEST_COLUMN_ICON_1- Drawable kaynak, içerik veya dosya URI dizesi.
Cursorbu sütunu içeriyorsa tüm öneriler, sol tarafta çizilebilir simgeyle birlikte simge ve metin biçiminde sağlanır. Bu, satırda simge olmadığını belirtmek için boş veya sıfır olabilir. SUGGEST_COLUMN_ICON_2- Drawable kaynak, içerik veya dosya URI dizesi.
Cursorbu sütunu içeriyorsa tüm öneriler, sağ tarafta simge olacak şekilde simge ve metin biçiminde sağlanır. Bu, satırda simge olmadığını belirtmek için boş veya sıfır olabilir. SUGGEST_COLUMN_INTENT_ACTION- Bir amaç işlemi dizesi. Bu sütun varsa ve belirli bir satırda değer içeriyorsa önerinin amacını oluştururken burada tanımlanan işlem kullanılır. Öğe sağlanmazsa işlem, aranabilir yapılandırmanızdaki
android:searchSuggestIntentActionalanından alınır. Tüm öneriler için aynı işlemi yapıyorsanız işlemiandroid:searchSuggestIntentActionkullanarak belirtmeniz ve bu sütunu atlamanız daha verimli olur. SUGGEST_COLUMN_INTENT_DATA- Veri URI'si dizesi. Bu sütun varsa ve belirtilen satırda bir değer içeriyorsa önerinin amacını oluştururken bu veriler kullanılır. Öğe sağlanmazsa veriler, aranabilir yapılandırmanızdaki
android:searchSuggestIntentDataalanından alınır. Her iki kaynak da sağlanmazsa amaçın veri alanı null olur. Verileriniz tüm öneriler için aynıysa veya sabit bir bölüm ve belirli bir kimlik kullanılarak açıklanabiliyorsaandroid:searchSuggestIntentDatakullanarak belirtmek ve bu sütunu atlamak daha verimlidir. SUGGEST_COLUMN_INTENT_DATA_ID- URI yolu dizesi. Bu sütun varsa ve belirtilen satırda bir değer içeriyorsa niyetin veri alanına "/" ve bu değer eklenir.
Bu işlevi yalnızca aranabilir yapılandırmada
android:searchSuggestIntentDataözelliğiyle belirtilen veri alanı uygun bir temel dizeye ayarlanmışsa kullanın. SUGGEST_COLUMN_INTENT_EXTRA_DATA- Rastgele veriler. Bu sütun varsa ve belirli bir satırda değer içeriyorsa bu, önerinin amacını oluştururken kullanılan ekstra veridir.
Sağlanmazsa amaçla ilgili ek veri alanı boş olur. Bu sütun, önerilerin, niyetin
EXTRA_DATA_KEYanahtarına ek olarak dahil edilen ek veriler sağlamasına olanak tanır. SUGGEST_COLUMN_QUERY- Bu sütun varsa ve bu öğe belirtilen satırda bulunuyorsa bu, önerinin sorgusu oluşturulurken kullanılan veridir ve niyetin
QUERYanahtarına ek olarak dahil edilir. Önerinin işlemiACTION_SEARCHise zorunlu, aksi takdirde isteğe bağlıdır. SUGGEST_COLUMN_SHORTCUT_ID- Yalnızca Hızlı Arama Kutusu için öneriler sunarken kullanılır. Bu sütun, arama önerisinin kısayol olarak depolanıp depolanmayacağını ve doğrulanıp doğrulanmayacağını belirtir. Kısayollar genellikle kullanıcı Hızlı Arama Kutusundaki bir öneriye dokunduğunda oluşturulur. Eksikse sonuç, kısayol olarak saklanır ve hiçbir zaman yenilenmez.
SUGGEST_NEVER_MAKE_SHORTCUTolarak ayarlanırsa sonuç kısayol olarak saklanmaz. Aksi takdirde,SUGGEST_URI_PATH_SHORTCUTkullanılarak güncel bir öneri için tekrar kontrol etmek üzere kısayol kimliği kullanılır. SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING- Yalnızca Hızlı Arama Kutusu için öneriler sunarken kullanılır. Bu sütun,
bu önerinin kısayolu Hızlı Arama Kutusunda yenilenirken
SUGGEST_COLUMN_ICON_2simgesi yerine bir döndürücü gösterilmesi gerektiğini belirtir.
Bu sütunların çoğu, aşağıdaki bölümlerde daha ayrıntılı olarak ele alınmıştır.
Öneriler için bir amaç beyan etme
Kullanıcı, arama iletişim kutusunun veya widget'ının altında görünen listeden bir öneri seçtiğinde sistem, aranabilir etkinliğinize özel bir Intent gönderir. Amacın işlemini ve verilerini tanımlamanız gerekir.
Niyet işlemini beyan etme
Özel öneriler için en yaygın amaç işlemi ACTION_VIEW'dır. Bu işlem, bir şeyi (ör. bir kelimenin tanımı, bir kişinin iletişim bilgileri veya bir web sayfası) açmak istediğinizde uygundur.
Ancak amaç işlemi başka bir işlem olabilir ve her öneri için farklı olabilir.
Tüm önerilerin aynı amaç işlemini kullanmasını isteyip istemediğinize bağlı olarak işlemi iki şekilde tanımlayabilirsiniz:
- Aşağıdaki örnekte gösterildiği gibi, tüm öneriler için işlemi tanımlamak üzere aranabilir yapılandırma dosyanızın
android:searchSuggestIntentActionözelliğini kullanın:<?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.MyCustomSuggestionProvider" android:searchSuggestIntentAction="android.intent.action.VIEW" > </searchable>
- Tek tek öneriler için işlemi tanımlamak üzere
SUGGEST_COLUMN_INTENT_ACTIONsütununu kullanın. Bunu yapmak için öneri tablonuzaSUGGEST_COLUMN_INTENT_ACTIONsütununu ekleyin ve her öneri için kullanılacak işlemi (ör."android.intent.action.VIEW") bu sütuna yerleştirin.
Bu iki tekniği birlikte de kullanabilirsiniz. Örneğin, android:searchSuggestIntentAction özelliğini varsayılan olarak tüm önerilerle kullanılacak bir işlemle birlikte ekleyebilir, ardından SUGGEST_COLUMN_INTENT_ACTION sütununda farklı bir işlem belirterek bu işlemi bazı öneriler için geçersiz kılabilirsiniz. SUGGEST_COLUMN_INTENT_ACTION sütununa bir değer eklemezseniz android:searchSuggestIntentAction özelliğinde sağlanan amaç kullanılır.
Amaç verilerini beyan etme
Kullanıcı bir öneri seçtiğinde, aranabilir etkinliğiniz önceki bölümde açıklandığı gibi tanımladığınız işlemle birlikte intent'i alır. Ancak etkinliğinizin hangi önerinin seçildiğini belirlemesi için intent'in veri taşıması da gerekir. Özellikle, veriler her öneri için benzersiz bir şey olmalıdır. Örneğin, SQLite tablonuzdaki önerinin satır kimliği.
Amaç alındığında, ekli verileri getData() veya getDataString() ile alabilirsiniz.
Amacın dahil olduğu verileri iki şekilde tanımlayabilirsiniz:
- Öneri tablonuzun
SUGGEST_COLUMN_INTENT_DATAsütununda her öneri için verileri tanımlayın.SUGGEST_COLUMN_INTENT_DATAsütununu ekleyip her satır için benzersiz verilerle doldurarak öneriler tablosundaki her amaç için gerekli tüm veri bilgilerini sağlayın. Bu sütundaki veriler, bu sütunda tanımladığınız şekilde tam olarak amaca eklenir. Daha sonragetData()veyagetDataString()ile geri alabilirsiniz. - Bir veri URI'sini iki parçaya ayırın: tüm önerilerde ortak olan kısım ve her öneriye özgü olan kısım. Bu parçaları, arama yapılabilir yapılandırmanın
android:searchSuggestintentDataözelliğine ve öneri tablonuzunSUGGEST_COLUMN_INTENT_DATA_IDsütununa yerleştirin.Aşağıdaki örnekte, aranabilir yapılandırmanızın
android:searchSuggestIntentDataözelliğindeki tüm öneriler için ortak olan URI parçasının nasıl tanımlanacağı gösterilmektedir:<?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.MyCustomSuggestionProvider" android:searchSuggestIntentAction="android.intent.action.VIEW" android:searchSuggestIntentData="content://com.example/datatable" > </searchable>
Her önerinin son yolu (benzersiz kısım) öneriler tablonuzun
SUGGEST_COLUMN_INTENT_DATA_IDsütununa ekleyin. Kullanıcı bir öneri seçtiğinde sistem,android:searchSuggestIntentDatasütunundaki dizeyi alır, bir eğik çizgi (/) ekler ve ardındanSUGGEST_COLUMN_INTENT_DATA_IDsütunundaki ilgili değeri ekleyerek tam bir içerik URI'si oluşturur. Daha sonraUriilegetData()kullanarak geri alabilirsiniz.
Daha fazla veri ekleme
Amacınızla ilgili daha fazla bilgi ifade etmeniz gerekiyorsa başka bir tablo sütunu (ör. SUGGEST_COLUMN_INTENT_EXTRA_DATA) ekleyebilirsiniz. Bu sütun, öneriyle ilgili ek bilgileri saklayabilir. Bu sütuna kaydedilen veriler, amacın ek paketinin EXTRA_DATA_KEY bölümüne yerleştirilir.
Amacı ele alma
Özel amaçlarla özel arama önerileri sağladıktan sonra, kullanıcının bir öneri seçtiğinde bu amaçları işlemek için aranabilir etkinliğinizin olması gerekir. Bu, aranabilir etkinliğinizin zaten yaptığı ACTION_SEARCH
amacı ele almaya ek olarak yapılır. Etkinliğinizin onCreate() geri çağırma işlemi sırasında amaçları nasıl işleyebileceğinize dair bir örnek aşağıda verilmiştir:
Kotlin
when(intent.action) { Intent.ACTION_SEARCH -> { // Handle the normal search query case. intent.getStringExtra(SearchManager.QUERY)?.also { query -> doSearch(query) } } Intent.ACTION_VIEW -> { // Handle a suggestions click, because the suggestions all use ACTION_VIEW. showResult(intent.data) } }
Java
Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { // Handle the normal search query case. String query = intent.getStringExtra(SearchManager.QUERY); doSearch(query); } else if (Intent.ACTION_VIEW.equals(intent.getAction())) { // Handle a suggestions click, because the suggestions all use ACTION_VIEW. Uri data = intent.getData(); showResult(data); }
Bu örnekte, amaç işlemi ACTION_VIEW olup veriler, android:searchSuggestIntentData dizesi ve SUGGEST_COLUMN_INTENT_DATA_ID sütunu tarafından sentezlenen, önerilen öğeyi işaret eden tam bir URI taşır. Ardından URI, içerik sağlayıcıya URI ile belirtilen öğe için sorgu gönderen yerel showResult() yöntemine iletilir.
Sorgu metnini yeniden yazma
Kullanıcı, öneri listesinde iz topu veya D-pad gibi yön kontrollerini kullanarak gezindiğinde sorgu metni varsayılan olarak güncellenmez. Ancak kullanıcının sorgu metnini, ön planda olan öneriyle eşleşen bir sorguyla metin kutusunda göründüğü şekilde geçici olarak yeniden yazabilirsiniz. Bu sayede kullanıcı, önerilen sorguyu görebilir, arama kutusunu seçebilir ve sorguyu arama olarak göndermeden önce düzenleyebilir.
Sorgu metnini aşağıdaki şekillerde yeniden yazabilirsiniz:
android:searchModeözelliğini,"queryRewriteFromText"değeriyle birlikte aranabilir yapılandırmanıza ekleyin. Bu durumda, sorgu metnini yeniden yazmak için önerininSUGGEST_COLUMN_TEXT_1sütunundaki içerik kullanılır.- Arama yapılabilir yapılandırmanıza
android:searchModeözelliğini"queryRewriteFromData"değeriyle birlikte ekleyin. Bu durumda, sorgu metnini yeniden yazmak için önerininSUGGEST_COLUMN_INTENT_DATAsütunundaki içerik kullanılır. Bu işlevi yalnızca kullanıcı tarafından görülebilmesi amaçlanan URI'ler veya diğer veri biçimleriyle (ör. HTTP URL'leri) kullanın. Sorguyu bu şekilde yeniden yazmak için dahili URI şemalarını kullanmayın. - Öneri tablonuzun
SUGGEST_COLUMN_QUERYsütununda benzersiz bir sorgu metni dizesi sağlayın. Bu sütun mevcutsa ve geçerli öneri için bir değer içeriyorsa sorgu metnini yeniden yazmak ve önceki uygulamalardan birini geçersiz kılmak için kullanılır.
Arama önerilerini Hızlı Arama Kutusu'nda gösterme
Uygulamanızı özel arama önerileri sunacak şekilde yapılandırdıktan sonra, bu önerileri dünya genelinde erişilebilen Hızlı Arama Kutusu'nda kullanıma sunmak için aranabilir yapılandırmanızı android:includeInGlobalSearch değerini "true" içerecek şekilde değiştirmeniz yeterlidir.
Ek çalışma yapılması gereken tek senaryo, içerik sağlayıcınızın okuma izni istemesidir. Bu durumda, sağlayıcının içerik sağlayıcınıza Hızlı Arama Kutusu okuma erişimi vermesi için aşağıdaki örnekte gösterildiği gibi bir <path-permission> öğesi eklemeniz gerekir:
<provider android:name="MySuggestionProvider" android:authorities="com.example.MyCustomSuggestionProvider" android:readPermission="com.example.provider.READ_MY_DATA" android:writePermission="com.example.provider.WRITE_MY_DATA"> <path-permission android:pathPrefix="/search_suggest_query" android:readPermission="android.permission.GLOBAL_SEARCH" /> </provider>
Bu örnekte, sağlayıcı içeriğe okuma ve yazma erişimini kısıtlıyor.
<path-permission> öğesi, "android.permission.GLOBAL_SEARCH" izni olduğunda "/search_suggest_query" yol öneki içindeki içeriğe okuma erişimi vererek kısıtlamayı değiştirir. Bu işlem, içerik sağlayıcınıza öneri sorgusu gönderebilmesi için Hızlı Arama Kutusu'na erişim izni verir.
İçerik sağlayıcınız okuma izinlerini zorunlu kılmıyorsa Hızlı Arama Kutusu içeriği varsayılan olarak okur.
Cihazda önerileri etkinleştirme
Uygulamalar, bu şekilde yapılandırılmış olsalar bile varsayılan olarak Hızlı Arama Kutusunda öneri sunmak üzere etkinleştirilmez. Kullanıcı, Ayarlar > Arama'da bulunan Aranabilir öğeler'i açıp uygulamanızı aranabilir öğe olarak etkinleştirerek uygulamanızdaki önerilerin Hızlı Arama Kutusuna dahil edilip edilmeyeceğini seçer.
Hızlı Arama Kutusunda kullanılabilen her uygulamanın Aranabilir öğeler ayarları sayfasında bir girişi vardır. Girişte uygulamanın adı, uygulamada hangi içeriklerin aranabileceği ve Hızlı Arama Kutusunda öneri olarak sunulabileceği ile ilgili kısa bir açıklama yer alır. Aranabilir uygulamanızın açıklama metnini tanımlamak için aşağıdaki örnekte gösterildiği gibi aranabilir yapılandırmanıza android:searchSettingsDescription özelliğini ekleyin:
<?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.MyCustomSuggestionProvider" android:searchSuggestIntentAction="android.intent.action.VIEW" android:includeInGlobalSearch="true" android:searchSettingsDescription="@string/search_description" > </searchable>
android:searchSettingsDescription dizesini olabildiğince kısa tutun ve aranabilir içeriği belirtin. Örneğin, müzik uygulaması için "Sanatçılar, albümler ve parçalar", not defteri uygulaması için "Kayıtlı notlar". Kullanıcının ne tür öneriler sunulduğunu bilmesi için bu açıklama önemlidir. android:includeInGlobalSearch doğru olduğunda bu özelliği her zaman ekleyin.
Kullanıcının, uygulamanızda arama önerilerini etkinleştirmek için ayarlar menüsünü ziyaret etmesi gerektiğinden, arama uygulamanızın önemli bir yönüyse bunu kullanıcılarınıza nasıl ileteceğinizi düşünün. Örneğin, bir kullanıcı uygulamayı ilk kez başlattığında Hızlı Arama Kutusu için arama önerilerinin nasıl etkinleştirileceğini açıklayan bir not gösterebilirsiniz.
Hızlı Arama Kutusu öneri kısayollarını yönetme
Kullanıcının Hızlı Arama Kutusundan seçtiği öneriler otomatik olarak kısayola dönüştürülebilir. Bunlar, sistemin içerik sağlayıcınızdan kopyaladığı önerilerdir. Böylece sistem, içerik sağlayıcınıza yeniden sorgu göndermeden öneriye hızlıca erişebilir.
Bu ayar, Hızlı Arama Kutusu tarafından alınan tüm öneriler için varsayılan olarak etkindir. Ancak öneri verileriniz zaman içinde değişirse kısayolların yenilenmesini isteyebilirsiniz. Örneğin, önerileriniz bir kişinin müsaitlik durumu gibi dinamik verilerle ilgiliyse kullanıcıya gösterildiğinde öneri kısayollarının yenilenmesini isteyin. Bunu yapmak için öneri tablonuza SUGGEST_COLUMN_SHORTCUT_ID karakterini ekleyin. Bu sütunu kullanarak, aşağıdaki yöntemlerden biriyle her önerinin kısayol davranışını yapılandırabilirsiniz:
Hızlı Arama Kutusu'nun, öneri kısayolunun yeni bir sürümü için içerik sağlayıcınıza yeniden sorgu göndermesini sağlayın.
Kısayol her görüntülendiğinde önerinin yeni bir sürüm için yeniden sorgulanması amacıyla
SUGGEST_COLUMN_SHORTCUT_IDsütununa bir değer girin. Yenileme sorgusu döndürülene kadar kısayolda en son kullanılabilir veriler hızlıca gösterilir. Bu noktada, öneri yeni bilgilerle yenilenir. Yenileme sorgusu,SUGGEST_URI_PATH_QUERYyerineSUGGEST_URI_PATH_SHORTCUTURI yoluyla içerik sağlayıcınıza gönderilir.Döndürdüğünüz
Cursor, orijinal öneriyle aynı sütunları kullanan bir öneri içermeli veya kısayolun artık geçerli olmadığını belirten boş bir yanıt olmalıdır. Bu durumda, öneri kaybolur ve kısayol kaldırılır.Bir öneri, yenilenmesi daha uzun sürebilecek verilerle ilgiliyse (ör. ağ tabanlı yenileme), yenileme tamamlanana kadar sağdaki simge için ilerleme çarkı göstermek üzere
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHINGsütununu öneri tablonuza "true" değeriyle ekleyebilirsiniz. Doğru dışındaki herhangi bir değer ilerleme çarkını göstermez.Önerinin kısayola kopyalanmasını tamamen engelleme
SUGGEST_COLUMN_SHORTCUT_IDsütunundaSUGGEST_NEVER_MAKE_SHORTCUTdeğerini sağlayın. Bu durumda, öneri hiçbir zaman kısayola kopyalanmaz. Bu işlem yalnızca daha önce kopyalanan önerinin kesinlikle görünmesini istemiyorsanız gereklidir. Sütun için normal bir değer sağlarsanız öneri kısayolu yalnızca yenileme sorgusu döndürülene kadar görünür.Varsayılan kısayol davranışının uygulanmasına izin verin.
Değişmeyen ve kısayol olarak kaydedilebilen her öneri için
SUGGEST_COLUMN_SHORTCUT_IDalanını boş bırakın.
Önerileriniz hiç değişmiyorsa SUGGEST_COLUMN_SHORTCUT_ID sütununa ihtiyacınız yoktur.
Hızlı Arama Kutusu öneri sıralaması hakkında
Uygulamanızın arama önerilerini Hızlı Arama Kutusu'nda kullanılabilir hale getirdiğinizde, Hızlı Arama Kutusu sıralaması, önerilerin belirli bir sorgu için kullanıcıya nasıl gösterileceğini belirler. Bu durum, söz konusu sorgu için kaç uygulamanın sonuç gösterdiğine ve kullanıcının sonuçlarınızı diğer uygulamaların sonuçlarına kıyasla ne sıklıkta seçtiğine bağlı olabilir. Önerilerinizin nasıl sıralandığı veya uygulamanızın önerilerinin belirli bir sorgu için gösterilip gösterilmediği konusunda garanti verilmez. Genel olarak, kaliteli sonuçlar sunmak uygulamanızın önerilerinin belirgin bir konumda gösterilme olasılığını artırır. Düşük kaliteli öneriler sunan uygulamaların ise daha düşük sıralanma veya hiç gösterilmeme olasılığı daha yüksektir.