【问题标题】:Android....Something wrong with my SMS receiver..Receiving messages twiceAndroid ....我的短信接收器有问题..两次接收消息
【发布时间】:2016-10-01 04:03:53
【问题描述】:

我在一次对话中收到两次相同的消息。

也许,我的接收器有问题。

请帮我找一下好吗?

public class SmsReceiver extends BroadcastReceiver {

private final String TAG = "MessagingReceiver";

    private Context mContext;
    private SharedPreferences mPrefs;

    private String mAddress;
    private String mBody;
    private long mDate;

    private Uri mUri;

    public static final String SMS_URI = "content://sms";
    public static final Uri RECEIVED_MESSAGE_CONTENT_PROVIDER = Uri.parse("content://sms/inbox");

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "onReceive");
        abortBroadcast();

        mContext = context;
        mPrefs = PreferenceManager.getDefaultSharedPreferences(context);

        if (intent.getExtras() != null) {
            Object[] pdus = (Object[]) intent.getExtras().get("pdus");
            SmsMessage[] messages = new SmsMessage[pdus.length];

            for (int i = 0; i < messages.length; i++) {
                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            }

            SmsMessage sms = messages[0];

            if (messages.length == 1 || sms.isReplace()) {
                mBody = sms.getDisplayMessageBody();
            } else {
                StringBuilder bodyText = new StringBuilder();
                for (SmsMessage message : messages) {
                    bodyText.append(message.getMessageBody());
                }
                mBody = bodyText.toString();
            }

            mAddress = sms.getDisplayOriginatingAddress();
            mDate = sms.getTimestampMillis();

            addMessageToInbox(mContext, mAddress, mBody, mDate);
        }
    }

    public static Uri addMessageToInbox(Context context, String address, String body, long time) {

        ContentResolver contentResolver = context.getContentResolver();
        ContentValues cv = new ContentValues();

        cv.put("address", address);
        cv.put("body", body);
        cv.put("date_sent", time);

        return contentResolver.insert(RECEIVED_MESSAGE_CONTENT_PROVIDER, cv);
    }
}

清单.xml

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

【问题讨论】:

  • 您是否检查过 onReceive() 是否被调用了两次?放置一些日志消息并检查 onReceive() 是否被调用了两次......另外,在您定义意图过滤器的地方分享您的清单
  • 还有一点:打印onReceive中收到的action: "Log.d("TEST", intent.getAction());"这样,您可以查看您是否收到两次相同的操作...或者该操作是否不同...检查您是否仅在清单(意图过滤器)中注册您的广播,或者您是否注册了两次
  • 太好了.. 让我们检查一下您在 onReceive() 中收到的操作(另外,分享您的 manifest.xml - 只是您定义意图过滤器的部分)
  • 请分享结果 :) 添加调试消息后日志中打印的内容

标签: android sms receiver


【解决方案1】:

实际上,我已经调用了两次 onReceive()。一旦在上面的广播接收器中......其次,我将这个广播接收器扩展到另一个接收器。这就是双重消息背后的原因

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多