Setelan Cepat adalah kartu yang ditampilkan di panel Setelan Cepat,
yang merepresentasikan tindakan, yang dapat diketuk pengguna untuk menyelesaikan tugas berulang dengan cepat.
Aplikasi Anda dapat menyediakan kartu kustom kepada pengguna melalui class TileService
, dan menggunakan objek Tile
untuk melacak status kartu. Misalnya,
Anda dapat membuat kartu yang memungkinkan pengguna mengaktifkan atau menonaktifkan VPN yang disediakan oleh aplikasi Anda.

Tentukan kapan harus membuat kartu
Sebaiknya buat kartu untuk fungsi tertentu yang Anda harapkan sering diakses pengguna atau perlu diakses dengan cepat (atau keduanya). Kartu yang paling efektif adalah kartu yang memenuhi kedua kualitas ini, yang memberikan akses cepat ke tindakan yang sering dilakukan.
Misalnya, Anda dapat membuat kartu untuk aplikasi kebugaran yang memungkinkan pengguna memulai sesi latihan dengan cepat. Namun, kami tidak merekomendasikan pembuatan kartu untuk aplikasi yang sama yang memungkinkan pengguna meninjau seluruh histori latihan mereka.

Untuk membantu meningkatkan visibilitas dan kemudahan penggunaan kartu, sebaiknya hindari praktik tertentu:
Hindari penggunaan kartu untuk meluncurkan aplikasi. Sebagai gantinya, gunakan pintasan aplikasi atau peluncur standar.
Hindari penggunaan kartu untuk tindakan pengguna satu kali. Gunakan pintasan aplikasi atau notifikasi sebagai gantinya.
Hindari membuat terlalu banyak kartu. Sebaiknya gunakan maksimal dua per aplikasi. Sebagai gantinya, gunakan pintasan aplikasi.
Hindari penggunaan kartu yang menampilkan informasi, tetapi tidak interaktif bagi pengguna. Gunakan notifikasi atau widget sebagai gantinya.
Membuat kartu Anda
Untuk membuat kartu, Anda harus membuat ikon kartu yang sesuai terlebih dahulu, lalu
membuat dan mendeklarasikan TileService
di file manifes aplikasi.
Contoh Setelan Cepat memberikan contoh cara membuat dan mengelola kartu.
Membuat ikon kustom
Anda harus menyediakan ikon kustom, yang ditampilkan di kartu pada panel Setelan Cepat. (Anda akan menambahkan ikon ini saat mendeklarasikan TileService
,
yang dijelaskan di bagian berikutnya.) Ikon harus berwarna putih solid dengan latar belakang transparan, berukuran 24 x 24 dp, dan berbentuk VectorDrawable
.

