Android Permissions

Permissions in Android are a crucial aspect of app development, allowing applications to access sensitive resources or perform specific actions on the device.

In libSoftphone, we’ve carefully considered the permissions necessary for its functionality. Some permissions are bundled within the library itself, while others need to be manually added by developers integrating the library into their projects. In this article, we’ll delve into the required and optional permissions in libSoftphone, along with explanations for their necessity.

The Android SDK categorizes permissions into two main categories. You can read more about them and their impact to the users here:

Required Runtime Permissions

These permissions are essential for libSoftphone to function correctly. They are bundled within the library’s AndroidManifest.xml file, ensuring that the necessary access is granted at runtime without additional configuration by developers.

The libSoftphone SDK automatically requests there permissions when they are required, and developers need to handle only a minimal amount of code to ensure that the permissions are granted.

To report permission results, please include the following code in your activity:

1@MainThread
2@Override
3public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] results)
4{
5    Permission.onRequestPermissionResult(requestCode, permissions, results);
6    super.onRequestPermissionsResult(requestCode, permissions, results);
7}

For more guidance on handling runtime permissions in Android, refer to the official Android documentation on Requesting Permissions at Runtime.

Here is a list of the required runtime permissions for libSoftphone:

Required Foreground Service Permissions

Same as runtime permissions, these permissions are essential for libSoftphone to function correctly. They allow libSoftphone to work in background and correctly register to the SIPIS servers.

As per the recent changes in the Google Play Console, these permissions need to be declared and a justification for their use needs to be provided. The explanations here should give you a good starting point for completing the foreground service declaration form.

Here is a list of the required foreground service permissions for libSoftphone:

Required Normal Permissions

There permission are granted by Android automatically and do not require any additional code to be written by the developer. They are bundled within the library’s AndroidManifest.xml file, ensuring that the necessary access is granted at runtime without additional configuration by developers.

As of writing they also do not require any justification in the Google Play Console.

Here is a list of the required normal permissions for libSoftphone:

  • FOREGROUND_SERVICE

    This is a baseline permission that is required if any Foreground Service is to be used.

  • INTERNET

    We need to access the internet to make and receive calls.

  • ACCESS_NETWORK_STATE

    This permission is required to check the network state and to determine if the device is connected to the internet.

  • ACCESS_WIFI_STATE

    This permission is required to check the WiFi state and to determine if the device is connected to a WiFi network.

  • CHANGE_NETWORK_STATE

    We use this to enforce calls to be made over WiFi, or Mobile Data.

  • VIBRATE

    This permission is required to vibrate the device when a call is received.

  • MANAGE_OWN_CALLS

    This is an essential permission to properly support ConnectionService.

Optional Runtime Permissions

The permissions from this section enable additional features in the SDK that you might want to include depending on your final app’s usecase. These permissions are not included in the libSoftphone library’s AndroidManifest.xml file.

It is up to the application developer to add the permissions to application’s manifest and to request these permissions in the application’s code.

Here is a list of the optional runtime permissions for libSoftphone:

  • ACCESS_COARSE_LOCATION and ACCESS_FINE_LOCATION

    To be used when your app is using the registration or call location policy features.

  • READ_CONTACTS

    This permission is used to access the device’s contacts and enables contact matching for CallEvents.

  • CALL_PHONE

    This is used to place GSM calls from the SDK, e.g. as a fallback when VoIP is not available or not suitable.

  • SCHEDULE_EXACT_ALARM

    Used to periodically wake up the SDK in standard (non-push) incoming calls mode. If your app is using push, you don’t need this permission.

Optional Foreground Service Permissions

Same as the optional runtime permissions, these permissions are not included in the libSoftphone library’s AndroidManifest.xml file.

As per the recent changes in the Google Play Console, these permissions need to be declared and a justification for their use needs to be provided. The explanations here should give you a good starting point for completing the foreground service declaration form.