Почему событие onReceive не срабатывает в BroadcastReceiver в Android Kotlin при отправке и получении SMS на одном и томAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему событие onReceive не срабатывает в BroadcastReceiver в Android Kotlin при отправке и получении SMS на одном и том

Сообщение Anonymous »

Новые функции Android Studio Narwhal 4 | 2025.1.4
Сборка № AI-251.27812.49.2514.14217341, построенная 6 октября 2025 г.
ВМ: 64-разрядная серверная виртуальная машина OpenJDK от JetBrains s.r.o.
Плагин Kotlin: режим K2
Gradle 8.13
SDK 36 и API 16
Android Phone API 12
Я задаю этот вопрос, потому что мой предыдущий связанный вопрос был закрыт, хотя кто-то опубликовал ответ, который не делает того, что я ожидал.
Короче говоря, событие onReceive BroadcastReceiver не будет выполняться и не будет вызываться. Я рассмотрел все предложенные вопросы StackOverflow, связанные с вопросом, который я задаю, и, к сожалению, ни одно из предложений и/или ответов мне не помогло. Я думал, что подошел близко, когда в одном из ответов на вопрос упоминается приоритет Android. Даже это не решило мою проблему.
Итак, если упростить. В основном я работал с ответом на мой предыдущий вопрос, копируя и вставляя. Итак, вот он:
AndroidMainfest.xml

SmsReceiver.kt

Код: Выделить всё

package com.example.myfirstapp

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.provider.Telephony
import android.util.Log

class SmsReceiver1 : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == Telephony.Sms.Intents.SMS_RECEIVED_ACTION) {
Log.d("SmsReceiver", "SMS Received!")
val messages = Telephony.Sms.Intents.getMessagesFromIntent(intent)
for (sms in messages) {
Log.d("SmsReceiver", "From: ${sms.displayOriginatingAddress}, Body ${sms.messageBody}")
}
}
}
}
MainActivity

Код: Выделить всё

class MainActivity : AppCompatActivity() {

private val requestPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
if (permissions.all { it.value }) {
Toast.makeText(this, "SMS Permissions Granted.", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "SMS Permissions Denied.", Toast.LENGTH_LONG).show()
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkAndRequestSmsPermissions()

val smsbtn = findViewById(R.id.SMSButton)
smsbtn.setOnClickListener {

val phoneNumber = "**********"
val message = "HEY!!! lol...  "

// on the below line we are creating a try and catch block
try {

val smsManager: SmsManager
if (Build.VERSION.SDK_INT >= 23) {
//if SDK is greater that or equal to 23 then
//this is how we will initialize the SmsManager
smsManager = this.getSystemService(SmsManager::class.java)
} else {
//if user's SDK is less than 23 then
//SmsManager will be initialized like this
smsManager = SmsManager.getDefault()
Toast.makeText(applicationContext, "less", Toast.LENGTH_LONG).show()
}

// on below line we are sending text message.
smsManager.sendTextMessage(phoneNumber, null, message, null, null)

// on below line we are displaying a toast message for message send,
Toast.makeText(applicationContext, "Message Sent", Toast.LENGTH_LONG).show()

} catch (e: Exception) {

// on catch block we are displaying toast message for error.
Toast.makeText(
applicationContext,
e.message.toString(),
Toast.LENGTH_LONG
)
.show()
}
}
}

private fun checkAndRequestSmsPermissions() {
val requiredPermissions = arrayOf(Manifest.permission.RECEIVE_SMS, Manifest.permission.READ_SMS)
val permissionsToRequest = requiredPermissions.filter {
ContextCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED
}

if (permissionsToRequest.isNotEmpty()) {
requestPermissionLauncher.launch(permissionsToRequest.toTypedArray())
} else {
Toast.makeText(this, "SMS permissions are already granted.", Toast.LENGTH_SHORT).show()
}
}
}
Итак, я просто нажимаю кнопку «Отправить SMS» и ожидаю, что мое приложение прочитает входящие SMS, чего оно не делает.
Это скопировано прямо из ответа на мой предыдущий вопрос, за исключением отправки SMS-сообщения smsbtn. Хотя я лучше понимаю, как это должно работать, я до сих пор не могу понять, почему мое приложение не может просто прочитать текст входящего SMS. Я даже добавил приоритет AndroidManifest.xml. Это все равно не помогает. Теперь я отправляю SMS и пытаюсь получить/прочитать его на том же телефоне Android, на котором запущено это приложение. Проблема в том, что мое приложение не может прочитать входящие SMS?

Подробнее здесь: https://stackoverflow.com/questions/797 ... lin-when-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»