r2d2ff3por ropon
r2d2ff3por ropon

Reputation: 151

SMSmanager.getDefault() - DEPRECATION - what to replace?

Recently I started studying programming for the android system in the kotlin programming language. When writing a simple application for sending SMS from the application itself, I ran into the problem that SmsManager.getDefault() is now DEPRECATION and, accordingly, it is not possible to send SMS as indicated in the video lessons. Question - how is it now possible to send SMS from the app itself? I read the official documentation, but could not understand the solution method.

package com.example.mysendsms

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.telephony.SmsManager
import com.example.mysendsms.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    lateinit var binding: ActivityMainBinding
    val sms = SmsManager.getDefault()

    override fun onCreate(savedInstanceState: Bundle?) {
        binding = ActivityMainBinding.inflate(layoutInflater)
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        binding.send.setOnClickListener {
            val textMsg = binding.message.toString().trim()
            val numberMsg = binding.number.toString().trim()
            sendSMS(textMsg,numberMsg)
        }
    }

    private fun sendSMS(text: String, number: String) {
            sms.sendTextMessage(number,null,text,null,null)
        }
    }
}

Upvotes: 14

Views: 6658

Answers (3)

Unes
Unes

Reputation: 21

The @user158 answer is perfect, but it has a typo. As mentioned getDefault() is deprecated starting from API 31, so the if condition should be like this:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)

Note: context.getSystemService(SmsManager::class.java) returns null for API levels below 31.

Upvotes: 2

kaushalyap
kaushalyap

Reputation: 13597

SmsManager getDefault() method is only deprecated starting from API 31, so you should still use getDefault() APIs levels below the 31.

val smsManager: SmsManager = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            context.getSystemService(SmsManager::class.java)
        } else {
            SmsManager.getDefault()
        }

Upvotes: 12

Ninjaval
Ninjaval

Reputation: 263

By official documentation you can get it like this

val smsManager = context.getSystemService(SmsManager::class.java)

Upvotes: 6

Related Questions