Saat membuat aplikasi, penting untuk mempertimbangkan kumpulan aplikasi lainnya yang diinstal di perangkat, yang akan diakses oleh aplikasi Anda. 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 kumpulan spesifik aplikasi 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
fungsionalitas 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 berikut memungkinkan aplikasi Anda melihat aplikasi terinstal yang mendukung fitur 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 sebanyak 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 mengajukan 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 semua otoritas penyedia dalam satu elemen <queries>
. Formatnya
bergantung pada jumlah otoritas penyedia yang Anda deklarasikan:
- Satu elemen <provider>
- Pada elemen, deklarasikan daftar otoritas yang dipisahkan titik koma.
- Beberapa elemen <provider>
- Pada setiap elemen, deklarasikan satu otoritas atau daftar otoritas 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
.
Daftar berikut memberikan beberapa contoh kasus penggunaan ketika izin
QUERY_ALL_PACKAGES
dirasa sesuai untuk disertakan:
- Aplikasi aksesibilitas
- Browser
- Aplikasi pengelolaan perangkat
- Aplikasi keamanan
- Aplikasi antivirus
Namun, dalam sebagian besar kasus, Anda dapat memenuhi kasus penggunaan aplikasi melalui interaksi dengan kumpulan aplikasi yang otomatis terlihat dan deklarasi aplikasi lain yang harus diakses oleh aplikasi Anda di file manifes Anda. 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
.