share facebook facebook twitter menu hatena pocket slack

2019.11.06 WED

【Android】TelephonyManager#get 系で情報を取得するには READ_PHONE_STATE が必要な理由

出野 皓士

WRITTEN BY 出野 皓士

言いたいこと

Telephonymanager#get 系のメソッド(例えば getSimOperatorName)で情報を取得するには、READ_PHONE_STATE パーミッションが必要です。

経緯

業務で TelephonyManager#getSimOperatorName メソッドから通信キャリアの情報を取得する必要がありコードを書いたところ、プルリクエストで

「これ READ_PHONE_STATE パーミッションって必要?ドキュメントに required って書いてないけど?」

と言われました。

https://developer.android.com/reference/android/telephony/TelephonyManager.html#getSimOperatorName()

getSimOperatorName
Added in API level 1
public String getSimOperatorName ()
Returns the Service Provider Name (SPN).

Availability: SIM state must be SIM_STATE_READY

Returns
String
See also:

getSimState()

確かにドキュメントには書いてないです。

が、実際にこのパーミッションを許可したりしなかったりして調べてみた結果、
メソッドのアクセスには READ_PHONE_STATE は必要ないが、これを許可せずにアクセスしても空文字しか返ってこない
ということが分かりました。

パーミッションあり(許可) パーミッションなし(許可なし)
SIMあり キャリア情報が取得される 空文字が取得される
SIMなし 空文字が取得される 空文字が取得される

TelephonyManager でググるといろいろ記事は出ますが、みんな当然のように READ_PHONE_STATE を許可していて、なぜ必要なのか?ということに言及した記事がなかなか見つからなかったのでここに書きました。

元記事はこちら

【Android】TelephonyManager#get 系で情報を取得するには READ_PHONE_STATE が必要な理由

出野 皓士

出野 皓士

2019/02入社。Android アプリ開発がメイン。将来の記憶喪失に備えて技術記事を書く。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。