1. Selamat Datang
Pengantar
Izin aplikasi digunakan untuk memberikan akses ke data dan fungsi selain yang disediakan oleh sandbox aplikasi. Izin ini dapat meningkatkan fungsionalitas aplikasi dengan memungkinkannya mengakses internet, lokasi perangkat, kamera, dan banyak lagi.
Untuk menggunakan kemampuan ini, Anda harus meminta izin dari pengguna. Codelab ini akan memandu Anda melewati langkah-langkah yang diperlukan untuk menambahkan izin runtime dan memeriksa apakah izin tersebut diberikan atau tidak.
Yang Anda butuhkan
- Versi terbaru Android Studio.
Yang harus sudah Anda ketahui
- Kotlin, seperti yang diajarkan di Kotlin Bootcamp
- Keterampilan pengembangan Android dasar, seperti yang diajarkan dalam Mengembangkan Aplikasi Android dengan Kotlin
Yang akan Anda pelajari
- Cara menambahkan izin ke manifes Android.
- Cara meminta izin.
- Cara menangani saat izin diterima dan saat ditolak.
- Cara memeriksa apakah izin telah diberikan.
Yang akan Anda bangun
Anda akan membuat aplikasi yang meminta izin kamera. Anda akan menerapkan bagian izin aplikasi, tetapi bukan bagian kamera.
2. Membuat project Android Studio
- Mulai project Android Studio baru.
- Pilih Empty Activity.

- Beri nama project Permissions Codelab dan setel bahasa ke Kotlin.

3. Menyiapkan kode
- Tambahkan versi terbaru dependensi berikut ke dalam file
build.gradlelevel aplikasi. Hal ini memungkinkan Anda menggunakan libraryActivityyang akan dibahas nanti dalam codelab.
implementation "androidx.activity:activity-ktx:1.2.2"
implementation "androidx.fragment:fragment-ktx:1.3.2"
- Setel opsi build
viewBindingke benar (true) di blok Android untuk mengaktifkan ViewBinding.
android {
...
buildFeatures {
viewBinding true
}
}
- Lalu tekan tombol palu hijau untuk membangun. Tindakan ini akan menghasilkan class binding yang disebut
ActivityMainBindingyang akan Anda gunakan nanti untukViewBinding.

