java - Android 电话短信接收器无法正常工作

标签 java android

我正在开发一个应用程序,用于监听特定的短信通知,然后生成一些分析数据。我无法收到任何传入的短信,如果我错过了什么或做错了什么,请帮助

list 文件

<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

<receiver android:name=".SmsReceiver">
    <intent-filter>
      <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

SmsReceiver类

package com.example.sms_project;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.provider.Telephony;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) {
            Toast.makeText(context, "Message received from SMS", Toast.LENGTH_SHORT).show();
        }
    }
}

收到的任何短信都不会触发 Toast,请帮忙

最佳答案

您应该添加以体现此权限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 如果仍然不起作用,请尝试以下代码:

class SMSBroadcastReceiver : BroadcastReceiver() {
    var listenerSMS: ((String, String) -> Unit)? = null

    fun setOnIncomeSmsDetectListener(f: ((String, String) -> Unit)) {
        listenerSMS = f
    }

    val sms = SmsManager.getDefault()
    override fun onReceive(context: Context?, intent: Intent?) {
        val bundle = intent?.extras

        try {
            if (bundle != null) {
                val pdusObj = bundle.get("pdus") as Array<*>
                for (i in pdusObj.indices) {
                    val currentMessage = SmsMessage.createFromPdu(pdusObj[i] as ByteArray)
                    val phoneNumber = currentMessage.getDisplayOriginatingAddress()
                    val message = currentMessage.getDisplayMessageBody()
                    listenerSMS?.invoke(phoneNumber, message)
                    Log.i("SmsReceiver", "senderNum: $phoneNumber; message: $message")
                }
            }

        } catch (e: Exception) {
            Log.e("SmsReceiver", "Exception smsReceiver$e")
        }
    }
}

关于java - Android 电话短信接收器无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56702104/

相关文章:

android - Android | Kotlin回收 View 和自定义适配器仅创建一行

android - 如果滑动速度足够快,则不会调用 MotionLayout.TransitionListener

android - 无法使用改造解析对象内部的 jsonarray 的 jsonarray?

Android USB 有时无法识别

java - 在点数组中输入一个值?

java - 如何在处理自定义错误异常时获取 SOAP 错误的错误代码

java - 无法在 R ubuntu 12.04 中安装 intamap 包(涉及 java)

Android 图片未出现在 fragment 中

java - Java 中的对象初始化

java - Javers MongoRepository 为 Boolean JsonPrimitive 抛出 IllegalArgumentException