【Android Studio】自分の電話番号を取得する【Android 12】

ネコニウム研究所

PCを利用したモノづくりに関連する情報を掲載するブログ

【Android Studio】自分の電話番号を取得する【Android 12】

2022-3-14 | ,

Android Studioでアプリを起動してる端末(に差されてるSIMカード)の電話番号を取得したい!

概要

この記事では、Android Studioでアプリを起動してる端末(に差されてるSIMカード)の電話番号を取得する手順を掲載する。

仕様書

環境

  • Android Studio Bumblebee 2021.1.1 Patch 2
  • Android 12(APIレベル 31)

テスト端末

  • Pixel 6
  • Android 12

手順書

マニフェストに権限を追記する

app/manifests/AndroidManifest.xmlに電話番号を取得するのに必要な権限を追加する。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nekonium.get_tel_num">
    ...
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>

追記するのは、<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /><uses-permission android:name="android.permission.READ_PHONE_STATE" />の部分。

私が見た他のサイトでREAD_PHONE_STATEのみだけで良さそうな感じのサンプルがあったんだけど、Androidのバージョンによる違いなのか、READ_PHONE_NUMBERSも必要だった。

ユーザーに許可を求める処理を実装する

ここからは、MainActivity.javaでの手順になる。

必要なパッケージをインポートする。

import android.content.pm.PackageManager;
import android.telephony.TelephonyManager;

MainActivityクラスの中に必要なクラスと変数を追加する。

    TelephonyManager telephonyManager;
    private static final int PERMISSION_GET_TEL_NUM = 1;

今回は、onCreateの中に許可を求める処理と電話番号をLogcatに出力する処理を追加する。

   @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= 23) {
            if (ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.READ_PHONE_NUMBERS)
                    != PackageManager.PERMISSION_GRANTED
                    || ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.READ_PHONE_STATE)
                    != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this,
                        new String[]{
                                Manifest.permission.READ_PHONE_NUMBERS,
                                Manifest.permission.READ_PHONE_STATE
                        },
                        PERMISSION_GET_TEL_NUM);
            }
        }

        telephonyManager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
        System.out.println(telephonyManager.getLine1Number());
    }

許可の可否は、onRequestPermissionsResultをオーバライドすることで受け取れる。
拒否された場合は、トースト(画面した中央に表示されるポップアップ的なの)でメッセージを表示する。

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permission, int[] grantResults)
    {
        super.onRequestPermissionsResult(requestCode, permission, grantResults);
        if (grantResults.length <= 0) {
            return;
        }
        switch (requestCode) {
            case PERMISSION_GET_TEL_NUM: {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // 許可された場合の処理
                } else {
                    // 拒否された場合の処理
                    Toast.makeText(this, "権限が取得できませんでした", Toast.LENGTH_LONG).show();
                }
            }
            return;
        }
    }

アプリを起動すると許可の可否を求められるダイアログが表示され、許可するとAndroid Studioの「Logcat」に端末に差されてるSIMカードの電話番号が表示される。拒否するとアプリの下部中央に「権限が取得できませんでした」と表示される。

まとめ(感想文)

電話番号がIDになるようなサービスを作るのに便利かもね!