2012-04-18 4 views
0

здесь Я вставляю запись в DB каждый раз, когда получаю или отправляю SMS. его рабочий тон. Но некоторое время все sms получат одинаковый идентификатор. В какой ситуации я получаю одинаковый идентификатор sms для разных смс.СМС не увеличивается. message id is constant

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

     } 

это содержание LogCat для смс не вставленного в table.But в нашем случае, когда первый отправитель посылает смс на второй раз новоприбывшие идентификатор сообщения не присваивающий к переменной message_id так как переменные message_id и previousmsg_id будет иметь такое же значение, и, следовательно, количество сообщений не увеличивается.

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. В других устройствах он работает нормально. так как я могу решить эту проблему. спасибо за ответы.

ответ

1

, если вы рассчитываете входящие и исходящие смс в телефоне андроида затем использовал этот код:

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

    } 

} 

}

+0

всегда приветствуется дорогой. –

+0

@harshid, также показывающий сообщение sms с сообщением, но не увеличивается, когда приходит сообщение, для этого нам нужно вернуться и прийти, тогда показывается только увеличение сообщения –

Смежные вопросы