Buat ikon yang secara visual mengisyaratkan tujuan kartu Anda. Hal ini membantu pengguna mengidentifikasi dengan mudah apakah kartu Anda sesuai dengan kebutuhan mereka. Misalnya, Anda dapat membuat ikon stopwatch untuk kartu aplikasi kebugaran yang memungkinkan pengguna memulai sesi latihan.
Membuat dan mendeklarasikan TileService
Buat layanan untuk kartu Anda yang memperluas class TileService
.
Kotlin
class MyQSTileService: TileService() { // Called when the user adds your tile. override fun onTileAdded() { super.onTileAdded() } // Called when your app can update your tile. override fun onStartListening() { super.onStartListening() } // Called when your app can no longer update your tile. override fun onStopListening() { super.onStopListening() } // Called when the user taps on your tile in an active or inactive state. override fun onClick() { super.onClick() } // Called when the user removes your tile. override fun onTileRemoved() { super.onTileRemoved() } }
Java
public class MyQSTileService extends TileService { // Called when the user adds your tile. @Override public void onTileAdded() { super.onTileAdded(); } // Called when your app can update your tile. @Override public void onStartListening() { super.onStartListening(); } // Called when your app can no longer update your tile. @Override public void onStopListening() { super.onStopListening(); } // Called when the user taps on your tile in an active or inactive state. @Override public void onClick() { super.onClick(); } // Called when the user removes your tile. @Override public void onTileRemoved() { super.onTileRemoved(); } }
Deklarasikan TileService
di file manifes aplikasi Anda. Tambahkan nama dan label
TileService
, ikon kustom yang Anda buat di bagian sebelumnya,
dan izin yang sesuai.
<service
android:name=".MyQSTileService"
android:exported="true"
android:label="@string/my_default_tile_label" // 18-character limit.
android:icon="@drawable/my_default_icon_label"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
Mengelola TileService Anda
Setelah membuat dan mendeklarasikan TileService
di manifes aplikasi, Anda harus mengelola statusnya.
TileService
adalah layanan terikat. TileService
Anda terikat saat
diminta oleh aplikasi Anda atau jika sistem perlu berkomunikasi dengannya. Siklus proses layanan terikat yang umum berisi empat metode callback berikut:
onCreate()
, onBind()
, onUnbind()
, dan
onDestroy()
. Metode ini dipanggil oleh sistem setiap kali
layanan memasuki fase siklus proses baru.
Ringkasan siklus proses TileService
Selain callback yang mengontrol siklus proses layanan terikat, Anda harus menerapkan metode lain yang khusus untuk siklus proses TileService
. Metode ini dapat dipanggil di luar onCreate()
dan onDestroy()
karena metode siklus proses Service
dan metode siklus proses TileService
dipanggil dalam dua thread asinkron terpisah.
Siklus proses TileService
berisi metode berikut, yang dipanggil oleh sistem setiap kali TileService
Anda memasuki fase siklus proses baru:
onTileAdded()
: Metode ini hanya dipanggil saat pengguna menambahkan kartu Anda untuk pertama kalinya, dan jika pengguna menghapus dan menambahkan kartu Anda lagi. Ini adalah waktu terbaik untuk melakukan inisialisasi satu kali. Namun, hal ini mungkin tidak memenuhi semua inisialisasi yang diperlukan.onStartListening()
danonStopListening()
: Metode ini dipanggil setiap kali aplikasi Anda memperbarui kartu, dan sering dipanggil.TileService
tetap terikat antaraonStartListening()
danonStopListening()
, sehingga aplikasi Anda dapat mengubah kartu dan mengirimkan update.onTileRemoved()
: Metode ini hanya dipanggil jika pengguna menghapus kartu Anda.
Pilih mode mendengarkan
TileService
Anda mendengarkan dalam mode aktif atau mode tidak aktif. Sebaiknya gunakan mode aktif, yang harus Anda deklarasikan dalam manifes aplikasi. Jika tidak,
TileService
adalah mode standar dan tidak perlu dideklarasikan.
Jangan berasumsi bahwa TileService
Anda akan berada di luar pasangan metode onStartListening()
dan onStopListening()
.
Mode aktif (direkomendasikan)
Gunakan mode aktif untuk TileService
yang memantau dan memantau statusnya dalam prosesnya sendiri. TileService
dalam mode aktif terikat untuk onTileAdded()
,
onTileRemoved()
, peristiwa ketuk, dan saat diminta oleh proses aplikasi.
Sebaiknya gunakan mode aktif jika TileService
diberi tahu saat status kartu
harus diperbarui oleh prosesnya sendiri. Petak aktif membatasi beban pada sistem karena petak tersebut tidak perlu diikat setiap kali panel Setelan Cepat terlihat oleh pengguna.
Metode statis TileService.requestListeningState()
dapat dipanggil untuk
meminta dimulainya status pemrosesan dan menerima callback ke
onStartListening()
.
Anda dapat mendeklarasikan mode aktif dengan menambahkan META_DATA_ACTIVE_TILE
ke file manifes aplikasi Anda.
<service ...>
<meta-data android:name="android.service.quicksettings.ACTIVE_TILE"
android:value="true" />
...
</service>
Mode tidak aktif
Mode tidak aktif adalah mode standar. TileService
berada dalam mode tidak aktif jika
terikat setiap kali kartu Anda terlihat oleh pengguna. Artinya,
TileService
Anda dapat dibuat dan diikat lagi di luar kendalinya. Objek ini juga dapat tidak terikat dan dihancurkan saat pengguna tidak melihat kartu.
Aplikasi Anda menerima panggilan balik ke onStartListening()
setelah pengguna membuka panel Setelan Cepat. Anda dapat memperbarui objek Tile
sesering yang Anda
inginkan antara onStartListening()
dan onStopListening()
.
Anda tidak perlu mendeklarasikan mode tidak aktif—cukup jangan tambahkan
META_DATA_ACTIVE_TILE
ke file manifes aplikasi Anda.
Ringkasan status kartu
Setelah pengguna menambahkan kartu Anda, kartu tersebut akan selalu berada dalam salah satu status berikut.
STATE_ACTIVE
: Menunjukkan status aktif atau diaktifkan. Pengguna dapat berinteraksi dengan kartu Anda saat dalam status ini.Misalnya, untuk kartu aplikasi kebugaran yang memungkinkan pengguna memulai sesi latihan fisik yang diatur waktunya,
STATE_ACTIVE
berarti pengguna telah memulai sesi latihan fisik dan timer sedang berjalan.STATE_INACTIVE
: Menunjukkan status nonaktif atau dijeda. Pengguna dapat berinteraksi dengan kartu Anda saat dalam status ini.Untuk menggunakan contoh kartu aplikasi kebugaran lagi, kartu di
STATE_INACTIVE
akan berarti pengguna belum memulai sesi latihan, tetapi dapat melakukannya jika mereka mau.STATE_UNAVAILABLE
: Menunjukkan status tidak tersedia untuk sementara. Pengguna tidak dapat berinteraksi dengan kartu Anda saat dalam status ini.Misalnya, kartu di
STATE_UNAVAILABLE
berarti kartu tersebut saat ini tidak tersedia untuk pengguna karena alasan tertentu.
Sistem hanya menyetel status awal objek Tile
Anda. Anda menetapkan status objek Tile
selama siklus prosesnya.
Sistem dapat mewarnai ikon dan latar belakang kartu untuk mencerminkan status objek
Tile
Anda. Objek Tile
yang disetel ke STATE_ACTIVE
adalah yang paling gelap, dengan
STATE_INACTIVE
dan STATE_UNAVAILABLE
yang semakin terang. Hue yang tepat
khusus untuk produsen dan versi.

Memperbarui kartu
Anda dapat memperbarui kartu setelah menerima callback ke onStartListening()
.
Bergantung pada mode ubin, ubin Anda dapat diperbarui setidaknya sekali hingga menerima panggilan balik ke onStopListening()
.
Dalam mode aktif, Anda dapat memperbarui kartu tepat satu kali sebelum menerima
callback ke onStopListening()
. Dalam mode tidak aktif, Anda dapat memperbarui kartu Anda sesering yang Anda inginkan antara onStartListening()
dan onStopListening()
.
Anda dapat mengambil objek Tile
dengan memanggil getQsTile()
. Untuk memperbarui
kolom tertentu dari objek Tile
, panggil metode berikut:
Anda harus memanggil updateTile()
untuk memperbarui kartu setelah selesai menetapkan
kolom objek Tile
ke nilai yang benar. Tindakan ini akan membuat sistem
mengurai data kartu yang diperbarui dan memperbarui UI.
Kotlin
data class StateModel(val enabled: Boolean, val label: String, val icon: Icon) override fun onStartListening() { super.onStartListening() val state = getStateFromService() qsTile.label = state.label qsTile.contentDescription = tile.label qsTile.state = if (state.enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE qsTile.icon = state.icon qsTile.updateTile() }
Java
public class StateModel { final boolean enabled; final String label; final Icon icon; public StateModel(boolean e, String l, Icon i) { enabled = e; label = l; icon = i; } } @Override public void onStartListening() { super.onStartListening(); StateModel state = getStateFromService(); Tile tile = getQsTile(); tile.setLabel(state.label); tile.setContentDescription(state.label); tile.setState(state.enabled ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); tile.setIcon(state.icon); tile.updateTile(); }
Menangani ketukan
Pengguna dapat mengetuk kartu Anda untuk memicu tindakan jika kartu Anda berada di
STATE_ACTIVE
atau STATE_INACTIVE
. Sistem kemudian memanggil callback
onClick()
aplikasi Anda.
Setelah menerima callback ke onClick()
, aplikasi Anda dapat meluncurkan dialog atau
aktivitas, memicu tugas latar belakang, atau mengubah status kartu.
Kotlin
var clicks = 0 override fun onClick() { super.onClick() counter++ qsTile.state = if (counter % 2 == 0) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE qsTile.label = "Clicked $counter times" qsTile.contentDescription = qsTile.label qsTile.updateTile() }
Java
int clicks = 0; @Override public void onClick() { super.onClick(); counter++; Tile tile = getQsTile(); tile.setState((counter % 2 == 0) ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); tile.setLabel("Clicked " + counter + " times"); tile.setContentDescription(tile.getLabel()); tile.updateTile(); }
Meluncurkan dialog
showDialog()
menciutkan panel Setelan Cepat dan menampilkan dialog.
Gunakan dialog untuk menambahkan konteks pada tindakan Anda jika memerlukan input tambahan
atau izin pengguna.
Meluncurkan aktivitas
startActivityAndCollapse()
memulai aktivitas sambil menciutkan
panel. Aktivitas berguna jika ada informasi yang lebih mendetail untuk ditampilkan daripada dalam dialog, atau jika tindakan Anda sangat interaktif.
Jika aplikasi Anda memerlukan interaksi pengguna yang signifikan, aplikasi hanya boleh meluncurkan aktivitas sebagai upaya terakhir. Sebagai gantinya, pertimbangkan untuk menggunakan dialog atau tombol.
Menyentuh lama kartu akan menampilkan layar Info Aplikasi untuk pengguna. Untuk mengganti
perilaku ini dan meluncurkan aktivitas untuk menyetel preferensi, tambahkan
<intent-filter>
ke salah satu aktivitas Anda dengan
ACTION_QS_TILE_PREFERENCES
.
Mulai Android API 28, PendingIntent
harus
memiliki Intent.FLAG_ACTIVITY_NEW_TASK
:
if (Build.VERSION.SDK_INT >= 28) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
Atau, Anda dapat menambahkan tanda di AndroidManifest.xml
di bagian Activity
tertentu.
Menandai kartu Anda sebagai dapat diaktifkan/dinonaktifkan
Sebaiknya tandai kartu Anda sebagai dapat dialihkan jika fungsinya terutama sebagai tombol dua status (yang merupakan perilaku kartu paling umum). Hal ini membantu memberikan informasi tentang perilaku kartu ke sistem operasi dan meningkatkan aksesibilitas secara keseluruhan.
Tetapkan metadata TOGGLEABLE_TILE
ke true
untuk menandai kartu Anda sebagai dapat diaktifkan/dinonaktifkan.
<service ...>
<meta-data android:name="android.service.quicksettings.TOGGLEABLE_TILE"
android:value="true" />
</service>
Hanya melakukan tindakan yang aman pada perangkat yang terkunci dengan aman
Kartu Anda dapat ditampilkan di atas layar kunci pada perangkat yang terkunci. Jika kartu berisi informasi sensitif, periksa nilai isSecure()
untuk menentukan apakah perangkat dalam keadaan aman, dan TileService
Anda harus mengubah perilakunya sesuai dengan itu.
Jika tindakan kartu aman dilakukan saat terkunci, gunakan startActivity()
untuk meluncurkan aktivitas di atas layar kunci.
Jika tindakan kartu tidak aman, gunakan unlockAndRun()
untuk meminta pengguna
membuka kunci perangkat mereka. Jika berhasil, sistem akan menjalankan objek
Runnable
yang Anda teruskan ke
metode ini.
Meminta pengguna untuk menambahkan kartu Anda
Untuk menambahkan kartu secara manual, pengguna harus mengikuti beberapa langkah:
- Geser ke bawah untuk membuka panel Setelan Cepat.
- Ketuk tombol edit.
- Scroll semua kartu di perangkatnya hingga dia menemukan kartu Anda.
- Tahan kartu Anda, lalu tarik ke daftar kartu aktif.
Pengguna juga dapat memindahkan atau menghapus kartu Anda kapan saja.
Mulai Android 13, Anda dapat menggunakan metode requestAddTileService()
untuk mempermudah pengguna menambahkan kartu Anda ke perangkat. Metode ini akan meminta pengguna untuk menambahkan kartu Anda dengan cepat langsung ke panel Setelan Cepat mereka. Perintah mencakup nama aplikasi, label yang diberikan, dan ikon.

public void requestAddTileService (
ComponentName tileServiceComponentName,
CharSequence tileLabel,
Icon icon,
Executor resultExecutor,
Consumer<Integer> resultCallback
)
Callback berisi informasi tentang apakah kartu ditambahkan, tidak ditambahkan, jika sudah ada, atau jika terjadi error.
Gunakan pertimbangan Anda saat memutuskan kapan dan seberapa sering Anda akan meminta pengguna. Sebaiknya panggil requestAddTileService()
hanya dalam konteks – seperti
saat pengguna pertama kali berinteraksi dengan fitur yang difasilitasi kartu Anda.
Sistem dapat memilih untuk berhenti memproses permintaan untuk ComponentName
tertentu jika telah ditolak oleh pengguna beberapa kali sebelumnya. Pengguna
ditentukan dari Context
yang digunakan untuk mengambil
layanan ini—harus cocok dengan pengguna saat ini.