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>
短信接收器类
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,请帮忙
解决方案
你应该添加到manifiest这个权限
<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")
}
}
}
推荐阅读
- python - File content not reading without seek in python
- laravel - Laravel Sanctum with SPA: Best practice for setting the CSRF cookie
- node.js - npm run build in php Laravel 挂起或退出
- sql - 加入这两个表以获得这个特定的输出?
- javascript - 过滤数组数组JS
- intellij-idea - JavaFX、JLink/JPackage 模块问题 - 添加库“启动层 java.lang.module.FindException 初始化期间发生错误”
- python - 使用 minidom 查找具有特定子节点的 XML 节点
- ruby-on-rails - Rails 5:查询前面没有另一条记录(event_type)的记录(event_type)
- flutter - 在 Flutter 应用程序中读取之前存储在本机应用程序中的共享首选项
- java - Kotlin/Java:这个单例对象应该有这些子方法来检查吗?