Junior
Kādi ir Flutter lietojumprogrammās pieejamie atļauju tipi?
sobes.tech AI
Atbilde no AI
Flutter lietojumprogramu atļaujas pārvalda ierīces operētājsistēma (Android vai iOS). Flutter nodrošina piekļuvi attiecīgajiem API, lai pieprasītu un pārbaudītu šīs atļaujas:
Galvenie atļauju veidi:
- Instalēšanas laikā atļaujas (Install-time permissions): Automātiski piešķirtas instalēšanas laikā. Nepieciešams tieši pieprasīt lietotājam darbības laikā. Android tās pieder pie
normalunsignaturekategorijām. - Darbības laikā atļaujas (Runtime permissions): Visbūtiskākās un jutīgākās atļaujas, piemēram, piekļuve atrašanās vietai, kamerai, mikrofonam, kontaktiem un failiem. Prasa tiešu pieprasījumu darbības laikā. Lietotājs var piešķirt vai noraidīt šādu atļauju. Android tās pieder pie
dangerouskategorijas. - Īpašas atļaujas (Special permissions): Atļaujas, kas prasa īpašu lietotāja mijiedarbību, piemēram, atļauja zīmēt virs citiem logiem (
ACTION_MANAGE_OVERLAY_PERMISSION) vai sistēmas iestatījumu rakstīšanas atļauja (WRITE_SETTINGS).
Flutter izmanto spraudņus, lai ar API sadarboties un pārvaldītu atļaujas. Visbiežāk izmantotais spraudnis — permission_handler.
Ar permission_handler tiek izmantoti šādi statusi:
granted: Atļauja piešķirta.denied: Atļauja noraidīta (iespējams, atkārtoti pieprasīt).restricted: Atļauja ir ierobežota platformas dēļ.permanentlyDenied: Atļauja galīgi noraidīta, nepieciešams novirzīt lietotāju uz lietotnes iestatījumiem.limited: Atļauja daļēji piešķirta (piemēram, piekļuve tikai izvēlētām fotogrāfijām iOS).
Piemērs atļaujas pieprasījumam:
import 'package:permission_handler/permission_handler.dart';
// Asinhrona funkcija atļaujas pieprasīšanai
Future<void> requestCameraPermission() async {
// Statusa iegūšana
var status = await Permission.camera.status;
// Ja atļauja vēl nav piešķirta
if (status.isDenied) {
// Pieprasīt atļauju
status = await Permission.camera.request();
// Pārbaudīt statusu pēc pieprasījuma
if (status.isGranted) {
// Atļauja piešķirta, var izmantot kameru
print('Kameras atļauja piešķirta');
} else if (status.isPermanentlyDenied) {
// Atļauja galīgi noraidīta, atvērt iestatījumus
print('Kameras atļauja galīgi noraidīta, atveriet iestatījumus');
openAppSettings(); // permission_handler funkcija
} else {
// Atļauja noraidīta, bet vēl var pieprasīt
print('Kameras atļauja noraidīta');
}
} else if (status.isGranted) {
// Atļauja jau ir piešķirta
print('Kameras atļauja jau ir piešķirta');
}
}
Jāpiekrīt atbilstošas atļaujas Android manifestam (android/app/src/main/AndroidManifest.xml) un Info.plist (ios/Runner/Info.plist):
Android AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Pieejas kameras atļauja -->
<uses-permission android:name="android.permission.CAMERA"/>
<application
...>
<!-- Jūsu aktivitātes -->
</application>
</manifest>
iOS Info.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<!-- Paskaidrojums par kameras izmantošanas iemeslu -->
<key>NSCameraUsageDescription</key>
<string>Šī lietotne izmanto jūsu kameru fotoattēlu uzņemšanai.</string>
...
</dict>
</plist>
Svarīgi pieprasīt atļauju atbilstošajā brīdī, kad funkcija, kas prasa atļauju, tiek izmantota, lai izvairītos no negatīvas lietotāja pieredzes.