- Buka file
activity_main.xmldan ganti kode dengan kode berikut.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Request Permissions"
android:onClick="onClickRequestPermission"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
- Tambahkan string ini ke dalam file
strings.xml.
<string name="app_name">Permissions Codelab</string>
<string name="permission_required">Camera access is required to display the camera preview.</string>
<string name="ok">OK</string>
<string name="permission_granted">Permission is granted. You can use the camera now.</string>
- Pada
MainActivity.kt, di atas metodeonCreate(), tentukan variabel untuk tata letak danViewBinding.
private lateinit var layout: View
private lateinit var binding: ActivityMainBinding
- Ganti kode dalam metode
onCreate()dengan kode di bawah ini. Kode ini melakukan inisialisasi binding, membuatvaluntuk mewakili tampilan dan menyetelnya ke root binding, serta menyetel tata letak kemainLayoutbinding.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
layout = binding.mainLayout
setContentView(view)
}
- Di bagian bawah file, dalam class
MainActivity, tambahkan fungsi ekstensi untuk menampilkan snackbar di seluruh codelab.
fun View.showSnackbar(
view: View,
msg: String,
length: Int,
actionMessage: CharSequence?,
action: (View) -> Unit
) {
val snackbar = Snackbar.make(view, msg, length)
if (actionMessage != null) {
snackbar.setAction(actionMessage) {
action(this)
}.show()
} else {
snackbar.show()
}
}
4. Menambahkan izin ke manifes
Hal pertama yang harus Anda lakukan adalah mendeklarasikan bahwa izin Anda akan digunakan di Android manifest menggunakan tag <uses-permission>.
Terkadang, izin yang Anda minta juga memiliki persyaratan lain. Dalam hal ini, Anda tidak dapat menggunakan aplikasi kamera, kecuali jika perangkat memiliki kamera. Karena itu, Anda juga akan menambahkan tag <uses-feature> ke manifes.
- Di file
AndroidManifest.xml, tambahkan izin untuk kamera di atas tag<application>.
<uses-permission android:name="android.permission.CAMERA" />
5. Membuat peluncur izin
Di MainActivity.kt, buat val yang disebut requestPermissionLauncher, lalu salin kode ini ke dalamnya. Beberapa butir poin berikutnya akan menguraikan isi dalam kode ini.
private val requestPermissionLauncher =
registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
if (isGranted) {
Log.i("Permission: ", "Granted")
} else {
Log.i("Permission: ", "Denied")
}
}
- Tetapkan
requestPermissionLaunchersama denganregisterForActivityResultdan teruskanActivityResultContracts.RequestPermission().
private val requestPermissionLauncher =
registerForActivityResult(
ActivityResultContracts.RequestPermission())
- Tambahkan callback untuk menangani kasus ketika telah diberikan atau tidak. Dalam hal ini, kita mencatat hasilnya.
{ isGranted: Boolean ->
if (isGranted) {
Log.i("Permission: ", "Granted")
} else {
Log.i("Permission: ", "Denied")
}
}
6. Meminta izin
- Buat fungsi yang disebut
onClickRequestPermission(view: View), lalu salin kode ini ke dalamnya. Dalam beberapa butir poin berikutnya, kita akan menguraikan yang terjadi di dalamnya.
fun onClickRequestPermission(view: View) {
when {
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED -> {
layout.showSnackbar(
view,
getString(R.string.permission_granted),
Snackbar.LENGTH_INDEFINITE,
null
) {}
}
ActivityCompat.shouldShowRequestPermissionRationale(
this,
Manifest.permission.CAMERA
) -> {
layout.showSnackbar(
view,
getString(R.string.permission_required),
Snackbar.LENGTH_INDEFINITE,
getString(R.string.ok)
) {
requestPermissionLauncher.launch(
Manifest.permission.CAMERA
)
}
}
else -> {
requestPermissionLauncher.launch(
Manifest.permission.CAMERA
)
}
}
}
- Siapkan pernyataan
whenuntuk mencakup tiga kasus: jika izin sudah diberikan, jika aplikasi menganggapnya harus menampilkan alasan izin permintaan, dan jika belum diminta.
when {
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED -> {
}
ActivityCompat.shouldShowRequestPermissionRationale(
this,
Manifest.permission.CAMERA
) -> {
}
else -> {
}
}
- Jika izin diberikan, tampilkan snackbar yang mengumumkannya.
ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED -> {
layout.showSnackbar(
view,
getString(R.string.permission_granted),
Snackbar.LENGTH_INDEFINITE,
null
) {}
}
- Jika
shouldShowRequestPermissionRationale()menampilkan nilai benar (true), tampilkan UI yang menjelaskan secara lebih terperinci alasan fitur tersebut memerlukan izin tertentu dan juga memberi pengguna cara untuk menerima/menolak izin dari UI.

ActivityCompat.shouldShowRequestPermissionRationale(
this,
Manifest.permission.CAMERA
) -> {
layout.showSnackbar(
view,
getString(R.string.permission_required),
Snackbar.LENGTH_INDEFINITE,
getString(R.string.ok)
) {
requestPermissionLauncher.launch(
Manifest.permission.CAMERA
)
}
}
- Selain itu, minta izin.
else -> {
requestPermissionLauncher.launch(
Manifest.permission.CAMERA
)
}
7. Ringkasan
Itu saja. Codelab ini menampilkan cara menambahkan izin runtime dan dapat digunakan untuk izin terkait lokasi, jaringan, media, dan lainnya!
Anda dapat melihat kode akhir dan membaca selengkapnya dalam dokumentasi.