我使用 Kotlin Android Studio
想象一下这个场景。
我有一个应用程序,根据用户的情况,我希望他们能够在不访问互联网的情况下通过使用短信来访问他们的信息。
为此,应用程序必须能够访问接收到的短信的内容并对其进行分析(从特定号码接收短信并分析消息的文本)
应用程序还需要能够通过访问用户的短信并等待响应来向特定号码发送定义的消息。
我在 YouTube 上观看了各种视频,还在各个网站上阅读了有关如何接收和发送短信的信息,但是它们都不起作用。
我希望你给我一个接收和发送短信的示例代码
Manifest.xml 文件中:
<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" />
您可以直接在片段中使用此代码来接收和发送短信:
//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)
}