Reputation: 151
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
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
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
Reputation: 263
By official documentation you can get it like this
val smsManager = context.getSystemService(SmsManager::class.java)
Upvotes: 6