Are you using runtime permissions introduced in Android 6.0?
If so this part might be helpful for you:
untime permissions in Android 6.0 (Marshmallow)
If your app is running on a device with Android 6.0 (Marshmallow) or later and also targets Android API level 23 or higher, your app uses the Android Runtime Permission System.
The Android Runtime Permission System asks the app’s user to grant permissions while the app is running, instead of when the app is first installed. App users can usually grant or deny each permission when the app needs them while the app is running (for example, requesting camera permission before taking a picture). This allows an app to run with limited functionality without permissions.
Unity does not support the Runtime Permission System, so your app prompts the user to allow what Android calls “dangerous” permissions on startup. See Android’s documentation on dangerous permissions for more information.
Prompting your user to allow dangerous permissions is the only way to ensure plug-ins don’t cause crashes when they are missing a permission. However, if you don’t want your Unity Android app to ask for permissions on startup, you can add the following to your Manifest in either the Application or Activity sections.
Adding this completely suppresses the permission dialog shown on startup, but you must handle runtime permissions carefully to avoid crashes. This method is only recommended for advanced Android app developers.
For further information about the Runtime Permission System and handling permissions, see the Requesting Permissions section of the Android Developer documentation.