SmS count not increasing. message id is constant

扶醉桌前 提交于 2020-01-25 20:02:09

问题


here I am inserting a record to DB each time I receive or send a SMS. its working fine.But some time all sms will get same id . In which situation do I get same sms id for different sms.

    public SmsMms(Handler handler) {
        super(handler);
        Log.d(TAG, "SMS Constructor");
    }

    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Log.d("sms", "SMS ONCHANGE");
        if(rc == null )
        rc = new RecordCount(getApplicationContext());


        Uri uriSMSURI = Uri.parse(SMS);
        Cursor cur = getContentResolver().query(uriSMSURI, null, null,
                null, null);
        int rCount = cur.getCount();
        long recCount = rc.select("SMS");

        Log.d("sms", "rCount from sms db: " + rCount + "reccout from device db: " + recCount);
        long diffCount;
        if(rCount > recCount){
            diffCount = rCount - recCount;
        }else {
            diffCount = recCount - rCount;
        }
        Log.d("sms", "diff: " + diffCount);
        Log.d("sms", "sms count: " + rc.select("SMS") + "===rCount: " + rCount);
        if (rCount >= recCount || diffCount > 1) {
            Log.d("sms", "diff: ");
            rc.updateRecordCount("SMS", rCount);
            cur.moveToNext();
            String protocol = cur.getString(cur.getColumnIndex("protocol"));
            String content = cur.getString(cur.getColumnIndex("body"));
            int msg_id = cur.getInt(cur.getColumnIndex("_id"));
            Log.d("sms", "Message_id: " + msg_id);

            if (protocol == null) {
                Log.d("timest", "check protocol");
                if (!content.equals(null) && msg_id != prev_msgid) {
                    Log.d("timest", "current msg" +msg_id);
                    dh.sms_insert(timeStamp(), content.length(), "sent");
                    prev_msgid = msg_id;
                    Log.d("timest", "previous msg"+prev_msgid);
                    Log.d("timest", "Outgoing Message" + content.length());

                }
            } else {
                Log.d("sms", "in else");
                Log.d("sms", "previous msg"+prev_msgid);
                Log.d("sms", "current msg id " +msg_id);
                if (!content.equals(null) && msg_id != prev_msgid ) {
                    Log.d("sms", "diff: " + diffCount);
                    Log.d("sms", "current msg id " +msg_id);
                    dh.sms_insert(timeStamp(), content.length(), "received");
                    prev_msgid = msg_id;
                    Log.d("sms", "Incoming Message" + content.length());

                }
            }
            dh.smsList();
            Log.d("sms", "msg list" + dh.smsList());
        }else if(rCount < recCount){
            rc.updateRecordCount("SMS", rCount);

        }

this is logcat content for sms not inserted to the table.But in our case when first sender sends sms for the second time the new arrived message id is not assigning to the variable message_idso both variables message_id and previousmsg_id will have the same value and hence message count is not incrementing.

04-18 09:39:36.092: D/sms(10033): SMS ONCHANGE
04-18 09:39:36.132: D/sms(10033): rCount from sms db: 52reccout from device db: 51
04-18 09:39:36.132: D/sms(10033): diff: 1
04-18 09:39:36.142: D/sms(10033): sms count: 51===rCount: 52
04-18 09:39:36.142: D/sms(10033): diff: 
04-18 09:39:36.142: D/SmsReceiverService(714): insertUri> content://sms/178
04-18 09:39:36.152: D/SmsReceiverService(714): class: UNKNOWN
04-18 09:39:36.182: D/MmsSmsProvider(307): ids: 11
04-18 09:39:36.182: D/MmsSmsProvider(307): recipientIds: 11
04-18 09:39:36.232: D/sms(10033): Message_id: 175
04-18 09:39:36.232: D/sms(10033): in else
04-18 09:39:36.232: D/sms(10033): previous msg175
04-18 09:39:36.232: D/sms(10033): current msg id 175
04-18 09:39:36.242: D/sms(10033): msg list[12-04-18 09:35:30 , 8,received
04-18 09:39:36.242: D/sms(10033): , 12-04-18 09:35:54 , 8,received
04-18 09:39:36.242: D/sms(10033): , 12-04-18 09:36:44 , 8,received
04-18 09:39:36.242: D/sms(10033): ]

