RxAndroidBle provides a default set of permissions, but you may need to customize your AndroidManifest.xml depending on whether you want to derive the user's location or scan in the background.
To derive user location across all API versions
Use these tags to ensure location permissions are handled correctly during manifest merging and across different Android versions:
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
To scan without deriving user location
If you only want to scan for peripherals without accessing location otherwise, restrict the permissions:
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30" tools:node="replace" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" tools:node="replace" />
To scan in the background (APIs 29 & 30)
Add the background location permission:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" android:maxSdkVersion="30" />
Note: For APIs > 30, remove the android:maxSdkVersion attribute to access location in the background.