Search code examples
androidandroid-permissions

ActivityCompat.requestPermissions does not show dialog for ACCESS_FINE_LOCATION


My application asks for permission for ACCESS_FINE_LOCATION upon geolocation permission request fired from a webview, but it calls onRequestPermissionsResult without even showing dialog, with PERMISSION_DENIED for its response. I have read nearly all posts regarding this topic, but none of them seem to resolve my problem :(

in WebChromeClient:

@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
    int permissionCheck = ContextCompat.checkSelfPermission(onActivity, android.Manifest.permission.ACCESS_FINE_LOCATION);
    if (permissionCheck == -1){
        ActivityCompat.requestPermissions(onActivity, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, MainActivity.REQUEST_GEOLOCATION);
    }else if (permissionCheck == 0){
        callback.invoke(origin, true, false);
    }
}

following are requested permissions from my manifest

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="28"
    tools:ignore="ScopedStorage"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.Manifest.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.Manifest.permission.ACCESS_FINE_LOCATION" />

For sdk version, I have minSdkVersion 23, targetSdkVersion 29.


Solution

  • Replace:

    <uses-permission android:name="android.Manifest.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.Manifest.permission.ACCESS_FINE_LOCATION" />
    

    with:

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />