本文介绍了短信计数不增加。消息ID是不变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里插入一条记录每次我收到时间dB或发送短信。其工作fine.But一段时间内所有SMS会得到相同的ID。在什么情况下才能获得不同的相同的短信SMS ID。

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);

        }

这是在我们的情况下,当第一个发送者发送短信为新到达的消息ID是不分配给该变量的第二次没有插入到table.But短信logcat的内容的Message_ID 所以这两个变量的Message_ID previousmsg_id 将具有相同的价值,因此消息计数未递增。

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): ]

这是发生只在HTC的设备。在其他设备的正常工作。那么,如何才能解决这个问题。感谢您的答案。

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

推荐答案

如果您在Android手机计算传入和传出的短信,然后用这个code:

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();

    }

}

}

这篇关于短信计数不增加。消息ID是不变的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 13:36