Saat membuat aplikasi, penting untuk mempertimbangkan aplikasi lain di perangkat yang memerlukan interaksi aplikasi. Jika aplikasi Anda menargetkan Android 11 (API level 30) atau yang lebih baru, sistem akan membuat beberapa aplikasi otomatis terlihat oleh aplikasi Anda, tetapi aplikasi lain akan difilter secara default. Panduan ini menjelaskan cara membuat aplikasi lain tersebut terlihat oleh aplikasi Anda.
Jika aplikasi Anda menargetkan Android 11 atau yang lebih baru dan harus berinteraksi
dengan aplikasi selain yang otomatis terlihat, tambahkan elemen
<queries>
dalam file manifes
aplikasi Anda. Di dalam elemen <queries>
, tentukan aplikasi lain berdasarkan
nama paket, tanda tangan intent,
atau otoritas penyedia, seperti yang dijelaskan di bagian
berikut.
Nama paket tertentu
Jika Anda mengetahui aplikasi tertentu yang ingin dibuat kuerinya atau dilibatkan dalam interaksi, seperti
aplikasi yang dapat terintegrasi dengan aplikasi Anda, atau aplikasi yang layanannya Anda gunakan, sertakan nama paketnya
dalam kumpulan elemen <package>
di dalam elemen <queries>
:
<manifest package="com.example.game"> <queries> <package android:name="com.example.store" /> <package android:name="com.example.services" /> </queries> ... </manifest>
Berkomunikasi dengan aplikasi host dalam library
Jika Anda mengembangkan library Android, Anda dapat mendeklarasikan kebutuhan
visibilitas paket dengan menambahkan elemen <queries>
di file manifes
AAR. Elemen <queries>
ini memiliki
fungsi yang sama seperti elemen yang dapat dideklarasikan oleh aplikasi dalam manifesnya sendiri.
Jika library Anda melibatkan komunikasi dengan aplikasi host, seperti menggunakan layanan
terikat, sertakan elemen <package>
yang menentukan
nama paket aplikasi host:
<!-- Place inside the <queries> element. --> <package android:name=PACKAGE_NAME />
Dengan menyertakan deklarasi ini, Anda dapat memeriksa apakah aplikasi host sudah diinstal dan
berinteraksi dengannya, misalnya dengan memanggil
bindService()
.
Aplikasi pemanggil yang menggunakan library Anda akan otomatis
terlihat oleh aplikasi host
sebagai hasil dari interaksi ini.
Paket yang cocok dengan tanda tangan filter intent
Aplikasi Anda mungkin perlu membuat kueri atau berinteraksi dengan kumpulan aplikasi yang memiliki
tujuan tertentu, tetapi Anda mungkin tidak mengetahui nama paket khusus yang perlu
disertakan. Dalam situasi ini, Anda dapat mencantumkan
tanda tangan filter intent dalam
elemen <queries>
. Aplikasi Anda kemudian dapat menemukan aplikasi yang memiliki
elemen
<intent-filter>
yang cocok.
Contoh kode berikut menunjukkan elemen <intent>
yang akan memungkinkan aplikasi
melihat aplikasi terinstal lainnya yang mendukung berbagi gambar JPEG:
<manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> </queries> ... </manifest>
Elemen <intent>
memiliki beberapa batasan:
- Anda harus menyertakan tepat satu elemen
<action>
. - Anda tidak boleh menggunakan atribut
path
,pathPrefix
,pathPattern
, atauport
dalam elemen<data>
. Sistem berperilaku seolah-olah Anda menetapkan setiap nilai atribut menjadi karakter pengganti generik (*
). - Anda tidak boleh menggunakan atribut
mimeGroup
dari elemen<data>
. Dalam beberapa elemen
<data>
dari satu elemen<intent>
, Anda dapat menggunakan masing-masing atribut berikut paling banyak satu kali:mimeType
scheme
host
Anda dapat mendistribusikan atribut ini di beberapa elemen
<data>
atau menggunakannya dalam satu elemen<data>
.
Elemen <intent>
mendukung nilai karakter pengganti generik (*
) sebagai
nilai untuk beberapa atribut:
- Atribut
name
dari elemen<action>
. - Subjenis atribut
mimeType
dari elemen<data>
(image/*
). - Jenis dan subjenis atribut
mimeType
dari elemen<data>
(*/*
). - Atribut
scheme
dari elemen<data>
. - Atribut
host
dari elemen<data>
.
Kecuali ditentukan lain dalam daftar sebelumnya, sistem tidak mendukung
perpaduan karakter teks dan karakter pengganti, seperti prefix*
.
Paket yang menggunakan otoritas tertentu
Jika Anda perlu membuat kueri ke penyedia
konten tetapi
tidak mengetahui nama paket yang spesifik, Anda dapat mendeklarasikan otoritas penyedia
tersebut dalam elemen <provider>
, seperti
yang ditampilkan dalam cuplikan berikut:
<manifest package="com.example.suite.enterprise"> <queries> <provider android:authorities="com.example.settings.files" /> </queries> ... </manifest>
Anda dapat mendeklarasikan otoritas penyedia dalam satu elemen <queries>
. Dalam
elemen <queries>
, Anda dapat mendeklarasikan satu atau beberapa elemen <provider>
. Elemen
<provider>
dapat menyertakan satu otoritas penyedia atau
daftar otoritas penyedia yang dipisahkan titik koma.
Semua aplikasi (tidak direkomendasikan)
Dalam kasus yang jarang terjadi, aplikasi Anda mungkin perlu membuat kueri atau berinteraksi dengan semua aplikasi terinstal yang ada
di perangkat, terlepas dari komponen yang ada di dalamnya. Agar aplikasi Anda dapat
melihat semua aplikasi lain yang diinstal, sistem memberikan
izin
QUERY_ALL_PACKAGES
.
Beberapa contoh kasus penggunaan ketika izin
QUERY_ALL_PACKAGES
dirasa sesuai untuk disertakan:
- Aplikasi aksesibilitas
- Browser
- Aplikasi pengelolaan perangkat
- Aplikasi keamanan
- Aplikasi antivirus
Namun, biasanya Anda dapat memenuhi kasus penggunaan aplikasi melalui interaksi dengan kumpulan aplikasi yang otomatis terlihat dan deklarasi aplikasi lain yang perlu diakses oleh aplikasi Anda di file manifes. Untuk menghormati privasi pengguna, aplikasi Anda harus meminta tingkat visibilitas paket terendah yang diperlukan agar aplikasi dapat berfungsi.
Pembaruan kebijakan dari Google
Play
ini memberikan pedoman untuk aplikasi yang memerlukan izin QUERY_ALL_PACKAGES
.