Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android開発】端末の電話番号を取得する方法を実装例付きで解説

本記事では、Androidアプリで端末の電話番号を取得する方法を、実際のコード例とともにわかりやすく解説します。TelephonyManagerクラスを使った基本的な実装手順から、実行時パーミッション(権限)のリクエスト処理まで、ステップごとに紹介していきます。

手順1:Android Studioで新規プロジェクトを作成する

まず、Android Studioを起動し、メニューから「File」→「New Project」を選択して新しいプロジェクトを作成します。ウィザードに従って必要な項目をすべて入力し、プロジェクトの設定を完了させましょう。

手順2:レイアウトファイル(activity_main.xml)にコードを追加する

次に、res/layout/activity_main.xmlに以下のコードを追加します。

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "https://schemas.android.com/apk/res/android"
    xmlns:app = "https://schemas.android.com/apk/res-auto"
    xmlns:tools = "https://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".MainActivity">

    <TextView
        android:id = "@+id/phoneNumber"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "phone number"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintLeft_toLeftOf = "parent"
        app:layout_constraintRight_toRightOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />
</android.support.constraint.ConstraintLayout>

上記のコードでは、画面中央にTextViewを1つ配置しています。ユーザーがアプリを起動すると、取得した電話番号がこのTextViewに自動的に表示される仕組みです。

手順3:MainActivity.javaにコードを追加する

続いて、src/MainActivity.javaに以下のコードを追加します。

package com.example.andy.myapplication;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.widget.TextView;

import static android.Manifest.permission.READ_PHONE_NUMBERS;
import static android.Manifest.permission.READ_PHONE_STATE;
import static android.Manifest.permission.READ_SMS;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.phoneNumber);
        if (ActivityCompat.checkSelfPermission(this, READ_SMS) == PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(this, READ_PHONE_NUMBERS) ==
                        PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
                        READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
            TelephonyManager tMgr = (TelephonyManager)  this.getSystemService(Context.TELEPHONY_SERVICE);
            String mPhoneNumber = tMgr.getLine1Number();
            textView.setText(mPhoneNumber);
            return;
        } else {
            requestPermission();
        }
    }
    private void requestPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{READ_SMS, READ_PHONE_NUMBERS, READ_PHONE_STATE}, 100);
        }
    }
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case 100:
                TelephonyManager tMgr = (TelephonyManager)  this.getSystemService(Context.TELEPHONY_SERVICE);
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) !=
                        PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,
                                Manifest.permission.READ_PHONE_NUMBERS) != PackageManager.PERMISSION_GRANTED &&
                        ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) !=
                                PackageManager.PERMISSION_GRANTED) {
                    return;
                }
                String mPhoneNumber = tMgr.getLine1Number();
                textView.setText(mPhoneNumber);
                break;
        }
    }
}

コードのポイント

このサンプルでは、「READ_SMS」「READ_PHONE_NUMBERS」「READ_PHONE_STATE」という3つのパーミッションを使用しています。まずonCreate()内で権限が付与済みかどうかをチェックし、未許可の場合はrequestPermission()メソッドで実行時パーミッションをリクエストします。ユーザーが許可した後は、onRequestPermissionsResult()のコールバックで結果を受け取り、getLine1Number()メソッドによって電話番号を取得してTextViewに表示します。

なお、これらのパーミッションはAndroidManifest.xmlにも宣言しておく必要がある点に注意してください。

アプリを実行して動作を確認する

それでは、アプリケーションを実行してみましょう。ここでは、実際のAndroid端末がパソコンに接続されているものとします。Android Studioからアプリを実行するには、プロジェクト内のアクティビティファイルのいずれかを開き、ツールバーの「Run(実行)」アイコンをクリックします。表示された候補から自分のモバイルデバイスを選択してください。

【Android開発】端末の電話番号を取得する方法を実装例付きで解説

アプリを起動すると、実行時パーミッションの許可を求めるダイアログが表示されます。すべての権限を許可すると、上の画像のように取得した電話番号が画面に表示されます。

注意点

getLine1Number()は端末やSIMカード、キャリアの設定によって値が取得できない場合があります。近年のAndroidバージョンでは、より確実な方法としてPhone Number Hint APIなども提供されているため、用途に応じて使い分けることをおすすめします。

  1. Androidスマホで自分の電話番号を確認する方法【設定・連絡先アプリから簡単チェック】

    新しいスマホを購入したばかり、あるいは新しいSIMカードに交換したばかりだと、自分の電話番号がすぐに思い出せず困ることがありますよね。友人や職場の人に電話番号を聞かれたときに慌てないよう、確認方法を覚えておきましょう。実は、Androidで自分の電話番号を調べるのはとても簡単です。この記事では、誰でもできる複数の確認方法を詳しくご紹介します。Androidで自分の電話番号を確認する方法方法1: 設定アプリから確認するAndroidスマホの画面構成は、メーカーや機種、Android OSのバージョンによって多少異なります。ただし、機種に関わらず、以下の共通の手順で電話番号を確認できます。1. ア

  2. PCを使ってAndroidスマホをルート化する完全ガイド|手順・メリット・注意点を徹底解説

    Androidはユーザーに高い自由度を与えてくれるOSですが、それでも制限がないわけではありません。例えば、システムアプリについてはユーザーがコントロールできる範囲が狭く、アンインストールすることもバックグラウンドでの動作を止めることもできません。真の力とコントロールを手に入れるには、端末のルート化(root化)が必要です。この記事では、Androidスマホをルート化するメリットと、PCを使ってルート化する具体的な方法を詳しく解説します。 Androidスマホのルート化とは PCを使ったAndroidのルート化は、最も簡単な方法の一つです。複数のソフトウェアやツールキットが作業をサポートして