最近开始学习kotlin编程语言的android系统编程。在编写一个从应用程序本身发送短信的简单应用程序时,我遇到了 SmsManager.getDefault() 现在已弃用的问题,因此无法按照视频课程中的指示发送短信。问题 - 现在如何从应用程序本身发送短信?我看了官方文档,但无法理解解决方法。
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)
}
}
}
SmsManager
getDefault()
方法仅从 API 31
开始弃用,因此您仍应使用 31 以下的 getDefault()
API 级别。
val smsManager: SmsManager = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
context.getSystemService(SmsManager::class.java)
} else {
SmsManager.getDefault()
}
通过官方文档你可以这样得到
val smsManager = context.getSystemService(SmsManager::class.java)
根据这个
...kotlin
val smsManager:SmsManager=
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M{
applicationContext.getSystemService(SmsManager::class.java)
}
else {
SmsManager.getDefault()
}
...
@user158的答案很完美,但有一个错字。如前所述,从
getDefault()
开始,API 31
已被弃用,因此 if
条件应如下所示:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
注意:
context.getSystemService(SmsManager::class.java)
对于低于 31 的 API 级别返回 null。