2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

言いたいこと

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

経緯

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

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

と言われました。

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 を許可していて、なぜ必要なのか? ということに言及した記事がなかなか見つからなかったのでここに書きました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?