Sms ContentObserver onChange () срабатывает несколько раз

Я знаю, что этот вопрос задавали несколько раз, но никто не смог найти рабочего ответа из того, что я видел.

Я работаю над приложением для перехвата текстовых сообщений и, в зависимости от номера отправки, всплывает с настраиваемым предупреждением. У меня он прекрасно работает с широковещательным приемником, однако, если у пользователя установлен goSms, метод onReceive () никогда не вызывается, поскольку goSms прерывает его, прежде чем он когда-либо достигнет моего приложения.

Чтобы обойти это, я использую обозреватель контента на content: // sms / Он работает нормально, однако onChange () вызывается дважды с точно такими же параметрами. Я попытался проверить отметки времени, но они такие же, как и тип, и все остальные параметры, которые я установил.

Судя по тому, что я видел, это обычная проблема, но я нигде не видел ответа на нее.

    @Override
public void onChange(boolean selfChange) {
    super.onChange(selfChange);
    querySMS();
}

protected void querySMS() {
    Cursor cur = getContentResolver().query(u, null, null, null, null);
    cur.moveToNext(); // this will make it point to the first record, which is the last SMS sent
    String type = cur.getString(cur.getColumnIndex("type"));
    String body = cur.getString(cur.getColumnIndex("body")); //content of sms
    String add = cur.getString(cur.getColumnIndex("address")); //phone num
    if (type.equals("1")) {
        if (add.equals(Test.SENDER)) {              
            String[] bodys = body.split(" ", 7);
            if (bodys[0].equals("test")) {
                test = true;
            }
            cat = bodys[1];
            level = bodys[2];
            urgency = bodys[3];
            certainty = bodys[4];
            carrier = bodys[5];
            message = bodys[6];
            final Intent intent = new Intent(context, AlertActivity.class);
            Bundle b = new Bundle();
            b.putString("title", cat);
            b.putString("certainty", certainty);
            b.putString("urgency", urgency);
            b.putString("level", level);
            b.putString("message", message);
            b.putBoolean("test", test);
            intent.putExtras(b);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
            carrierName = manager.getNetworkOperatorName();
            if (carrierName.replaceAll(" ", "").equals(carrier)) {

                context.startActivity(intent);
            } else {
                //testing
                Toast.makeText(context, carrierName.replaceAll(" ", ""), Toast.LENGTH_LONG).show();
            }
        }
    }
}

Поскольку onChange () запускается дважды, я также получаю два предупреждения. Я хоть убей не могу придумать способ обойти это.

7
задан r2DoesInc 2 February 2012 в 19:16
поделиться