作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
首先,我已经搜索了可能的解决方案,尝试了所有方法,但仍然没有用。我一定是遗漏了什么。
我正在尝试创建一个接收/读取和写入 SMS 的应用程序。写入部分工作正常,我的广播接收器只是收不到广播。
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
...
<receiver android:name=".SmsReceiver"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "ON RECEIVE BROADCAST", Toast.LENGTH_LONG).show();
Log.d("ON ","RECEIVE");
Bundle bundle = intent.getExtras();
Object[] messages = (Object[]) bundle.get("pdus");
SmsMessage[] sms = new SmsMessage[messages.length];
// Create messages for each incoming PDU
for (int n = 0; n < messages.length; n++) {
sms[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
for (SmsMessage msg : sms) {
Log.e("RECEIVED MSG",":"+msg.getMessageBody());
// Verify if the message came from our known sender
}
}
没有触发任何日志或 toast 。
尝试将 list 上的操作更改为 android.intent.action.AIRPLANE_MODE
只是为了测试声明和接收到的广播,只是不适用于 SMS。
在不同的手机上试过,成功了。一定是因为我用的是Handcent SMS,以及它如何阻止广播。无论哪种方式,我都需要它在每部手机上工作,而不管安装的应用程序如何。
最佳答案
尝试如下声明您的接收器:
<receiver android:name=".SmsReceiver" android:permission="android.permission.BROADCAST_SMS" android:exported="true">
<intent-filter android:priority="5822" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
这对我来说工作得很好,我只添加了一个标志来告诉这个receiver is exported
。
编辑:我忘了将优先级添加到 Intent 过滤器中。使用高数字作为优先级。
关于android - 广播接收器不适用于 SMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19500381/
我是一名优秀的程序员,十分优秀!