Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Membatasi interaksi dengan aplikasi lain

Izin tidak hanya untuk meminta fungsi sistem. Anda juga dapat membatasi cara aplikasi lain berinteraksi dengan komponen aplikasi Anda.

Panduan ini menjelaskan cara melihat 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. Terakhir, halaman ini memberikan panduan tentang beberapa cara lain untuk menerapkan pola interaksi antar-aplikasi.

Melihat izin aplikasi lain

Untuk melihat kumpulan izin yang dideklarasikan aplikasi lain, gunakan perangkat atau emulator untuk menyelesaikan langkah-langkah berikut:

  1. Buka layar Info aplikasi di aplikasi.
  2. 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.

Membatasi interaksi dengan aktivitas aplikasi Anda

Izin yang diterapkan menggunakan atribut android:permission pada tag <activity> di dalam manifes membatasi pengguna yang dapat memulai Activity tersebut. Izin diperiksa selama Context.startActivity() dan Activity.startActivityForResult(). Jika pemanggil tidak memiliki izin yang diperlukan, maka SecurityException akan muncul.

Membatasi interaksi dengan layanan aplikasi Anda

Izin yang diterapkan menggunakan atribut android:permission pada tag <service> di dalam manifes membatasi pengguna yang dapat memulai atau melakukan binding ke Service yang diatribusi. Izin diperiksa selama Context.startService(), Context.stopService(), dan Context.bindService(). Jika pemanggil tidak memiliki izin yang diperlukan, maka SecurityException akan muncul.

Membatasi interaksi dengan penyedia konten aplikasi Anda

Izin yang diterapkan menggunakan atribut android:permission pada tag <provider> membatasi pengguna yang dapat mengakses data di ContentProvider. (Penyedia konten memiliki fasilitas keamanan tambahan penting yang tersedia untuk bagi mereka bernama izin URI yang akan dijelaskan selanjutnya.) Tidak seperti komponen lain, ada dua atribut izin terpisah yang dapat Anda atur: android:readPermission membatasi siapa yang dapat membaca dari penyedia, dan android:writePermission membatasi siapa yang dapat menulisnya. Perhatikan bahwa jika penyedia dilindungi dengan izin membaca dan menulis, memegang izin menulis saja tidak berarti Anda dapat membaca dari penyedia.

Izin diperiksa saat Anda pertama kali mengambil penyedia (jika Anda tidak memiliki izin apa pun, SecurityException akan muncul), dan saat Anda menjalankan operasi pada penyedia. Penggunaan ContentResolver.query() memerlukan izin baca; penggunaan ContentResolver.insert(), ContentResolver.update(), atau ContentResolver.delete() memerlukan izin tulis. Dalam semua kasus ini, tidak memegang izin yang diperlukan akan menghasilkan SecurityException.

Mengizinkan 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 langsung penyedia 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 pada basis per URI. Saat memulai suatu aktivitas atau menampilkan hasil ke suatu aktivitas, tetapkan Intent.FLAG_GRANT_READ_URI_PERMISSION, flag intent, Intent.FLAG_GRANT_WRITE_URI_PERMISSION, flag intent, atau kedua flag. Tindakan ini memberikan izin baca, tulis, dan baca/tulis aplikasi lain masing-masing 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, anggap seorang pengguna sedang melihat email di aplikasi Anda dan email ini menyertakan gambar sebagai lampiran. Aplikasi lain seharusnya tidak dapat mengakses konten email secara umum, tetapi aplikasi tersebut mungkin tertarik untuk melihat gambar. Aplikasi Anda dapat menggunakan intent dan flag intent Intent.FLAG_GRANT_READ_URI_PERMISSION agar aplikasi yang melihat gambar dapat melihat gambar.

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, tetapi aplikasi lain akan disembunyikan secara default. Jika aplikasi Anda memiliki penyedia konten dan telah memberikan izin URI ke aplikasi lain, aplikasi Anda akan otomatis terlihat oleh aplikasi lain.

Untuk informasi selengkapnya, lihat materi referensi untuk metode grantUriPermission(), revokeUriPermission(), dan checkUriPermission().

Membatasi interaksi dengan penerima siaran aplikasi Anda

Izin yang diterapkan menggunakan atribut android:permission pada tag <receiver> membatasi pengguna yang dapat mengirim siaran ke BroadcastReceiver yang diatribusi. Izin diperiksa setelah Context.sendBroadcast() ditampilkan, karena sistem mencoba untuk mengirim siaran yang dikirim ke penerima yang dituju. Akibatnya, kegagalan izin tidak menghasilkan pengecualian yang dikembalikan ke pemanggil; melainkan hanya tidak menayangkan Intent.

Dengan cara yang sama, sebuah izin dapat diberikan ke Context.registerReceiver() untuk mengontrol siapa yang dapat melakukan siaran ke penerima yang terdaftar lewat program. Sebaliknya, izin dapat diberikan saat memanggil Context.sendBroadcast() untuk membatasi penerima siaran yang diizinkan untuk menerima siaran.

Perhatikan bahwa baik penerima maupun penyiar dapat memerlukan izin. Saat hal ini terjadi, kedua pemeriksaan izin harus lolos agar intent dapat dikirim ke target yang sesuai. Untuk informasi selengkapnya, lihat Membatasi siaran dengan izin.

Pemeriksaan izin lainnya

Ada sejumlah cara berguna lainnya untuk memeriksa izin:

  • Selama panggilan ke layanan, teruskan string izin ke Context.checkCallingPermission(). Metode ini menampilkan integer 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 cara lain yang diberikan ke proses lain.
  • Untuk memeriksa apakah proses lain telah diberi izin tertentu, teruskan proses (PID) ke Context.checkPermission().
  • Untuk memeriksa apakah paket lain telah diberi izin tertentu, masukkan nama paket ke PackageManager.checkPermission().