The method shouldShowRequestPermissionRationale
returns true if it is required to explain the user why the permission is required. In the first time the permission is requested, this method returns false.
But if the user denies the permission once, when the permission is requested another time, this method returns true because it might be a good idea to explain the user why this permission is required for the app.
When the permission is already granted, this method will return false.
So a good practice would be to first check what this method returns and if it is required to explain to the user, explain it using a dialog or something followed by requesting the permission, otherwise ask the permission directly.
You can also have a look at my library which ease up this whole process and other processes regarding run-time permissions.