Correct way to handle getting user device permissions?


I’m wanting to get an idea if I’m approaching this in the correct way.

We have a number of different app permissions that we require to be used on our app including Geolocation, Camera etc.

Their is a provider that stores the current state of that permission when the device loads.

Whenever we require the permission we first do a check with this provider to retrieve the state which comes back as a boolean.

If true, we carry on with the flow otherwise we trigger the authorization request.

This is where it gets murky.

If the user accepts then its all dandy and we continue the flow but if the user rejects it once or permanently then we dont handle it perfectly.

If they just reject then we re-request the authorization in case it was a mistake but if they reject it again it is effectively blocked with dont ask again.

What is the best step then and is the rest of the approach sane?