For Android API versions up to 22, permissions are solely managed in the AndroidManifest.xml file.
For 23 (i.e., when you set the target SDK to 23 in your Android settings for UE4), you also need to prompt the user to accept permissions before they are enabled.
Is there a way (either through Blueprints or C++) to do that?
As far as I know there is no support for this in UE 4.12. If You really need these (not all permissions has to be checked in runtime, it would be an user experience nightmare ;)) You must implement it in java code by using the requestPermissions method. More details here Request app permissions | Android Developers
Anyway, from what I see the mobile support is kinda sloppy in UE. I had a lot of stuff to write from scratch.
I do this: android.permission.WRITE_EXTERNAL_STORAGE
so for a camera I would write this: android.permission.CAMERA into the check cell and all also into a single line of a make array node that feeds the Request Android Permissions. But I have never tried less, I just know it works. oh and it must be in your manifest first, or its pointless.
Runtime permissions arrived later on. If I remember: 4.16 and the equivalent Android SDK.
Before 4.16 only start time/static permissions by application only in UE and Android SDK.
I place the permissions in three places to support all devices: in the override permission XML file, in the project settings, and in the blueprint for runtime permissions requests. Runtime permissions sometimes need re-request in blueprints: verify and query them in a couple of places. I now the locations permissions sometimes take 10 seconds to work after being accepted, you need to account for device data delay.
Testing in shipping build (+for distribution) usually don’t work with permissions, you need to first try in debug (or is
it the opposite? I’m not sure now).