gd f1e43cb498 android: Loader - load early (before service thread) both in activity and service.
Loader converted from java to kotlin.

Instead of loading libmpd when the service thread is started,
the service will not start the the thread if libmpd failed to load.

The loader is also accessed by the view data to let
the ui adjust if failed to load, by showing the failure reason
and disabling the Start MPD button.
2025-02-06 14:23:26 +02:00
..
2014-02-22 01:39:08 +01:00
2022-04-26 17:47:54 +02:00

Android

Notes and resources for MPD android maintainers.

Build

See Compiling for Android

Android studio

Version control

git ignoring .idea directory completely until a good reason emerges not to

Native libraries

Permissions

Files access

The required permission depends on android SDK version:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
    Manifest.permission.READ_MEDIA_AUDIO
else
    Manifest.permission.READ_EXTERNAL_STORAGE

Permission request

Request runtime permissions

Since Android 6.0 (API level 23):

Android will ignore permission request and will not show the request dialog if the user's action implies "don't ask again." This leaves the app in a crippled state and the user confused. Google says "don't try to convince the user", so it returns false for shouldShowRequestPermissionRationale.

To help the user proceed, we show the Request permission button only if shouldShowRequestPermissionRationale == true because there's a good chance the permission request dialog will not be ignored.

If shouldShowRequestPermissionRationale == false we instead show the "rationale" message and a button to open the app info dialog where the user can explicitly grand the permission.