android - 无法在我的 Android 应用程序中接收短信

标签 android sms broadcastreceiver

我正在尝试从我的 android 应用程序中的特定号码接收短信,并尝试在我的应用程序中显示消息内容。但是我收不到短信。

下面给出了我用来接收的类。

public class SmsReceiver extends BroadcastReceiver {

StringBuilder sb;

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction()
            .equals("android.provider.Telephony.SMS_RECEIVED")) {

        Bundle extras = intent.getExtras();
        if (extras != null) {
            Object[] pdus = (Object[]) extras.get("pdus");

            if (pdus.length < 1)
                return; // Invalid SMS. Not sure that it's possible.

            sb = new StringBuilder();
            String sender = null;
            for (int i = 0; i < pdus.length; i++) {

                SmsMessage message = SmsMessage
                        .createFromPdu((byte[]) pdus[i]);
                if (sender == null)
                    sender = message.getOriginatingAddress();

                String text = message.getMessageBody();
                if (text != null)
                    sb.append(text);
            }
            if (sender != null && sender.equals("********")) {
                // Process our sms...

                Intent broadcastIntent = new Intent();
                broadcastIntent.setAction("SMS");

                broadcastIntent.putExtra("data", sb.toString());



                context.sendOrderedBroadcast(broadcastIntent, null);
                System.out.println("MESSAGE FROM SERVER -->"
                        + sb.toString());


                this.abortBroadcast();
            }
            return;
        }
    }
}

}

收到短信后,我会检查发件人,如果是我要找的发件人,我会再发送一 strip 有短信的广播。我将在那里展示内容。

查看我的 list

<receiver android:name=".SmsReceiver" >
        <intent-filter android:priority="2147483647" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            <action android:name="SMS" />
        </intent-filter>
    </receiver>

我找不到解决方案,请帮忙。

最佳答案

要检查的事项(根据我的经验):

  • android:priority="2147483647" 无效,最大值为1000。大于此的数字将被忽略
  • 将您的this.abortBroadcast(); 插入for 循环(被调用pdus.length 次)
  • 如果发送的短信符合您的标准,为了测试,将其保存在您的应用程序首选项中,并在您的主要 Activity 中读取您首选项中的值,如果有效,则问题出在您的 broadcastIntent .

关于android - 无法在我的 Android 应用程序中接收短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12968504/

相关文章:

android - 如何使用 SQLite 从图库中选择图片并另存为背景 ImageView

Android 短信收件箱未读计数问题

android - 在我的应用程序中阅读短信后,更新手机中阅读的短信

java - 使用jsp通过HTTP发送短信

android - 未调用 BroadcastReceiver (Kotlin)

java - 从fragment添加到recyclerview并从recyclerview内部删除recyclerview

android - 多个音频播放器(Java 或 C++),可实时修改

android - 当我的应用程序位于前台时,是否可以拦截截图事件

android - BroadcastReceiver.onReceive 中的上下文是否始终是调用 registerReceiver 的 Activity ?

Android:如果应用程序被杀死,BroadcastReceivers 会停止吗?