简体   繁体   English

Android Telephony SMS Receiver无法正常工作

[英]Android Telephony SMS Receiver not working

I am developing an app that listens for specific SMS notification and later generates some analytics data on it. 我正在开发一个应用程序,用于侦听特定的SMS通知,然后在其上生成一些分析数据。 I was not able to catch any incoming SMS messages, please help if I have missed something or have done something wrong 我无法收到任何传入的短信,如果我遗漏了某些内容或做错了什么,请提供帮助

Manifest File 清单文件

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

Any SMS that is received does not trigger the Toast, please help 收到的任何短信都不会触发Toast,请提供帮助

You shuoud add to manifiest this permission <uses-permission android:name="android.permission.READ_PHONE_STATE"/> and if still not working try this code: 你shuoud添加到最明显的这个权限<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")
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM