短信接收器在一段时间后停止工作
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)版本
同样的,我用的代码如下-
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);
}
}
}
}
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>
我需要读取来自一些电子商务应用程序的传入短信。为此,我添加了 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)版本
同样的,我用的代码如下-
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); } } }
}
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>