Manifest & Permissions

READ_PHONE_STATE: What It Allows and What It Does Not

READ_PHONE_STATE grants access to particular telephony information under Android's current rules. It is not a universal permission to obtain a phone number, IMEI or every device identifier, and it does not authorize reading call logs.

By Updated 2 min read

Identify the exact API you need

Start with the method your feature calls and read its current permission and role requirements. The permission reference is the authority for the declaration; individual telephony APIs may impose additional restrictions that vary by Android version and app role.

Do not request phone state merely because an old analytics SDK tutorial recommends it. Modern identification, advertising and account flows should use the appropriate dedicated APIs and privacy controls.

Keep these capabilities separate

Desired information or action What to investigate
Telephony state Relevant state API and current permission rules
User's phone number Number-specific APIs, roles and availability
Call history Restricted call-log access and distribution policy
Start a phone call Dial intent versus direct-call permission
Advertising identifier Advertising-ID API and consent requirements

A device may have no SIM, multiple subscriptions or unavailable information. Even with a grant, the result may not be a useful stable identifier.

Request in context and handle refusal

For an ordinary runtime grant, follow the permission request flow. Explain the feature requiring telephony information and keep unrelated functions available when access is declined.

Do not persist the fact that the user once granted access as a permanent authorization. Recheck before the operation and handle missing or changed subscription state.

Do not substitute identifiers

Using a hardware identifier to replace a resettable advertising identifier can conflict with privacy expectations and platform restrictions. An unavailable advertising ID is not a reason to request broader phone permissions. Review the advertising-ID guidance for the actual advertising use case.

Audit SDK contributions

Inspect the merged release manifest to see whether a dependency introduced READ_PHONE_STATE. If it is unnecessary, update or configure the dependency and verify that removing the declaration does not break a legitimate feature.

APKLint can identify the permission in a manifest and help flag its sensitivity. It cannot determine whether the device will return a specific telephony value or whether your use meets Google Play's separate policy requirements.

Sources and further reading

  1. Android Developers: Manifest.permission reference
  2. Android Developers: Request runtime permissions
  3. Android Developers: Best practices for unique identifiers

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