SMSmanager.getDefault() - 弃用 - 替换什么?

问题描述 投票:0回答:4

最近开始学习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)
        }
    }
}
android kotlin smsmanager
4个回答
8
投票

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()
        }

5
投票

通过官方文档你可以这样得到

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

0
投票

根据这个

...kotlin

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

0
投票

@user158的答案很完美,但有一个错字。如前所述,从

getDefault()
开始,
API 31
已被弃用,因此
if
条件应如下所示:

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

注意:

context.getSystemService(SmsManager::class.java)
对于低于 31 的 API 级别返回 null。

© www.soinside.com 2019 - 2024. All rights reserved.