Izin tidak hanya bertujuan untuk meminta fungsi sistem. Anda juga dapat membatasi cara aplikasi lain berinteraksi dengan komponen aplikasi Anda.
Panduan ini menjelaskan cara memeriksa kumpulan izin yang telah dideklarasikan aplikasi lain. Panduan ini juga menjelaskan cara mengonfigurasi aktivitas, layanan, penyedia konten, dan penerima siaran untuk membatasi cara aplikasi lain berinteraksi dengan aplikasi Anda.
Memeriksa izin aplikasi lain
Untuk melihat kumpulan izin yang dideklarasikan aplikasi lain, gunakan perangkat atau emulator untuk menyelesaikan langkah-langkah berikut:
- Buka layar Info aplikasi di aplikasi.
- Pilih Izin. Layar Izin aplikasi akan dimuat. - Layar ini menampilkan kumpulan grup izin. Sistem mengatur kumpulan izin yang telah dideklarasikan aplikasi ke dalam grup ini. 
Ada sejumlah cara berguna lainnya untuk memeriksa izin:
- Untuk memeriksa izin selama panggilan ke layanan, teruskan string izin
ke Context.checkCallingPermission(). Metode ini menampilkan bilangan bulat yang menunjukkan apakah izin tersebut telah diberikan untuk proses panggilan saat ini. Perhatikan bahwa hal ini hanya dapat digunakan jika Anda mengeksekusi panggilan yang datang dari proses lain, biasanya melalui antarmuka IDL yang dipublikasikan dari layanan atau diberikan dengan cara lain ke proses lain.
- Untuk memeriksa apakah proses lain telah diberi izin tertentu, teruskan ID proses (PID) ke Context.checkPermission().
- Untuk memeriksa apakah paket lain telah diberi izin tertentu,
teruskan nama paket ke PackageManager.checkPermission().
Membatasi interaksi dengan aktivitas aplikasi Anda
Dalam manifes, gunakan atribut android:permission tag <activity>
untuk membatasi aplikasi lain mana yang dapat memulai Activity tersebut. Izin diperiksa selama Context.startActivity() dan
Activity.startActivityForResult(). Jika pemanggil tidak memiliki izin yang diperlukan, SecurityException akan terjadi.
Membatasi interaksi dengan layanan aplikasi Anda
Dalam manifes, gunakan atribut android:permission tag <service>
untuk membatasi aplikasi lain mana yang dapat memulai atau mengikat ke
Service terkait. Izin diperiksa selama
Context.startService(), Context.stopService(), dan
Context.bindService(). Jika pemanggil tidak memiliki izin yang diperlukan, maka SecurityException akan terjadi.
Membatasi interaksi dengan penyedia konten aplikasi Anda
Dalam manifes, gunakan atribut android:permission tag <provider>
untuk membatasi aplikasi lain mana yang dapat mengakses data dalam ContentProvider.
(Penyedia konten memiliki fasilitas keamanan tambahan penting yang tersedia bagi mereka yang disebut izin URI, yang dijelaskan di bagian berikutnya.)
Tidak seperti komponen lainnya, ada dua atribut izin terpisah
yang dapat Anda tetapkan untuk penyedia konten: android:readPermission membatasi
aplikasi lain mana yang dapat membaca dari penyedia, dan android:writePermission
membatasi aplikasi lain mana yang dapat menulis ke penyedia. Perhatikan bahwa jika penyedia dilindungi dengan
izin baca dan tulis, memiliki izin tulis saja tidak
akan mengizinkan aplikasi membaca dari penyedia.
Izin diperiksa saat penyedia pertama kali diambil dan saat aplikasi
menjalankan operasi pada penyedia. Jika aplikasi yang meminta tidak memiliki
izin apa pun, SecurityException akan terjadi. Penggunaan ContentResolver.query()
memerlukan izin baca; penggunaan ContentResolver.insert(),
ContentResolver.update(), atau ContentResolver.delete() memerlukan
izin tulis. Dalam semua kasus ini, tidak memiliki izin yang diperlukan akan menghasilkan SecurityException.
Memberikan akses per URI
Sistem ini memberi Anda kontrol tambahan yang terperinci tentang cara aplikasi lain
dapat mengakses penyedia konten aplikasi Anda. Secara khusus, penyedia konten Anda
dapat melindungi dirinya sendiri dengan izin baca dan tulis sekaligus tetap mengizinkan
klien langsungnya untuk berbagi URI tertentu dengan aplikasi lain. Untuk mendeklarasikan dukungan aplikasi Anda terhadap model ini, gunakan atribut android:grantUriPermissions atau elemen <grant-uri-permission>.
Anda juga dapat memberikan izin per URI. Saat memulai suatu aktivitas atau
menampilkan hasil ke suatu aktivitas, tetapkan
flag intent Intent.FLAG_GRANT_READ_URI_PERMISSION, flag intent
Intent.FLAG_GRANT_WRITE_URI_PERMISSION, atau kedua flag tersebut. Tindakan ini
memberikan izin baca, tulis, atau baca dan tulis kepada aplikasi lain untuk
URI data yang disertakan dalam intent. Aplikasi lain mendapatkan izin ini untuk URI tertentu, terlepas dari apakah aplikasi tersebut memiliki izin untuk mengakses data di penyedia konten secara lebih umum.
Misalnya, anggaplah pengguna menggunakan aplikasi Anda untuk melihat email dengan
lampiran gambar. Aplikasi lain seharusnya tidak dapat mengakses konten email secara umum, tetapi aplikasi tersebut mungkin tertarik untuk melihat gambar itu. Aplikasi Anda dapat menggunakan
intent dan flag intent Intent.FLAG_GRANT_READ_URI_PERMISSION untuk memungkinkan
aplikasi yang melihat gambar melihat gambar itu.
Pertimbangan lainnya adalah visibilitas aplikasi. Jika aplikasi Anda menargetkan Android 11 (API level 30) atau yang lebih baru, sistem akan membuat beberapa aplikasi otomatis terlihat oleh aplikasi Anda dan menyembunyikan aplikasi lainnya secara default. Jika aplikasi Anda memiliki penyedia konten dan telah memberikan izin URI ke aplikasi lain, aplikasi Anda akan otomatis terlihat oleh aplikasi lain tersebut.
Untuk informasi selengkapnya, lihat materi referensi untuk metode
grantUriPermission(), revokeUriPermission(), dan
checkUriPermission().
Membatasi interaksi dengan penerima siaran aplikasi Anda
Gunakan atribut android:permission tag <receiver> untuk
membatasi aplikasi lain yang dapat mengirim siaran ke
BroadcastReceiver terkait. Sistem memeriksa izin setelah
Context.sendBroadcast() ditampilkan, karena sistem mencoba untuk mengirim siaran yang dikirim ke penerima yang dituju. Ini berarti bahwa kegagalan
izin tidak menghasilkan pengecualian yang dikembalikan ke pemanggil—melainkan hanya
menyebabkan tidak dikirimkannya Intent.
Anda juga dapat mengonfigurasi izin secara terprogram:
- Untuk mengontrol aplikasi lain yang dapat disiarkan ke penerima yang terdaftar secara terprogram: Berikan izin ke
Context.registerReceiver().
- Untuk membatasi penerima siaran yang dapat menerima siaran: Berikan
izin saat memanggil Context.sendBroadcast().
Perhatikan bahwa baik penerima maupun penyiar dapat memerlukan izin. Jika hal ini terjadi, kedua pemeriksaan izin harus lolos agar intent dapat dikirim ke target yang sesuai. Untuk mengetahui informasi selengkapnya, lihat Membatasi siaran dengan izin.
