diff --git a/ios/Classes/SwiftSimplePermissionsPlugin.swift b/ios/Classes/SwiftSimplePermissionsPlugin.swift index def8b28..51255fc 100644 --- a/ios/Classes/SwiftSimplePermissionsPlugin.swift +++ b/ios/Classes/SwiftSimplePermissionsPlugin.swift @@ -3,6 +3,18 @@ import UIKit import AVFoundation import CoreLocation +extension AVAuthorizationStatus : CustomStringConvertible { + + public var description: String { + switch self { + case .notDetermined: return "notDetermined" + case .restricted: return "restricted" + case .denied: return "denied" + case .authorized: return "authorized" + } + } +} + public class SwiftSimplePermissionsPlugin: NSObject, FlutterPlugin, CLLocationManagerDelegate { var whenInUse = false; var result: FlutterResult? = nil; @@ -19,6 +31,9 @@ public class SwiftSimplePermissionsPlugin: NSObject, FlutterPlugin, CLLocationMa let method = call.method; let dic = call.arguments as? [String: Any]; switch(method) { + case "checkCameraPermission": + let authStatus = AVCaptureDevice.authorizationStatus(for: AVMediaType.video) + result(authStatus.description) case "checkPermission": let permission = dic!["permission"] as! String; checkPermission(permission, result: result); diff --git a/lib/simple_permissions.dart b/lib/simple_permissions.dart index 54b95b2..97e5cce 100644 --- a/lib/simple_permissions.dart +++ b/lib/simple_permissions.dart @@ -2,6 +2,22 @@ import 'dart:async'; import 'package:flutter/services.dart'; +enum CameraAuthorizationStatus { + notDetermined, + restricted, + denied, + authorized +} + +CameraAuthorizationStatus authorizationStatus(String status) { + switch (status) { + case "notDetermined": return CameraAuthorizationStatus.notDetermined; + case "restricted": return CameraAuthorizationStatus.restricted; + case "denied": return CameraAuthorizationStatus.denied; + case "authorized": return CameraAuthorizationStatus.authorized; + } +} + class SimplePermissions { static const MethodChannel _channel = const MethodChannel('simple_permissions'); @@ -25,6 +41,11 @@ class SimplePermissions { static Future openSettings() { return _channel.invokeMethod("openSettings"); } + + static Future checkCameraPermission() async { + String authStatus = await _channel.invokeMethod("checkCameraPermission"); + return Future.value(authorizationStatus(authStatus)); + } } /// Enum of all available [Permission]