First you need to request some permissions, put this in your Manifest.xml file:
<uses-feature
android:name="android.hardware.telephony"
android:required="true" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
Than you can use this code directly in your Fragment to receive and send SMSs:
//This code to check if permissions are granted (used in fragment) than request them if not
if (activity?.checkSelfPermission(android.Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED
|| activity?.checkSelfPermission(android.Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED
|| activity?.checkSelfPermission(android.Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED
) {
activity?.requestPermissions(
arrayOf(android.Manifest.permission.RECEIVE_SMS,
android.Manifest.permission.SEND_SMS,
android.Manifest.permission.READ_SMS), PackageManager.PERMISSION_GRANTED
)
}
//And this code to wait for and recive SMS
val br = object : BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
for (sms in Telephony.Sms.Intents.getMessagesFromIntent(
p1
)) {
val smsSender = sms.originatingAddress
val smsMessageBody = sms.displayMessageBody
if (smsSender == "the_number_that_you_expect_the_SMS_to_come_FROM") {
binding.textView.text = smsMessageBody
break
}
}
}
}
//register this broadcast receiver here
registerReceiver(
requireContext(),
br,
IntentFilter("android.provider.Telephony.SMS_RECEIVED"),
RECEIVER_EXPORTED
)
//This function for sending SMS
fun sendSms(phoneNumber: String, message: String) {
val smsManager = SmsManager.getDefault()
smsManager.sendTextMessage(phoneNumber, null, message, null, null)
}
Or you can use it in your Activity like this:
if (checkSelfPermission(android.Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(android.Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(android.Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED
) {
requestPermissions(
arrayOf(android.Manifest.permission.RECEIVE_SMS,
android.Manifest.permission.SEND_SMS,
android.Manifest.permission.READ_SMS), PackageManager.PERMISSION_GRANTED
)
}
val br = object : BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
for (sms in Telephony.Sms.Intents.getMessagesFromIntent(
p1
)) {
val smsSender = sms.originatingAddress
val smsMessageBody = sms.displayMessageBody
if (smsSender == "the_number_that_you_expect_the_SMS_to_come_FROM") {
binding.textView.text = smsMessageBody
break
}
}
}
}
registerReceiver(
br,
IntentFilter("android.provider.Telephony.SMS_RECEIVED"),
RECEIVER_EXPORTED
)
//This function for sending SMS
fun sendSms(phoneNumber: String, message: String) {
val smsManager = SmsManager.getDefault()
smsManager.sendTextMessage(phoneNumber, null, message, null, null)
}