> For the complete documentation index, see [llms.txt](https://docs.movesdk.com/move-platform/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.movesdk.com/move-platform/sdk/appendix/android/permission-handling/permission-overview.md).

# Permission Overview

The library requires at least the following permissions to access MOVE SDK services.

```xml
<!-- ====================================================== -->
<!-- MOVE SDK — AndroidManifest.xml Permission Reference    -->
<!-- Comment out permissions for services you don't use.    -->
<!-- ====================================================== -->

<!-- Required for reliable background operation — strongly recommended for all configurations -->
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

<!-- Required for all services -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />

<!-- Required for: Driving, Cycling, Walking, DFD, DBE, POI, Public Transport, AID, Assistance Call -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- Driving, Cycling, Walking -->
<!-- Since SDK 2.6: optional if backgroundLocationPermissionMandatory = false in MoveOptions -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

<!-- Required for: Cycling, Walking. Strongly recommended for: Driving -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />

<!-- Required for Android 13+ (API 33+) -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<!-- Required for: Distraction-Free Driving (DFD) -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!-- Required for: Distraction-Free Driving (DFD) -->
<!-- Since SDK 2.6.9: optional if overlayPermissionMandatory = false in MoveOptions -->
<!-- Attention: if optional, device must have a gyroscope -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

<!-- Required for: Assistance Call (Android 11 and lower) -->
<uses-permission android:name="android.permission.BLUETOOTH" />

<!-- Required for: Driving (Device Discovery), Assistance Call (Android 12+) -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

<!-- Required for: BLE scanning (Android 12+) -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />

<!-- Required for: Bluetooth scanning (Android 11 and lower) -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<!-- Required for: Assistance Call (background internet check) -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

<!-- Required for: Health Connect (Step Counter) -->
<uses-permission android:name="android.permission.health.READ_STEPS" />
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
```

Depending on the used services, different permissions are required. The following table gives an overview what's required:

<table data-header-hidden><thead><tr><th width="138.6377598211822"></th><th width="138.109375"></th><th width="233.61772853185596">Permissions</th><th></th></tr></thead><tbody><tr><td><strong>Battery Optimization</strong></td><td><strong>Strongly recommended</strong></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#REQUEST_IGNORE_BATTERY_OPTIMIZATIONS">REQUEST_IGNORE_BATTERY_OPTIMIZATIONS</a></td><td>Permission an application must hold in order to use <a href="https://developer.android.com/reference/android/provider/Settings#ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"><code>Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS</code></a>.</td></tr><tr><td><strong>Mode of Transport</strong></td><td>Driving</td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION">ACCESS_FINE_LOCATION</a></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACTIVITY_RECOGNITION">ACTIVITY_RECOGNITION</a> [2]</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION">ACCESS_BACKGROUND_LOCATION</a> [5]</td><td><a href="https://developer.android.com/reference/android/Manifest.permission#POST_NOTIFICATIONS">POST_NOTIFICATIONS</a> [4]</td></tr><tr><td></td><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_CONNECT">BLUETOOTH_CONNECT</a></td></tr><tr><td></td><td></td><td></td><td>GooglePlayLocationAccuracy [1]</td></tr><tr><td></td><td>Cycling</td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION">ACCESS_FINE_LOCATION</a></td><td>GooglePlayLocationAccuracy [1]</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION">ACCESS_BACKGROUND_LOCATION</a> [5]</td><td></td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACTIVITY_RECOGNITION">ACTIVITY_RECOGNITION</a></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#POST_NOTIFICATIONS">POST_NOTIFICATIONS</a> [4]</td></tr><tr><td></td><td>Walking</td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACTIVITY_RECOGNITION">ACTIVITY_RECOGNITION</a></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#POST_NOTIFICATIONS">POST_NOTIFICATIONS</a> [4]</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION">ACCESS_BACKGROUND_LOCATION</a> [5]</td><td></td></tr><tr><td><strong>Driving Services</strong></td><td>Distraction-Free-Driving (DFD)</td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION">ACCESS_FINE_LOCATION</a></td><td></td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#READ_PHONE_STATE">READ_PHONE_STATE</a></td><td></td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#SYSTEM_ALERT_WINDOW">SYSTEM_ALERT_WINDOW</a> [6]</td><td></td></tr><tr><td></td><td>Driving behaviour events (DBE)</td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION">ACCESS_FINE_LOCATION</a></td><td></td></tr><tr><td><strong>Other services</strong></td><td>Points of Interest</td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION">ACCESS_FINE_LOCATION</a></td><td></td></tr><tr><td></td><td></td><td>GooglePlayLocationAccuracy [1]</td><td></td></tr><tr><td></td><td>Public Transport</td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION">ACCESS_FINE_LOCATION</a></td><td></td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACTIVITY_RECOGNITION">ACTIVITY_RECOGNITION</a></td><td></td></tr><tr><td></td><td></td><td>GooglePlayLocationAccuracy [1]</td><td></td></tr><tr><td></td><td>Automatic Impact Detection</td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION">ACCESS_FINE_LOCATION</a></td><td>GooglePlayLocationAccuracy [1]</td></tr><tr><td></td><td>Assistance Call</td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION">ACCESS_FINE_LOCATION</a> [3]</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#FOREGROUND_SERVICE_LOCATION">FOREGROUND_SERVICE_LOCATION</a></td><td>Allows a regular application to use <a href="https://developer.android.com/reference/android/app/Service#startForeground(int,%20android.app.Notification)"><code>Service.startForeground</code></a> with the type "location".</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH">BLUETOOTH</a></td><td>Phone call/speaker switch recognition.</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_CONNECT">BLUETOOTH_CONNECT</a></td><td>Needed only for communicates with already-paired Bluetooth devices. Android 12</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_SCAN">BLUETOOTH_SCAN</a></td><td>Needed to scan devices such as BLE.</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#BLUETOOTH_ADMIN">BLUETOOTH_ADMIN</a></td><td>Needed to scan devices on Android 11 and lower.</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/Manifest.permission#CHANGE_NETWORK_STATE">CHANGE_NETWORK_STATE</a></td><td>To check internet connection in background.</td></tr><tr><td></td><td>Health</td><td><a href="https://developer.android.com/reference/android/health/connect/HealthPermissions#READ_STEPS">READ_STEPS</a></td><td>Health Connect</td></tr><tr><td></td><td></td><td><a href="https://developer.android.com/reference/android/health/connect/HealthPermissions#READ_HEALTH_DATA_IN_BACKGROUND">READ_HEALTH_DATA_IN_BACKGROUND</a></td><td>Health Connect</td></tr></tbody></table>

{% hint style="info" %}
**Note:** `SYSTEM_ALERT_WINDOW` (Overlay) and `REQUEST_IGNORE_BATTERY_OPTIMIZATIONS` require special handling. They cannot be requested via `requestPermissions()`.
{% endhint %}

{% hint style="info" %}
\[1] GooglePlayLocationAccuracy = isNetworkLocationPresent + isNetworkLocationUsable

\[2] improves trip recognition and classification considerably

\[3] required permission deprecated with v2.4.0+

\[4] see [POST\_NOTIFICATION](/move-platform/sdk/appendix/android/permission-handling/runtime-permissions.md) Runtime Permission

\[5] Since SDK 2.6: if *backgroundLocationPermissionMandatory* in [MoveOptions](/move-platform/sdk/models/moveoptions.md) is **true** the permission [ACCESS\_BACKGROUND\_LOCATION](https://developer.android.com/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION) is mandatory else this permission is optional.

\[6] Since SDK 2.6.9: if *overlayPermissionMandatory* in [MoveOptions](/move-platform/sdk/models/moveoptions.md) is **false** the permission [SYSTEM\_ALERT\_WINDOW](https://developer.android.com/reference/android/Manifest.permission#SYSTEM_ALERT_WINDOW) is **NOT** mandatory anymore. **Attention: in this case the device must be equipped with a gyroscope!**
{% endhint %}

{% hint style="warning" %}
Grant the [Background Location](/move-platform/sdk/appendix/android/permission-handling/runtime-permissions.md#background-location) permission is strongly recommended. Similarly for the optional Activity Recognition permission (Driving) - make sure to request this from the user, otherwise it will degrade the quality of the service.
{% endhint %}

More Information regarding the Android system permissions can be found here: <https://developer.android.com/reference/android/Manifest.permission>

The required permissions must be granted before the MOVE SDK service can be used. In case of missing permissions this will be presented by [MoveServiceFailure](/move-platform/sdk/models/moveservicefailure.md) and/or by [MoveServiceWarning](/move-platform/sdk/models/moveservicewarning.md).

For more information about "dangerous permissions" visit the [official developer page](https://developer.android.com/guide/topics/permissions/overview).

In fact the MOVE SDK is not aware of permission changes, the developer can tell the MOVE SDK that the error is resolved.

```kotlin
val moveSdk = MoveSdk.get()
if (moveSdk != null) {
    val errors = moveSdk.getServiceErrors()
    if (errors.isNotEmpty()) {
        moveSdk.resolveError()
    }
}
```
