# Battery Optimization on Android

[Don't Kill My App](https://dontkillmyapp.com/) (no affiliation to Sentiance) keeps track of different manufacturers' practices on battery optimization techniques that severely restrict how your app can run in the background and the potential solutions.

Manufacturers listed below are notorious for their strict requirements for background process restrictions, and without **proper user-onboarding, and correct battery-related settings, Sentiance SDK cannot guarantee a consistent output on these devices.**

* [OnePlus](https://dontkillmyapp.com/oneplus)
* [Huawei](https://dontkillmyapp.com/huawei)
* [Samsung](https://dontkillmyapp.com/samsung)
* [Xiaomi](https://dontkillmyapp.com/xiaomi)
* [Others](https://dontkillmyapp.com/)

## Programmatically Prompting for Battery Optimization Permission

When running the SDK on Android 6 and higher, it is recommended to ask the user to disable battery optimization for your app. This makes sure that SDK detections continue to work properly when the device is in Doze mode. This is particularly important with manufacturers like OnePlus and Nokia (HMD Global) who customize Android to do aggressive battery optimization, keeping the device in Doze mode longer than intended.

Additionally, on Android 9, disabling this will prevent Adaptive Battery from [bucketing](https://developer.android.com/about/versions/pie/power#buckets) your app based on usage and [restricting background processing](https://developer.android.com/reference/android/app/ActivityManager#isBackgroundRestricted\(\)), all of which that can impact the detection quality of the SDK.

After explaining to the user about the benefits of disabling battery optimization, call the [`disableBatteryOptimization()`](https://docs.sentiance.com/important-topics/api-reference/android/sentiance#disablebatteryoptimization) method of the [`Sentiance`](https://docs.sentiance.com/important-topics/sdk/api-reference/android/sentiance) class. This will trigger a system dialog asking the user to allow disabling battery optimization for your app.

```java
Sentiance.getInstance(context).disableBatteryOptimization()
```

The Sentiance SDK does not define the `REQUEST_IGNORE_BATTERY_OPTIMIZATIONS` permission required for this feature. You must therefore explicitly add this permission to your app.

{% code title="AndroidManifest.xml" %}

```markup
<uses-permission 
	android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
```

{% endcode %}

{% hint style="danger" %}
Please note that Google Play policies prohibit apps from requesting this permission unless the app's core functionality is affected. For more information about the supported use cases, see [here](https://developer.android.com/training/monitoring-device-state/doze-standby#exemption-cases).
{% endhint %}

{% hint style="success" %}
Please take advantage of [SDK Status](https://docs.sentiance.com/important-topics/sdk/api-reference/android/sdkstatus) updates to react to any incorrect configurations.
{% endhint %}

### Embeddable Projects

#### (These are not maintained by Sentiance)

{% embed url="<https://github.com/DoubleDotLabs/doki>" %}

{% embed url="<https://github.com/judemanutd/AutoStarter>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sentiance.com/important-topics/sdk/battery-optimization.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
