我正在开发一个监听特定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,请帮助
答案 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")
}
}
}