Manifest & Permissions

Android Phone Permissions: Separate Calls, State and Call Logs

Android phone permissions are not one interchangeable group. Reading phone state, placing a call and accessing call logs have different purposes and restrictions. Choose the smallest capability needed for the feature rather than requesting a collection of phone permissions up front.

By Updated 2 min read

Begin with the user action

If the app only needs to let a person call a displayed number, a dial intent that hands control to a phone app may be more appropriate than directly initiating the call. If the feature needs call history, that is a much more sensitive and policy-restricted data flow.

Consult the current permission reference for the exact API and Android version. Names that look related do not necessarily grant overlapping access.

Separate common requirements

Feature Review focus
Display a number and open the dialer Correct intent handling and user control
Place a call directly Direct-call permission and appropriate runtime behavior
Observe telephony state State-specific APIs and current access restrictions
Read call history Restricted permission eligibility and role requirements
Obtain a phone number API availability, roles and a fallback when unavailable

Do not use permission groups as a promise that granting one permission grants every other permission in that group.

Check distribution policy independently

Google Play's sensitive-permission policy can limit eligible uses even when an Android API technically allows a request. A successful permission dialog on a test device does not establish Play approval.

Document the core feature, why a less sensitive alternative is insufficient, and how the data is handled. Keep declarations, in-app explanations and privacy disclosures consistent.

Test difficult device states

Use devices or emulators representing no telephony capability, no SIM, multiple SIMs and denied access. Handle missing values without converting them into a shared fake identifier or crashing the screen.

For runtime permissions, follow the current request pattern and recheck at the point of use. A user can change access after the app has started.

Inspect what shipped

APKLint's permission checker helps review the final manifest and identify unexpected phone-related declarations. It cannot confirm carrier data availability, role eligibility or policy acceptance. Those require device tests and a review of the actual feature and distribution requirements.

Sources and further reading

  1. Android Developers: Manifest.permission reference
  2. Google Play: Permissions and APIs that access sensitive information
  3. Android Developers: Request runtime permissions

Reference review: 22 September 2026. Examples illustrate the workflow; check your installed versions, release artifact and account-specific Console requirements before applying them. This guide is not a claim that APKLint executed your project or verified your private account.

APKLint

Android inspection tools and practical release guides. About APKLint · Report a correction