短信接收器在一段时间后停止工作

SMS receiver stops working after sometime

我需要读取来自一些电子商务应用程序的传入短信。为此,我添加了 BroadcastReceiver 来接收和阅读短信。还为此添加了 READ_SMS 的运行时权限,为该接收器设置了 1000 的 priority。我测试了几天,发送了一些虚拟消息,以及类似于 -

的电子商务应用程序消息

Delivered: Your package with Macbook Air ... has been successfully delivered. More info at http://amzn.in/bAieP6f

Your SnapDeal order AWB:12791911327207 is delivered on 19-02-2020 at 16:20 by Xpressbees received by Username. You may contact us on 020-49116100.

Delivered: Gillette Sensitive Ski... from flipkart.com was delivered. Click here to give feedback: http://fkrt.it/u33XFQHHHH

以此类推

但是在测试了几天后,大约 3-4 天,应用程序 突然停止工作 阅读那些和任何其他消息。

注意:我使用的设备是小米A1,Android9(Pie)版本

同样的,我用的代码如下-

  1. SmsListener.java(广播接收器class)

    public class SmsListener extends BroadcastReceiver {
    
      @Override
      public void onReceive(Context context, Intent intent) {
         // TODO Auto-generated method stub
    
         Log.d("TAG","msg receiver entered");
    
    
             if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) {
                 String messageBody = "";
                 String msg_from = "";
                 for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) {
    
                     msg_from = smsMessage.getServiceCenterAddress();
                         Log.d("TAG","msg_from = "+msg_from);
                         Log.d("TAG","msgBody = "+messageBody);
    
    
                 }
             }
         }
    

    }

  2. AndroidManifest.xml

a) 必要的权限

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />

b) 接收者条目

    <receiver android:name=".receiver.SmsListener"
        >
        <intent-filter android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>

    </receiver>

我也尝试将优先级修改为 999,正如其他一些 Whosebug 对类似查询的回答所建议的那样,但没有成功。

虽然,相同的代码在演示应用程序中仍然有效,但不幸的是在我的应用程序中没有。

我也尝试使用 EventBus 参考 here。这也工作了一段时间,除非我再次尝试使用

进行测试

Your SnapDeal order AWB:12791911327207 is delivered on 19-02-2020 at 16:20 by Xpressbees received by Username. You may contact us on 020-49116100.

不知道出了什么问题,因为代码看起来不错,并且在同一个应用程序中运行良好,同样的代码在另一个演示应用程序中也运行良好。

我还在 中找到了将应用程序列入白名单的建议。虽然,不知道该怎么做,也不知道它是否是完美的解决方案。

请建议如何实现读取传入的短信,或者我遗漏或出错的地方。谢谢。

最后,只需添加

即可使其在更高版本中也能正常工作
android:permission="android.permission.BROADCAST_SMS"

在 AndroidManifest.xml

中的接收者标签中

并使其类似于 -

        <receiver android:name=".receiver.SmsListener"
            android:permission="android.permission.BROADCAST_SMS"
            >
            <intent-filter android:priority="999">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>

        </receiver>