Android电话SMS接收器无法正常工作

时间:2019-06-21 10:58:53

标签: java android

我正在开发一个监听特定SMS通知并稍后在其上生成一些分析数据的应用程序。我无法捕获任何传入的SMS消息,如果我错过了某些事情或做错了什么,请提供帮助

清单文件

<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,请帮助

1 个答案:

答案 0 :(得分:0)

您应该将此权限添加为具体内容 <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")
        }
    }
}