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.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.AppCompatActivity import androidx.core.app.ActivityCompat import com.amangfg.storagefirebase.R class 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: