馃幆 G艂贸wna IdeaMain Concept
Modu艂 Permissions upraszcza obs艂ug臋 uprawnie艅 Android. Zamiast r臋cznie zarz膮dza膰 ActivityResultContracts, wystarczy proste wywo艂anie z callbackiem.The Permissions module simplifies Android permission handling. Instead of manually managing ActivityResultContracts, a simple call with a callback is enough.
馃摑 Podstawowe u偶ycieBasic Usage
// Popro艣 o pojedyncze uprawnienie
ADict.Permissions.request(activity, Permission.CAMERA) { granted ->
if (granted) {
openCamera()
} else {
showDeniedMessage()
}
}
// Sprawd藕 bez pytania
if (ADict.Permissions.isGranted(context, Permission.LOCATION)) {
getCurrentLocation()
}
馃搵 Wiele uprawnie艅 narazMultiple Permissions at Once
// Popro艣 o kilka uprawnie艅
ADict.Permissions.requestMultiple(
activity,
listOf(Permission.CAMERA, Permission.RECORD_AUDIO, Permission.LOCATION)
) { results ->
// results: Map<String, Boolean>
if (results.all { it.value }) {
// Wszystkie przyznane
startVideoRecordingWithLocation()
} else {
// Sprawd藕 kt贸re brakuj膮
val missing = results.filter { !it.value }.keys
showMissingPermissions(missing)
}
}
// Sprawd藕 kt贸re brakuj膮
val missing = ADict.Permissions.getMissingPermissions(
context,
listOf(Permission.CAMERA, Permission.RECORD_AUDIO)
)
if (missing.isEmpty()) {
// Wszystkie s膮
}
馃挰 Z wyja艣nieniem (Rationale)With Rationale
Automatycznie pokazuje dialog z wyja艣nieniem gdy potrzeba:Automatically shows rationale dialog when needed:
ADict.Permissions.requestWithRationale(
activity = activity,
permission = Permission.CAMERA,
rationale = "Potrzebujemy dost臋pu do kamery, aby zrobi膰 zdj臋cie profilowe",
rationaleTitle = "Wymagane uprawnienie", // opcjonalne
positiveButton = "OK", // opcjonalne
negativeButton = "Anuluj", // opcjonalne
onGranted = {
openCamera()
},
onDenied = {
showAlternativeUpload()
}
)
// Je艣li uprawnienie jest permanentnie odrzucone,
// automatycznie poka偶e dialog z opcj膮 przej艣cia do ustawie艅
馃搳 Stan uprawnienia
val state = ADict.Permissions.getState(activity, Permission.CAMERA)
when (state) {
PermissionState.GRANTED -> {
// Przyznane - mo偶na u偶ywa膰
openCamera()
}
PermissionState.DENIED -> {
// Odrzucone, ale mo偶na zapyta膰 ponownie
showRationale()
}
PermissionState.PERMANENTLY_DENIED -> {
// Odrzucone z "Don't ask again" - trzeba i艣膰 do ustawie艅
showSettingsPrompt()
}
PermissionState.NOT_APPLICABLE -> {
// Nie dotyczy (np. Android 12 permission na Android 10)
}
}
馃摫 Dost臋pne uprawnieniaAvailable Permissions
| Sta艂aConstant | Uprawnienie | UwagiNotes |
|---|---|---|
| Permission.CAMERA | Kamera | |
| Permission.LOCATION | Dok艂adna lokalizacjaPrecise location | |
| Permission.LOCATION_COARSE | Przybli偶ona lokalizacjaApproximate location | |
| Permission.RECORD_AUDIO | Mikrofon | |
| Permission.READ_CONTACTS | Odczyt kontakt贸w | |
| Permission.WRITE_CONTACTS | Zapis kontakt贸w | |
| Permission.READ_STORAGE | Odczyt pami臋ciStorage read | Legacy |
| Permission.READ_MEDIA_IMAGES | Odczyt zdj臋膰Photo read | Android 13+ |
| Permission.READ_MEDIA_VIDEO | Odczyt wideo | Android 13+ |
| Permission.POST_NOTIFICATIONS | PowiadomieniaNotifications | Android 13+ |
| Permission.BLUETOOTH_CONNECT | Po艂膮czenieConnection BT | Android 12+ |
| Permission.BLUETOOTH_SCAN | Skanowanie BT | Android 12+ |
馃敡 Funkcje pomocnicze
// Otw贸rz ustawienia aplikacji
ADict.Permissions.openAppSettings(context)
// Otw贸rz ustawienia lokalizacji
ADict.Permissions.openLocationSettings(context)
// Otw贸rz ustawienia Bluetooth
ADict.Permissions.openBluetoothSettings(context)
// Czy lokalizacja w艂膮czona w systemie?
if (!ADict.Permissions.isLocationEnabled(context)) {
showEnableLocationPrompt()
}
// Czy Bluetooth w艂膮czony?
if (!ADict.Permissions.isBluetoothEnabled(context)) {
showEnableBluetoothPrompt()
}
// Obs艂u偶 wynik w Activity (je艣li nie u偶ywasz ActivityResultContracts)
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
ADict.Permissions.onRequestPermissionsResult(requestCode, permissions, grantResults)
}