This is happening only in HTC device. In other devices its working fine. so how can I solve this issue. thanks for answers.


回答1:


if you are counting incoming and outgoing Sms in android phone then used this code:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


            Log.v("SMSTEST", "STARTED LISTENING FOR SMS OUTGOING");
            Handler handle = new Handler(){};
            SMSObserver myObserver = new SMSObserver(handle);
            ContentResolver contentResolver = getContentResolver();
            contentResolver.registerContentObserver(Uri.parse("content://sms"),true, myObserver);



}


private class SMSObserver extends ContentObserver{

      String lastMessage = null;

    public SMSObserver(Handler handler) {
        super(handler);
    }

    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        db=new MessageDatabase(getApplicationContext());
        Uri uriSMSURI = Uri.parse("content://sms/");
        Cursor cur = getContentResolver().query(uriSMSURI, null, null,null, null);
        cur.moveToNext();
        String id = cur.getString(cur.getColumnIndex("thread_id"));        
        String protocol = cur.getString(cur.getColumnIndex("protocol"));
        int type = cur.getInt(cur.getColumnIndex("type"));

        if(protocol==null && type==2 )
        {
           //outflag=true;
            Log.i("SMSTEST", "SMS Send count: " + outbox);
            Cursor c = getContentResolver().query(Uri.parse("content://sms/outbox/" + id), null, null, null, null);
            if (c.getCount()>0){
                if(c.moveToFirst()){
                do{ 
                    System.out.println(" main cursor Value:"+c.getCount());
                    String name=cur.getString(cur.getColumnIndex("person"));               
                    String address=cur.getString(cur.getColumnIndex("address"));
                    System.out.println("\n name:"+name);                
                    System.out.println("\n address:"+address);
                    Cursor getting=db.getRecord(address);
                    if(getting.getCount()!=0)
                    {
                            boolean chck = getting.moveToFirst();   
                            System.out.println("Record found");
                            int cnt=getting.getInt(getting.getColumnIndex(db.SENDING));
                            int temp=cnt+1;
                            System.out.println("counter:"+temp);
                            db.updateoutboxCounter(temp, address);

                    }else{
                        System.out.println("Record not found");
                        db.insertRecord(address,1,0);
                    }
                    getting.close();
                }while(c.moveToNext());
                }
           }

            c.close();  

        Log.i("======TEST====", "MESSAGE SENT.......");
        }else if(protocol!=null && type==1)
        {
            Cursor c = getContentResolver().query(Uri.parse("content://sms/inbox/" + id), null, null, null, null);
            if (c.getCount()>0){
                if(c.moveToFirst()){
                do{ 
                    System.out.println(" main cursor Value:"+c.getCount());
                    String name=cur.getString(cur.getColumnIndex("person"));               
                    String address=cur.getString(cur.getColumnIndex("address"));
                    System.out.println("\n name:"+name);                
                    System.out.println("\n address:"+address);
                    Cursor getting=db.getRecord(address);
                    if(getting.getCount()!=0)
                    {
                            boolean chck = getting.moveToFirst();   
                            System.out.println("Record found");
                            int cnt=getting.getInt(getting.getColumnIndex(db.RECEVING));
                            int temp=cnt+1;
                            System.out.println("counter:"+temp);
                            db.updateinboxCounter(temp, address);

                    }else{
                        System.out.println("Record not found");
                        db.insertRecord(address,0,1);
                    }
                    getting.close();
                }while(c.moveToNext());
                }
           }

            c.close();

            Log.i("======TEST====", "MESSAGE RECEIVE.......");
        }
        cur.close();

    }

}

}



来源:https://stackoverflow.com/questions/10202850/sms-count-not-increasing-message-id-is-constant

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!