Skip to content

Commit 62e4ffa

Browse files
authored
fix(geolocation): coarse perms Android 12 (#354)
1 parent 25b2055 commit 62e4ffa

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

packages/geolocation/index.android.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,16 @@ function _requestLocationPermissions(always: boolean): Promise<void> {
131131
});
132132
} else {
133133
ApplicationSettings.setBoolean('askedForWhileUsePermission', true);
134-
permissions.requestPermission((<any>android).Manifest.permission.ACCESS_FINE_LOCATION).then(resolve, reject);
134+
permissions.requestPermissions([(<any>android).Manifest.permission.ACCESS_FINE_LOCATION, (<any>android).Manifest.permission.ACCESS_COARSE_LOCATION])
135+
.then((value) => {
136+
resolve(value);
137+
}).catch((err) => {
138+
if (!err["android.permission.ACCESS_COARSE_LOCATION"] && !err["android.permission.ACCESS_FINE_LOCATION"]) {
139+
reject(err);
140+
} else if (!err["android.permission.ACCESS_FINE_LOCATION"] && err["android.permission.ACCESS_COARSE_LOCATION"]) {
141+
resolve();
142+
}
143+
})
135144
}
136145
}
137146
});
@@ -174,7 +183,7 @@ export function watchLocation(successCallback: successCallbackType, errorCallbac
174183
const zonedSuccessCallback = zonedCallback(successCallback);
175184
const zonedErrorCallback = zonedCallback(errorCallback);
176185

177-
if ((!permissions.hasPermission((<any>android).Manifest.permission.ACCESS_FINE_LOCATION) || !_isGooglePlayServicesAvailable()) && !LocationManager.shouldSkipChecks()) {
186+
if ((!permissions.hasPermission((<any>android).Manifest.permission.ACCESS_FINE_LOCATION) && !permissions.hasPermission((<any>android).Manifest.permission.ACCESS_COARSE_LOCATION) || !_isGooglePlayServicesAvailable()) && !LocationManager.shouldSkipChecks()) {
178187
throw new Error('Cannot watch location. Call "enableLocationRequest" first');
179188
}
180189

@@ -332,7 +341,7 @@ function _permissionIsGiven(always: boolean): boolean {
332341

333342
export function isEnabled(options?: Options): Promise<boolean> {
334343
return new Promise(function (resolve, reject) {
335-
if (!_isGooglePlayServicesAvailable() || !permissions.hasPermission((<any>android).Manifest.permission.ACCESS_FINE_LOCATION)) {
344+
if (!_isGooglePlayServicesAvailable() || !permissions.hasPermission((<any>android).Manifest.permission.ACCESS_FINE_LOCATION) && !permissions.hasPermission((<any>android).Manifest.permission.ACCESS_COARSE_LOCATION)) {
336345
resolve(false);
337346
} else {
338347
_isLocationServiceEnabled(options).then(

0 commit comments

Comments
 (0)