How to Obtain the Phone Number of the Android Phone Programmatically?

06 Jun, 2021
While creating an android app, many times we need authentication by mobile number. To enhance the user experience, we can auto-detect the mobile number in a mobile system. So let’s start an android project! We will create a  button, when clicked it will get a mobile number and display it in TextView.
Step 1: Create a New Project
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Java as the programming language.
Step 2: Working with the activity_main.xml file
Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Create a TextView to display the mobile number. Below is the code for the activity_main.xml file.
XML
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout     xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity">      <TextView        android:id="@+id/phone_number"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="18sp"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintHorizontal_bias="0.149"        app:layout_constraintLeft_toLeftOf="parent"        app:layout_constraintRight_toRightOf="parent"        app:layout_constraintTop_toTopOf="parent"        app:layout_constraintVertical_bias="0.292" />      <Button        android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:backgroundTint="#11FF01"        android:onClick="GetNumber"        android:text="Get Mobile Number"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintHorizontal_bias="0.679"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent"        app:layout_constraintVertical_bias="0.499" />  </androidx.constraintlayout.widget.ConstraintLayout>
Note: android:backgroundTint used to change the color of the button. 
Step 3: Add permission in the manifest file
Now about permission, we are doing detection using the ‘Telephony’ class. You should ask the user for 2 permissions
Read phone stateRead Mobile Numbers
Read phone state
Read Mobile Numbers
XML
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /><uses-permission android:name="android.permission.READ_PHONE_STATE" />
Add above code in manifest.xml file. Now let’s get toward the working of the app i.e. onclickListener of a button. 
Step 4: Working with the MainActivity.java file
Go to the MainActivity.java file and refer to the following code. About telephony class: Enables the app to access information about the telephony services on the android device. We can determine telephony services and states, as well as access some types of subscriber information. Below is the code for the MainActivity.java file. Comments are added inside the code to understand the code in more detail.
Java
import android.content.Context;import android.content.pm.PackageManager;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.os.Build;import android.os.Bundle;import android.telephony.TelephonyManager;import android.view.View;import android.widget.TextView;  import androidx.annotation.RequiresApi;import androidx.appcompat.app.ActionBar;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;  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 phone_number;      @RequiresApi(api = Build.VERSION_CODES.M)      @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);          ActionBar actionbar = getSupportActionBar();        actionbar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#11FF01")));          // Binding views        phone_number = findViewById(R.id.phone_number);    }      // Function will run after click to button    public void GetNumber(View v) {           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) {            // Permission check              // Create obj of TelephonyManager and ask for current telephone service            TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);            String phoneNumber = telephonyManager.getLine1Number();              phone_number.setText(phoneNumber);            return;        } else {            // Ask for permission            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 telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);                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) {                    return;                }                String phoneNumber = telephonyManager.getLine1Number();                phone_number.setText(phoneNumber);                break;            default:                throw new IllegalStateException("Unexpected value: " + requestCode);        }    }}
Output: 
Android
Java
Java
Android
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.