gpt4 book ai didi

android - 为什么有时 SMS BroadcastReceiver 会被调用两次?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:37:26 24 4
gpt4 key购买 nike

我为 android.provider.Telephony.SMS_RECEIVED 注册了一个 BroadcastReceiver。

有时 BroadcastReceiver onReceive 会在同一条短信上被调用两次。

这是为什么?

我做错了什么?

private void initSmsReceivers() {
smsReceiver = new SmsReceiver();
getActivity().registerReceiver(smsReceiver,
new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
}



public class SmsReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// ---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
if (bundle != null) {
// ---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
// str += "SMS from " + msgs[i].getOriginatingAddress();
// str += " :";
str += msgs[i].getMessageBody().toString();

}
// ---display the new SMS message---
String output = CryptoUtils.decrypt(str);
Toast.makeText(context, output, Toast.LENGTH_LONG).show();

try {
parsemessage(output);
} catch (JSONException e) {
// TODO Auto-generated catch block
Log.e("JSON2", e.toString());
}

}
}
}

最佳答案

可能是您正在编程静态注册广播接收器。因此,请确保 initSmsReceivers 仅被调用一次,并且在您的 list 中您没有重新注册该接收器!

以下是在 list 中静态注册短信接收者的方法:

<receiver
android:name="your.package.SmsReceiver"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS" >
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

关于android - 为什么有时 SMS BroadcastReceiver 会被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com