@@ -846,6 +846,25 @@ void AskForScreenCaptureAccess(const Napi::CallbackInfo &info) {
846846 }
847847}
848848
849+ // Request Location access.
850+ void AskForLocationAccess (const Napi::CallbackInfo &info) {
851+ if (@available (macOS 10.15 , *)) {
852+ std::string auth_status = LocationAuthStatus ();
853+
854+ if (auth_status == kNotDetermined ) {
855+ CLLocationManager *location_manager = [[CLLocationManager alloc ] init ];
856+ const std::string access_level = info[0 ].As <Napi::String>().Utf8Value ();
857+ if (access_level == " always" ) {
858+ [location_manager requestAlwaysAuthorization ];
859+ } else if (access_level == " when-in-use" ) {
860+ [location_manager requestWhenInUseAuthorization ];
861+ }
862+ } else if (auth_status == kDenied ) {
863+ OpenPrefPane (" Privacy_Location" );
864+ }
865+ }
866+ }
867+
849868// Request Accessibility Access.
850869void AskForAccessibilityAccess (const Napi::CallbackInfo &info) {
851870 NSDictionary *options = @{(id )kAXTrustedCheckOptionPrompt : @(NO )};
@@ -872,6 +891,8 @@ void AskForAccessibilityAccess(const Napi::CallbackInfo &info) {
872891 Napi::Function::New (env, AskForFullDiskAccess));
873892 exports.Set (Napi::String::New (env, " askForCameraAccess" ),
874893 Napi::Function::New (env, AskForCameraAccess));
894+ exports.Set (Napi::String::New (env, " askForLocationAccess" ),
895+ Napi::Function::New (env, AskForLocationAccess));
875896 exports.Set (Napi::String::New (env, " askForMicrophoneAccess" ),
876897 Napi::Function::New (env, AskForMicrophoneAccess));
877898 exports.Set (Napi::String::New (env, " askForMusicLibraryAccess" ),
0 commit comments