Saat menggunakan dialog penelusuran atau widget penelusuran Android, Anda dapat memberikan saran penelusuran kustom yang dibuat dari data di aplikasi Anda. Misalnya, jika aplikasi Anda adalah kamus, Anda dapat menyarankan kata-kata dari kamus yang cocok dengan teks yang dimasukkan di kolom penelusuran sebelum pengguna selesai memasukkan kuerinya. Saran ini berharga karena dapat secara efektif memprediksi apa yang diinginkan pengguna dan memberikan akses instan ke sana. Gambar 1 menunjukkan contoh dialog penelusuran dengan saran kustom.
Setelah menyediakan saran kustom, Anda juga dapat menyediakan saran tersebut bagi Kotak Penelusuran Kilat di seluruh sistem, yang menyediakan akses ke konten Anda dari luar aplikasi.
Sebelum menambahkan saran kustom, terapkan dialog penelusuran Android atau widget penelusuran untuk penelusuran di aplikasi Anda. Lihat Membuat antarmuka penelusuran dan Penyedia konten.
Dasar-dasar

Gambar 1. Screenshot dialog penelusuran dengan saran penelusuran kustom.
Saat pengguna memilih saran kustom, sistem akan mengirimkan
Intent
ke aktivitas penelusuran Anda. Tidak seperti kueri penelusuran normal yang mengirimkan intent dengan tindakan
ACTION_SEARCH
, Anda dapat menentukan saran kustom agar menggunakan
ACTION_VIEW
—atau
tindakan intent lain—dan juga menyertakan data yang relevan dengan
saran yang dipilih. Dalam contoh kamus, saat pengguna memilih saran, aplikasi dapat langsung membuka definisi kata tersebut, alih-alih menelusuri kamus untuk menemukan kecocokan.
Untuk memberikan saran kustom, lakukan langkah-langkah berikut:
- Terapkan aktivitas penelusuran dasar, seperti yang dijelaskan dalam Membuat antarmuka penelusuran.
- Modifikasi konfigurasi penelusuran dengan informasi tentang penyedia konten yang memberikan saran kustom.
- Buat tabel, seperti dalam
SQLiteDatabase
, untuk saran Anda, dan format tabel tersebut dengan kolom-kolom yang bersifat wajib. - Buat penyedia konten yang memiliki akses ke tabel saran Anda, dan deklarasikan penyedia tersebut dalam manifes Anda.
- Deklarasikan jenis
Intent
yang akan dikirim saat pengguna memilih saran, termasuk tindakan kustom dan data kustom.
Selain menampilkan dialog penelusuran, sistem Android juga menampilkan saran penelusuran Anda. Anda memerlukan penyedia konten tempat sistem dapat mengambil saran Anda. Baca Penyedia konten untuk mempelajari cara membuat penyedia konten.
Setelah sistem mengidentifikasi bahwa aktivitas Anda adalah aktivitas penelusuran dan memberikan saran penelusuran, prosedur berikut akan terjadi saat pengguna memasukkan kueri:
- Sistem mengambil teks kueri penelusuran—artinya, apa pun yang dimasukkan sejauh ini—dan mengirimkan kueri ke penyedia konten yang mengelola saran Anda.
- Penyedia konten Anda akan menampilkan
Cursor
yang mengarah ke semua saran yang relevan dengan teks kueri penelusuran. - Sistem menampilkan daftar saran yang disediakan oleh
Cursor
.
Setelah saran kustom ditampilkan, hal berikut dapat terjadi:
- Jika pengguna memasukkan huruf lain atau mengubah kueri dengan cara apa pun, langkah-langkah sebelumnya akan diulang dan daftar saran akan diperbarui.
- Jika pengguna menjalankan penelusuran, saran akan diabaikan dan penelusuran akan dikirim ke aktivitas penelusuran Anda menggunakan intent
ACTION_SEARCH
normal. - Jika pengguna memilih sebuah saran, intent akan dikirim ke aktivitas penelusuran Anda, yang berisi tindakan kustom dan data kustom sehingga aplikasi Anda dapat membuka konten yang disarankan.
Memodifikasi konfigurasi yang dapat ditelusuri
Untuk menambahkan dukungan bagi saran kustom, tambahkan atribut android:searchSuggestAuthority
ke elemen <searchable>
dalam file konfigurasi penelusuran Anda, seperti yang ditunjukkan dalam contoh berikut:
<?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>
Anda mungkin memerlukan atribut tambahan, bergantung pada jenis intent yang Anda lampirkan ke setiap saran dan cara Anda memformat kueri ke penyedia konten. Atribut opsional lainnya dibahas di bagian berikut.
Membuat penyedia konten
Untuk membuat penyedia konten untuk saran kustom, lihat
Penyedia konten
terlebih dahulu untuk mempelajari cara membuat penyedia konten. Penyedia konten untuk saran khusus serupa dengan penyedia konten lainnya. Namun, untuk setiap saran yang Anda berikan, masing-masing baris dalam Cursor
harus menyertakan kolom tertentu yang dipahami dan digunakan oleh sistem untuk memformat saran.
Saat pengguna memasukkan teks dalam dialog penelusuran atau widget penelusuran, sistem akan mengkueri penyedia konten Anda untuk meminta saran dengan memanggil query()
setiap kali huruf dimasukkan. Dalam implementasi query()
, penyedia konten Anda harus menelusuri data saran Anda dan menampilkan Cursor
yang mengarah ke baris yang dianggap sebagai saran yang baik.
Detail tentang pembuatan penyedia konten untuk saran kustom dibahas dalam dua bagian berikut:
- Menangani kueri saran
- Cara sistem mengirimkan permintaan ke penyedia konten dan cara menanganinya.
- Membuat tabel saran
- Cara menentukan kolom yang diharapkan oleh sistem dalam
Cursor
yang ditampilkan bersama setiap kueri.
Menangani kueri saran
Saat sistem meminta saran dari penyedia konten Anda, sistem akan memanggil metode query()
milik penyedia konten tersebut. Terapkan metode ini untuk menelusuri data saran Anda dan menampilkan Cursor
yang mengarah ke saran yang Anda anggap relevan.
Berikut adalah ringkasan parameter yang diteruskan oleh sistem ke metode
query()
Anda, yang dicantumkan secara berurutan:
uri
Selalu berupa konten
Uri
, yang diformat sebagai berikut:content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
Perilaku default-nya adalah sistem meneruskan URI ini dan menambahkan teks kueri ke bagian akhirnya:
content://your.authority/optional.suggest.path/
SUGGEST_URI_PATH_QUERY
/puppiesTeks kueri di bagian akhir ini dienkode menggunakan aturan encoding URI, sehingga Anda mungkin perlu mendekodenya sebelum melakukan penelusuran.
Bagian
optional.suggest.path
hanya disertakan dalam URI jika Anda menetapkan jalur tersebut dalam file konfigurasi penelusuran Anda dengan atributandroid:searchSuggestPath
. Bagian ini hanya diperlukan jika Anda menggunakan penyedia konten yang sama untuk beberapa aktivitas penelusuran. Jika demikian, bedakan sumber kueri saran.projection
- Selalu null.
selection
- Nilai yang diberikan dalam atribut
android:searchSuggestSelection
file konfigurasi penelusuran, atau null jika Anda tidak mendeklarasikan atributandroid:searchSuggestSelection
. Bagian berikut membahasnya lebih lanjut.selectionArgs
- Berisi kueri penelusuran sebagai elemen pertama dan satu-satunya array ini jika Anda mendeklarasikan atribut
android:searchSuggestSelection
di konfigurasi penelusuran. Jika Anda tidak mendeklarasikanandroid:searchSuggestSelection
, maka parameter ini bernilai null. Bagian berikut akan membahasnya lebih lanjut.sortOrder
- Selalu null.
Sistem dapat mengirimkan teks kueri penelusuran kepada Anda dalam dua cara. Cara default-nya adalah teks kueri disertakan sebagai jalur terakhir pada URI konten yang diteruskan dalam parameter uri
. Namun, jika Anda menyertakan nilai pemilihan dalam atribut android:searchSuggestSelection
konfigurasi penelusuran, maka teks kueri akan diteruskan sebagai elemen pertama dari array string selectionArgs
. Kedua opsi ini dijelaskan di bagian selanjutnya.
Mendapatkan kueri dalam URI
Secara default, kueri ditambahkan sebagai segmen terakhir dari parameter uri
—objek Uri
. Untuk mengambil teks kueri dalam kasus ini, gunakan
getLastPathSegment()
,
seperti yang ditunjukkan dalam contoh berikut:
Kotlin
val query: String = uri.lastPathSegment.toLowerCase()
Java
String query = uri.getLastPathSegment().toLowerCase();
Hasilnya, segmen terakhir Uri
, yang merupakan teks kueri yang dimasukkan pengguna, akan ditampilkan.
Mendapatkan kueri dalam argumen pemilihan
Alih-alih menggunakan URI, Anda mungkin lebih suka bila metode query()
Anda menerima apa pun yang diperlukannya untuk menjalankan pencarian, dan membiarkan parameter selection
dan selectionArgs
menyediakan nilai yang sesuai. Dalam kasus ini, tambahkan atribut android:searchSuggestSelection
ke konfigurasi penelusuran dengan string pemilihan SQLite Anda. Dalam string
pemilihan, sertakan tanda tanya (?) sebagai placeholder untuk kueri
penelusuran yang sebenarnya. Sistem akan memanggil query()
dengan string pilihan sebagai parameter selection
dan kueri penelusuran sebagai elemen pertama dalam array selectionArgs
.
Misalnya, berikut ini cara membentuk atribut
android:searchSuggestSelection
untuk membuat pernyataan penelusuran
teks lengkap:
<?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>
Dengan konfigurasi ini, metode query()
Anda akan memberikan parameter selection
sebagai "word MATCH ?"
, dan parameter selectionArgs
sebagai kueri penelusurannya. Saat Anda meneruskannya ke metode query()
SQLite sebagai argumennya masing-masing, parameter tersebut akan disatukan—artinya, tanda tanya diganti dengan teks kueri. Jika Anda menerima kueri saran dengan cara ini dan perlu menambahkan karakter pengganti ke teks kueri, tambahkan karakter pengganti tersebut di akhir atau di awal parameter selectionArgs
, karena nilai ini digabung dalam tanda kutip dan disisipkan di tempat tanda tanya berada.
Atribut lain dalam contoh sebelumnya adalah
android:searchSuggestIntentAction
, yang menentukan tindakan intent
yang dikirim bersama setiap intent saat pengguna memilih sebuah saran. Hal ini dibahas lebih lanjut di bagian Mendeklarasikan intent untuk saran.
Membuat tabel saran
Saat Anda menampilkan saran ke sistem dengan Cursor
, sistem mengharapkan kolom spesifik di setiap baris. Terlepas dari apakah Anda menyimpan data saran di database SQLite di perangkat, database di server web, atau format lain di perangkat atau web, format saran sebagai baris-baris tabel dan sajikan dengan Cursor
.
Sistem memahami beberapa kolom, tetapi hanya dua kolom yang bersifat wajib:
_ID
- ID baris unik dalam bentuk integer untuk setiap saran. Sistem mewajibkan kolom ini untuk menyajikan saran dalam
ListView
. SUGGEST_COLUMN_TEXT_1
- String yang disajikan sebagai saran.
Kolom berikut bersifat opsional. Sebagian besar akan dibahas lebih lanjut di bagian berikut.
SUGGEST_COLUMN_TEXT_2
- String. Jika
Cursor
Anda menyertakan kolom ini, maka semua saran akan diberikan dalam format dua baris. String dalam kolom ini ditampilkan sebagai baris teks kedua yang lebih kecil di bawah teks saran utama. Kolom ini boleh kosong atau null untuk menunjukkan tidak ada teks sekunder. SUGGEST_COLUMN_ICON_1
- Resource, konten, atau string URI file yang bersifat drawable. Jika
Cursor
menyertakan kolom ini, maka semua saran akan diberikan dalam format ikon-plus-teks dengan ikon drawable di sebelah kiri. Kolom ini bisa kosong atau null untuk menunjukkan tidak ada ikon di baris ini. SUGGEST_COLUMN_ICON_2
- Resource, konten, atau string URI file yang bersifat drawable. Jika
Cursor
Anda menyertakan kolom ini, maka semua saran akan diberikan dalam format ikon-plus-teks dengan ikon di sebelah kanan. Kolom ini bisa kosong atau nol untuk menunjukkan tidak ada ikon di baris ini. SUGGEST_COLUMN_INTENT_ACTION
- String tindakan intent. Jika kolom ini ada dan berisi nilai di baris yang ditentukan, tindakan yang ditetapkan di sini akan digunakan saat membentuk intent saran. Jika elemen ini tidak disediakan, tindakan akan diambil dari kolom
android:searchSuggestIntentAction
dalam konfigurasi penelusuran Anda. Jika tindakan Anda sama untuk semua saran, akan lebih efisien jika Anda menentukan tindakan menggunakanandroid:searchSuggestIntentAction
dan menghapus kolom ini. SUGGEST_COLUMN_INTENT_DATA
- String URI data. Jika kolom ini ada dan berisi nilai di baris yang ditentukan, data ini akan digunakan saat membentuk intent saran. Jika elemen tidak disediakan, data akan diambil dari kolom
android:searchSuggestIntentData
dalam konfigurasi penelusuran Anda. Jika tidak ada sumber yang disediakan, kolom data intent akan bernilai null. Jika data Anda sama untuk semua saran, atau dapat dideskripsikan menggunakan sebuah bagian tetap dan sebuah ID tertentu, maka akan lebih efisien jika Anda menentukannya menggunakanandroid:searchSuggestIntentData
dan menghapus kolom ini. SUGGEST_COLUMN_INTENT_DATA_ID
- String jalur URI. Jika kolom ini ada dan berisi nilai di baris yang ditentukan, maka "/" dan nilai ini akan ditambahkan ke akhir kolom data pada intent.
Gunakan ini hanya jika kolom data yang ditentukan oleh atribut
android:searchSuggestIntentData
dalam konfigurasi penelusuran telah disetel ke string dasar yang sesuai. SUGGEST_COLUMN_INTENT_EXTRA_DATA
- Data arbitrer. Jika kolom ini ada dan berisi nilai di baris yang ditentukan, maka nilai tersebut akan menjadi data ekstra yang digunakan saat membentuk intent saran.
Jika tidak disediakan, kolom data ekstra untuk intent ini akan bernilai null. Dengan adanya kolom ini, saran dapat memberikan data tambahan yang disertakan sebagai data ekstra dalam kunci
EXTRA_DATA_KEY
intent. SUGGEST_COLUMN_QUERY
- Jika kolom ini ada dan elemen ini ada di baris yang ditentukan, maka elemen ini akan menjadi data yang digunakan saat membentuk kueri saran, yang disertakan sebagai data ekstra dalam kunci
QUERY
intent. Wajib diisi jika tindakan saran adalahACTION_SEARCH
, tetapi opsional jika sebaliknya. SUGGEST_COLUMN_SHORTCUT_ID
- Hanya digunakan saat memberikan saran untuk Kotak Penelusuran Kilat. Kolom ini menunjukkan apakah saran penelusuran harus disimpan sebagai pintasan dan apakah saran penelusuran harus divalidasi. Pintasan biasanya terbentuk saat pengguna mengetuk saran dari Kotak Penelusuran Kilat. Jika tidak ada, hasil akan disimpan sebagai
pintasan dan tidak pernah di-refresh. Jika disetel ke
SUGGEST_NEVER_MAKE_SHORTCUT
, hasil tidak akan disimpan sebagai pintasan. Jika tidak, ID pintasan akan digunakan untuk memeriksa kembali ketersediaan saran terbaru menggunakanSUGGEST_URI_PATH_SHORTCUT
. SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
- Hanya digunakan saat memberikan saran untuk Kotak Penelusuran Kilat. Kolom ini
menentukan bahwa spinner harus ditampilkan, bukan ikon dari
SUGGEST_COLUMN_ICON_2
, selagi pintasan saran ini sedang di-refresh di Kotak Penelusuran Kilat.
Sebagian besar kolom ini dibahas lebih lanjut di bagian berikut.
Mendeklarasikan intent untuk saran
Saat pengguna memilih saran dari daftar yang muncul di bawah dialog atau widget penelusuran, sistem akan mengirimkan Intent
kustom ke aktivitas penelusuran Anda. Anda harus menentukan tindakan dan data untuk intent.
Mendeklarasikan tindakan intent
Tindakan intent yang paling umum untuk saran kustom adalah
ACTION_VIEW
, yang sesuai jika Anda ingin membuka sesuatu,
seperti definisi kata, informasi kontak seseorang, atau halaman web.
Namun, tindakan intent dapat berupa tindakan lain dan dapat berbeda untuk setiap saran.
Bergantung pada apakah Anda ingin semua saran menggunakan tindakan intent yang sama, Anda dapat menentukan tindakan dengan dua cara:
- Gunakan atribut
android:searchSuggestIntentAction
file konfigurasi yang dapat ditelusuri untuk menentukan tindakan untuk semua saran, seperti yang ditunjukkan dalam contoh berikut:<?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>
- Gunakan kolom
SUGGEST_COLUMN_INTENT_ACTION
untuk menentukan tindakan untuk setiap saran. Untuk melakukannya, tambahkan kolomSUGGEST_COLUMN_INTENT_ACTION
ke tabel saran Anda dan, untuk setiap saran, tempatkan tindakan yang akan digunakan di dalamnya—seperti"android.intent.action.VIEW"
.
Anda juga dapat menggabungkan kedua teknik ini. Misalnya, Anda dapat menyertakan atribut
android:searchSuggestIntentAction
dengan tindakan yang akan
digunakan untuk semua saran secara default, lalu mengganti tindakan ini untuk beberapa
saran dengan mendeklarasikan tindakan berbeda dalam
kolom SUGGEST_COLUMN_INTENT_ACTION
. Jika Anda tidak menyertakan nilai dalam kolom SUGGEST_COLUMN_INTENT_ACTION
, maka intent yang diberikan dalam atribut android:searchSuggestIntentAction
akan digunakan.
Mendeklarasikan data intent
Saat pengguna memilih sebuah saran, aktivitas penelusuran Anda akan menerima intent dengan tindakan yang Anda tentukan—seperti yang dibahas di bagian sebelumnya—tetapi intent ini juga harus menyertakan data agar aktivitas Anda dapat mengidentifikasi saran mana yang dipilih. Secara khusus, data ini harus unik untuk setiap saran, seperti ID baris untuk saran dalam tabel SQLite Anda.
Setelah intent diterima, Anda dapat mengambil data yang terlampir dengan
getData()
atau
getDataString()
.
Anda dapat menentukan data yang disertakan dengan intent melalui dua cara:
- Tentukan data untuk setiap saran di dalam
kolom
SUGGEST_COLUMN_INTENT_DATA
tabel saran Anda.Berikan semua informasi data yang diperlukan untuk setiap intent dalam tabel saran dengan menyertakan kolom
SUGGEST_COLUMN_INTENT_DATA
lalu mengisinya dengan data unik untuk setiap baris. Data dari kolom ini ditautkan ke intent persis seperti saat Anda menetapkannya dalam kolom ini. Selanjutnya, Anda dapat mengambilnya dengangetData()
ataugetDataString()
. - Memisahkan URI data menjadi dua bagian: bagian yang umum untuk semua saran dan bagian yang unik untuk setiap saran. Tempatkan bagian-bagian ini, berturut-turut, ke dalam atribut
android:searchSuggestintentData
konfigurasi penelusuran dan kolomSUGGEST_COLUMN_INTENT_DATA_ID
tabel saran Anda.Contoh berikut menunjukkan cara mendeklarasikan bagian URI yang berlaku umum untuk semua saran dalam atribut
android:searchSuggestIntentData
konfigurasi penelusuran Anda:<?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>
Sertakan jalur akhir untuk setiap saran—bagian unik—di dalam kolom
SUGGEST_COLUMN_INTENT_DATA_ID
tabel saran Anda. Saat pengguna memilih saran, sistem akan mengambil string dariandroid:searchSuggestIntentData
, menambahkan garis miring (/), lalu menambahkan nilai yang terkait dari kolomSUGGEST_COLUMN_INTENT_DATA_ID
untuk membentuk URI konten lengkap. Selanjutnya, Anda dapat mengambilUri
dengangetData()
.
Menambahkan lebih banyak data
Jika Anda perlu menyampaikan lebih banyak informasi dengan intent Anda, Anda dapat menambahkan kolom tabel lain, seperti SUGGEST_COLUMN_INTENT_EXTRA_DATA
, yang dapat menyimpan informasi tambahan tentang saran tersebut. Data yang disimpan dalam kolom ini ditempatkan di EXTRA_DATA_KEY
pada bundle ekstra intent tersebut.
Menangani intent
Setelah Anda menyediakan saran penelusuran kustom dengan intent kustom, aktivitas penelusuran Anda harus dapat menangani intent tersebut saat pengguna memilih saran. Hal ini selain menangani intent ACTION_SEARCH
, yang telah dilakukan oleh aktivitas penelusuran Anda. Berikut adalah contoh cara menangani intent selama callback onCreate()
aktivitas Anda:
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); }
Dalam contoh ini, tindakan intent adalah ACTION_VIEW
dan data berisi URI lengkap yang mengarah ke item yang disarankan, seperti yang disintesis oleh string android:searchSuggestIntentData
dan kolom SUGGEST_COLUMN_INTENT_DATA_ID
. URI kemudian diteruskan ke metode showResult()
lokal yang mengkueri penyedia konten untuk item yang ditentukan oleh URI.
Menulis ulang teks kueri
Secara default, jika pengguna membuka daftar saran menggunakan kontrol arah, seperti dengan trackball atau D-pad, teks kueri tidak diperbarui. Namun, Anda dapat menulis ulang teks kueri pengguna untuk sementara saat teks tersebut ditampilkan di kotak teks bersama kueri yang cocok dengan saran yang sedang difokus. Dengan begitu, pengguna dapat melihat kueri yang disarankan, dan mereka dapat memilih kotak penelusuran dan mengedit kueri sebelum mengirimkannya sebagai penelusuran.
Anda dapat menulis ulang teks kueri dengan cara berikut:
- Tambahkan atribut
android:searchMode
ke konfigurasi penelusuran Anda dengan nilai"queryRewriteFromText"
. Dalam hal ini, isi kolomSUGGEST_COLUMN_TEXT_1
saran akan digunakan untuk menulis ulang teks kueri. - Tambahkan atribut
android:searchMode
ke konfigurasi penelusuran Anda dengan nilai"queryRewriteFromData"
. Dalam hal ini, isi kolomSUGGEST_COLUMN_INTENT_DATA
saran akan digunakan untuk menulis ulang teks kueri. Hanya gunakan ini dengan URI atau format data lain yang dimaksudkan untuk dapat dilihat pengguna, seperti URL HTTP. Jangan gunakan skema URI internal untuk menulis ulang kueri dengan cara ini. - Berikan string teks kueri unik di kolom
SUGGEST_COLUMN_QUERY
tabel saran Anda. Jika kolom ini ada dan berisi nilai untuk saran saat ini, kolom ini akan digunakan untuk menulis ulang teks kueri dan mengganti salah satu implementasi sebelumnya.
Menyediakan saran penelusuran ke Kotak Penelusuran Kilat
Setelah mengonfigurasi aplikasi Anda agar memberikan saran penelusuran kustom, menyediakan saran tersebut bagi Kotak Penelusuran Kilat yang dapat diakses secara global dapat dilakukan dengan hanya mengubah konfigurasi penelusuran Anda agar menyertakan
android:includeInGlobalSearch
dengan nilai
"true"
.
Satu-satunya skenario yang memerlukan kerja tambahan adalah jika penyedia konten Anda meminta izin baca. Dalam hal ini, Anda perlu menambahkan elemen
<path-permission>
agar penyedia memberi Kotak Penelusuran Kilat akses baca ke penyedia konten Anda, seperti yang ditunjukkan dalam contoh berikut:
<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>
Dalam contoh ini, penyedia membatasi akses baca dan tulis ke konten.
Elemen <path-permission>
mengubah pembatasan itu dengan memberikan akses baca ke konten yang berada di dalam awalan jalur "/search_suggest_query"
jika izin "android.permission.GLOBAL_SEARCH"
ada. Cara ini memberikan akses ke Kotak Penelusuran Kilat sehingga dapat mengkueri penyedia konten Anda untuk mendapatkan saran.
Jika penyedia konten Anda tidak menerapkan izin baca, Kotak Penelusuran Kilat akan membacanya secara default.
Mengaktifkan saran di perangkat
Secara default, aplikasi tidak diaktifkan untuk memberikan saran di Kotak Penelusuran Kilat, meskipun dikonfigurasi untuk melakukannya. Pengguna memilih apakah akan menyertakan saran dari aplikasi Anda di Kotak Penelusuran Kilat atau tidak dengan membuka Item yang dapat ditelusuri—yang ada di Setelan > Penelusuran—dan mengaktifkan aplikasi Anda sebagai item yang dapat ditelusuri.
Setiap aplikasi yang tersedia untuk Kotak Penelusuran Kilat memiliki entri di halaman setelan Item yang dapat ditelusuri. Entri ini menyertakan nama aplikasi dan deskripsi singkat tentang konten yang dapat ditelusuri dari aplikasi tersebut dan disediakan sebagai saran di Kotak Penelusuran Kilat. Untuk menentukan teks deskripsi
bagi aplikasi yang dapat ditelusuri, tambahkan atribut android:searchSettingsDescription
ke konfigurasi penelusuran Anda, seperti yang ditunjukkan dalam contoh
berikut:
<?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>
Buat string untuk android:searchSettingsDescription
sesingkat mungkin dan nyatakan konten yang dapat ditelusuri. Misalnya, "Artis, album, dan lagu" untuk aplikasi musik, atau "Catatan tersimpan" untuk aplikasi notepad.
Pemberian deskripsi ini penting agar pengguna mengetahui jenis saran yang diberikan. Selalu sertakan atribut ini jika
android:includeInGlobalSearch
bernilai benar.
Karena pengguna harus membuka menu setelan untuk mengaktifkan saran penelusuran untuk aplikasi Anda, jika penelusuran merupakan aspek penting dari aplikasi Anda, pertimbangkan cara menyampaikannya kepada pengguna. Misalnya, saat pengguna meluncurkan aplikasi untuk pertama kalinya, Anda dapat memberikan catatan yang menjelaskan cara mengaktifkan saran penelusuran untuk Kotak Penelusuran Kilat.
Mengelola pintasan saran Kotak Penelusuran Kilat
Saran yang dipilih pengguna dari Kotak Penelusuran Kilat dapat otomatis dibuat menjadi pintasan. Ini adalah saran yang disalin sistem dari penyedia konten Anda, sehingga dapat mengakses saran dengan cepat tanpa perlu mengkueri ulang penyedia konten Anda.
Secara default, setelan ini diaktifkan untuk semua saran yang diambil oleh Kotak Penelusuran Kilat, tetapi jika data saran Anda berubah dari waktu ke waktu, maka Anda dapat meminta agar pintasan di-refresh. Misalnya, jika saran Anda merujuk pada data dinamis, seperti status kehadiran kontak, sebaiknya minta agar pintasan saran di-refresh saat ditampilkan kepada pengguna. Untuk melakukannya, sertakan
SUGGEST_COLUMN_SHORTCUT_ID
dalam tabel saran Anda. Anda dapat menggunakan
kolom ini untuk mengonfigurasi perilaku pintasan untuk setiap saran melalui salah satu cara berikut:
Meminta Kotak Penelusuran Kilat mengkueri ulang penyedia konten Anda agar memberikan versi baru pintasan saran.
Berikan nilai dalam kolom
SUGGEST_COLUMN_SHORTCUT_ID
agar saran dikueri ulang untuk memberikan versi baru setiap kali pintasan ditampilkan. Pintasan ditampilkan dengan cepat bersama data apa pun yang terakhir tersedia sampai kueri refresh ditampilkan, yang pada saat itu saran di-refresh dengan informasi baru. Kueri refresh dikirim ke penyedia konten Anda dengan jalur URISUGGEST_URI_PATH_SHORTCUT
, bukanSUGGEST_URI_PATH_QUERY
.Buat
Cursor
yang Anda tampilkan berisi satu saran yang menggunakan kolom yang sama dengan saran aslinya atau kosong, yang menunjukkan bahwa pintasan tidak lagi valid—dalam hal ini, saran menghilang dan pintasan akan dihapus.Jika saran mengacu pada data yang perlu waktu lama untuk di-refresh, seperti refresh berbasis jaringan, Anda juga dapat menambahkan kolom
SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING
ke tabel saran dengan nilai benar (true) agar dapat menampilkan spinner progres untuk ikon di sebelah kanan hingga refresh selesai. Nilai apa pun selain benar tidak akan menampilkan spinner progres.Mencegah saran disalin ke pintasan.
Berikan nilai
SUGGEST_NEVER_MAKE_SHORTCUT
dalam kolomSUGGEST_COLUMN_SHORTCUT_ID
. Dalam hal ini, saran tidak akan pernah disalin ke pintasan. Tindakan ini hanya diperlukan jika Anda benar-benar tidak ingin saran yang disalin sebelumnya ditampilkan. Jika Anda memberikan nilai normal untuk kolom ini, maka pintasan saran hanya muncul sampai kueri refresh ditampilkan.Biarkan perilaku pintasan default diterapkan.
Biarkan
SUGGEST_COLUMN_SHORTCUT_ID
kosong untuk setiap saran yang tidak berubah dan dapat disimpan sebagai pintasan.
Jika tidak ada saran yang berubah, Anda tidak memerlukan kolom
SUGGEST_COLUMN_SHORTCUT_ID
.
Tentang peringkat saran Kotak Penelusuran Kilat
Setelah Anda menyediakan saran penelusuran aplikasi Anda untuk Kotak Penelusuran Kilat, peringkat Kotak Penelusuran Kilat menentukan bagaimana saran tersebut ditampilkan kepada pengguna untuk kueri tertentu. Hal ini dapat dipengaruhi oleh banyaknya aplikasi lain yang memiliki hasil untuk kueri tersebut dan seberapa sering pengguna memilih hasil dari aplikasi Anda dibandingkan dengan hasil dari aplikasi lain. Tidak ada jaminan terkait cara memeringkatkan saran Anda atau apakah saran aplikasi Anda akan ditampilkan untuk kueri tertentu. Secara umum, jika Anda memberikan hasil yang berkualitas, peluang bagi saran aplikasi Anda untuk ditampilkan di posisi yang menonjol akan lebih besar. Sebaliknya, aplikasi yang memberikan saran tidak berkualitas lebih mungkin untuk menempati peringkat yang rendah atau tidak ditampilkan.