Hi Guys, Welcome to Proto Coders Point, In this Android Tutorial we will build an android application that will be able in reading incoming message automatically in android to verify otp.
FINAL OUTPUT OF READING OTP AUTOMATICALLY
Video Tutorial on How to auto read otp in android using Breadcast Receiver.
At the end of this android tutorial your app will be able the read sms and fetch all the text in that sms and then it will copy the OTP from SMS and paste it in EditText box.
So let’s begin implementation of otp sms reader
Create a new Android Project
Ofcourse you need to create a new android project or open any existing android project
To do so go to File > New > New Project
Give a name as per you need in my case i have names my application as “Auto sms otp reader”
Create a custom background for EditText and a Vector Image
1. edittextbackground.xml
create a new xml file in drawable folder
res > drawable(right click) > New > Drawable resource file
copy paste below xml code
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="5dp"/> <solid android:color="#dcdcdc"/> </shape>
2. Create a Vector Image
res > drawable (right click) > New > Vector Asset
a dialog box will appear on your screen as shown below
Then, Here you can select any kind of image clip Art.
Create a new Java Class names OTPReceiver
OTPReceiver.java
package com.example.autosmsotpreader; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.provider.Telephony; import android.telephony.SmsMessage; import android.widget.EditText; public class OTP_Receiver extends BroadcastReceiver { private static EditText editText; public void setEditText(EditText editText) { OTP_Receiver.editText=editText; } // OnReceive will keep trace when sms is been received in mobile @Override public void onReceive(Context context, Intent intent) { //message will be holding complete sms that is received SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); for(SmsMessage sms : messages) { String msg = sms.getMessageBody(); // here we are spliting the sms using " : " symbol String otp = msg.split(": ")[1]; editText.setText(otp); } } }
eg: sms received is Your OTP is : 4587, Then in above code i have split the complete message string in to 2 parts using “:” this special symbol.
Open AndroidManifest.xml file & add the uses permission
adding uses permission
add this 4 user-permission inside <manifest> here </manifest> tags
<!-- this are the permission need so that application can read sms --> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-permission android:name="android.permission.READ_PHONE_NUMBERS"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_SMS"/>
Now, Add the following receiver OTPReceiver.java in manifest under <application> tag
<receiver android:name=".OTP_Receiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
as shown in the below screenshot
MainActivity.java
Copy paste the below lines of code in MainActivity.java
package com.example.autosmsotpreader; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.widget.EditText; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; public class MainActivity extends AppCompatActivity { EditText otpnumber; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //we need to ask user permission to auto read sms requestsmspermission(); otpnumber = (EditText)findViewById(R.id.edittext); new OTP_Receiver().setEditText(otpnumber); } private void requestsmspermission() { String smspermission = Manifest.permission.RECEIVE_SMS; int grant = ContextCompat.checkSelfPermission(this,smspermission); //check if read SMS permission is granted or not if(grant!= PackageManager.PERMISSION_GRANTED) { String[] permission_list = new String[1]; permission_list[0]=smspermission; ActivityCompat.requestPermissions(this,permission_list,1); } } }
Recommended Android Articles
textlocal api to send sms/otp verification
android check internet connection continuously