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