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

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 by Step Implementation
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. You can either choose Java or Kotlin 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    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 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. It is mandatory to add above these two lines to obtain the phone numbers.
Now let’s get towards the working of the app.
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);        }    }} | 
Below is the Kotlin Implementation of above code. Go to the MainActivity.kt file and refer below code.
Kotlin
import android.content.pm.PackageManagerimport android.graphics.Colorimport android.graphics.drawable.ColorDrawableimport android.os.Buildimport android.os.Bundleimport android.telephony.TelephonyManagerimport android.view.Viewimport android.widget.TextViewimport androidx.annotation.RequiresApiimport androidx.appcompat.app.AppCompatActivityimport androidx.core.app.ActivityCompatimport com.amangfg.storagefirebase.Rclass MainActivity : AppCompatActivity() {    var phone_number: TextView? = null    @RequiresApi(api = Build.VERSION_CODES.M)    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        val actionbar = supportActionBar        actionbar!!.setBackgroundDrawable(ColorDrawable(Color.parseColor("#11FF01")))        // TextView reference        phone_number = findViewById(R.id.phone_number)    }    fun GetNumber(v: View?) {        if (ActivityCompat.checkSelfPermission(                this,                permission.READ_SMS            ) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(                this,                permission.READ_PHONE_NUMBERS            ) ==            PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(                this,                permission.READ_PHONE_STATE            ) == PackageManager.PERMISSION_GRANTED        ) {            // Permission check            // Create obj of TelephonyManager and ask for current telephone service            val telephonyManager = this.getSystemService(TELEPHONY_SERVICE) as TelephonyManager            val phoneNumber = telephonyManager.line1Number            phone_number!!.text = phoneNumber            return        } else {            // Ask for permission            requestPermission()        }    }    private fun requestPermission() {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            requestPermissions(                arrayOf(                    permission.READ_SMS,                    permission.READ_PHONE_NUMBERS,                    permission.READ_PHONE_STATE                ), 100            )        }    }    override fun onRequestPermissionsResult(        requestCode: Int,        permissions: Array<String>,        grantResults: IntArray    ) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults)        when (requestCode) {            100 -> {                val telephonyManager = this.getSystemService(TELEPHONY_SERVICE) as TelephonyManager                if (ActivityCompat.checkSelfPermission(this, permission.READ_SMS) !=                    PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(                        this,                        permission.READ_PHONE_NUMBERS                    ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(                        this,                        permission.READ_PHONE_STATE                    ) != PackageManager.PERMISSION_GRANTED                ) {                    return                }                val phoneNumber = telephonyManager.line1Number                phone_number!!.text = phoneNumber            }            else -> throw IllegalStateException("Unexpected value: $requestCode")        }    }} | 
Output:
				
					


